aboutsummaryrefslogtreecommitdiff
path: root/tests/stack_machine_multiinstructions_load_store/instructions.s.tcl
blob: bd16f8a0bc9c37294776a5a0e69854b2acd407f0 (about) (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#!/usr/bin/env tclsh

source tclasm.tcl

### set stack to h1FFE00, store 4 numbers (h11223344, h55667788, h8899AABB and
### hCCDDEEFF) at addresses h00002E, h00003E, h00004E and h00005E and load them
### back to stack (only 2 will really get written to stack's memory, other 2
### will remain in r0 and r1). Then, write them to h00F0F0, h08F0F0, h10F0F0 and
### h18F0F0.
### At the and use operand-addressing to load back value h55667788 from h00003E
### (expressed as h000040 in im + (-2) in operand) and store it to h1FFFCD
### (expressed as h1F0F0D in im + h00F0C0 in operand).

## set up stack
set_sp 0

## get number h11223344 into r1, and store it - repeat for other 3 numbers;
const h11223344
store h00002E

const h55667788
store h00003E

const h8899AABB
store h00004E

const hCCDDEEFF
store h00005E

## get numbers back on stack
load h00002E
load h00003E
load h00004E
load h00005E

## store copies to new locations
store h18F0F0
store h10F0F0
store h08F0F0
store h00F0F0

## prepare operand for later store operation
const h00F0C0

## use operand addressing to load back value from h000018
const -2
load+ h000040

## use operand addressing to trove value to h1FFFE2 = h1FFFC0 + h000022
# immediate value gets sign-extended here!
store+ h1F0F0D

## finish test
halt