File: help_assembly.txt

package info (click to toggle)
apoo 2.1-1
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 444 kB
  • ctags: 264
  • sloc: python: 1,954; perl: 67; makefile: 56; sh: 4
file content (185 lines) | stat: -rwxr-xr-x 9,082 bytes parent folder | download
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
--------------------------------------------------------------------------
                       Apoo Assembly Language
---------------------------------------------------------------------------

Apoo has a set of general purpose registers (32 by default), a data
memory area, a program memory area, a system stack and a program
counter register.

All memory cells and registers have 32 bits.

Registers: R0,R1,R2,R3,R4,R5,R6,R7, ...

Memory Data:
-----------
Memory cells are created as needed. We can reserve memory cells
in two ways, using the following pseudo-instructions:

Pseudo-instructions:
-------------------

                       Meaning
-------------------------------------------------
<Label:>        mem     n       reserves n memory addresses
-------------------------------------------------
Label:          const   n2      contents of memory address
                const   n1      Label is n1, of Label+1 is n2


Label is any string beginning with a letter and containing only letters
and digits with the exception of legal register names. If exists, must
begin in the first column of a line

NOTE: Every memory address refered, must have been reserved by 
one of the previous pseudo-instructions.
E.g. the instruction "load 3 R2", will cause an "Out of Memory" error, if
at least "mem 3" or three "const" pseudo-instructions were not given...


System Stack
------------

A special memory area used to implement subroutines. We can only push
a value to the Stack and pop a value from it (the one in the
top of the Stack).
It is used by the instructions jsr and rtn.
It can be manipulated by means of the {\tt push} and {\tt pop} instructions.



Instruction form
----------------

<Label:> Operation <Operand1> <Operand2>

Label is any string of letters or digits; if exists, must begin in the
first column of a line

Comments
--------

A line beginnig with # will be ignored by the parser; so it can be
used to write comments of the program

Instruction Set
---------------

--------------------------------------------------------------------------
Operation  Operand1    Operand2    Meanning
--------------------------------------------------------------------------
load       Mem         Ri          loads contents of memory 
                                   address Mem into register Ri;
                                   Mem can be a label 
--------------------------------------------------------------------------
loadn      Num         Ri          loads number Num into register
                                   Ri; Num can be a label
--------------------------------------------------------------------------
loadi      Ri          Rj          loads contents of memory
                                   which address is the contents
                                   of Ri into Rj (indirect load)
--------------------------------------------------------------------------
store      Ri          Mem         stores contents of Ri at memory
                                   address Mem; Mem can be a label
--------------------------------------------------------------------------
storer     Ri          Rj          stores contents of Ri into Rj
--------------------------------------------------------------------------
storei     Ri          Rj          stores contents of Ri
                                   into at  memory address, which is the
                                   contents of Rj
--------------------------------------------------------------------------
add        Ri          Rj          add contents of register Ri to
                                   contents of register Rj, and
                                   stores into Rj (Rj=Ri+Rj)
--------------------------------------------------------------------------
sub        Ri          Rj          subtracts contents of register
                                   Rj from contents of register Rj
                                   and stores into Rj (Rj=Ri-Rj)
--------------------------------------------------------------------------
mul        Ri          Rj          multiplies  contents of register
                                   Ri and contents of register
                                   Rj, and stores into Rj (Rj=Ri*Rj)
--------------------------------------------------------------------------
div        Ri          Rj          stores into Rj the quotient of integer
                                   division of contents  register
                                   Ri by the contents of register
                                   Rj, and stores into Rj (Rj=Ri/Rj)
--------------------------------------------------------------------------
mod        Ri          Rj          stores into Rj the rest of integer
                                   division of contents of register
                                   Ri by the contents of register
                                   Rj, and stores into Rj (Rj=Ri%Rj)
--------------------------------------------------------------------------
zero       Ri                      the contents of Ri becomes 0 (Ri=0)
--------------------------------------------------------------------------
inc        Ri                      increments by 1 the contents of Ri
--------------------------------------------------------------------------
dec        Ri                      decrements by 1 the contents of Ri
--------------------------------------------------------------------------
jump       Addr                    jumps to instruction address Addr;
           Addr                    can be a Label
--------------------------------------------------------------------------
jzero      Ri          Addr        jumps to instruction address Addr,
                                   if contents of Ri is zero;
                                   Addr can be a Label
----------------------------------------------------------------------------
jnzero      Ri          Addr       jumps to instruction address Addr,
                                   if contents of Ri is different
                                   from zero;
--------------------------------------------------------------------------
jpos       Ri          Addr        jumps to instruction address Addr,
                                   if contents of Ri is positiv;
                                   Addr can be a Label
--------------------------------------------------------------------------
jneg       Ri          Addr        jumps to instruction address Addr,
                                   if contents of Ri is negativ
--------------------------------------------------------------------------
jsr        Addr                    pushes the PC into the stack and 
                                   jumps to instruction address Addr
--------------------------------------------------------------------------
rtn                                pops an address from the stack
                                   into the PC
--------------------------------------------------------------------------
push       Ri                      pushes the contents of Ri into the 
                                   system stack
--------------------------------------------------------------------------
pop        Ri                      pops at element from the system stack
                                   into Ri
--------------------------------------------------------------------------
halt                               stops execution; Every program
                                   must have this instruction in order
                                   to end properly; otherwise an
                                   'Out of Program' error will occur


Memory- mapped instructions
---------------------------

Apoo allows the configuration of a set of memory positions for special
purposes. The memory values and its functionality are given as a
parameter of the Apoo virtual machine. The default values allow the
simulation of input/output:



Memory Position 	Load/Store 	     Meaning
----------------------------------------------------------------------
50000 	           load 50000 Ri      loads 0 Ri

		   store Ri 50000     writes the character which ascii
		                      code is  Ri%256 in the Output
		                      Window (in graphical interface)
		                      or in stdout, in text mode.
------------------------------------------------------------------------
50001		   load 50001 Ri      reads an integer and stores it in Ri
	                             

		   store Ri 50001     writes the contents of Ri as an integer 
-------------------------------------------------------------------------------
50010		   load 50010 Ri      loads 0 in Ri
	
                   store Ri 50010     writes a CR in the Output Window 
                                      (in graphical interface) or in
                                      stdout, in text mode.

-------------------------------------------------------------------
(C) 1998-2006 Rogerio Reis, Nelma Moreira {rvr,nam}@ncc.up.pt