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
|