This is an old revision of the document!
The Alfy ASM language is the assembly language for the ALF32 Computer. This virtual CPU has:
Alfy ASM is simulated using CPUSim version 4. To use the simulator:
To run a simulation, you may run it in interactive or non-interactive mode.
Read the installation instructions.
To run CPUSim, open a shell and write
java -classpath .:richtextfx-fat-0.6.10.jar cpusim.Main -m alf_computer32.cpu -t file.asm
This will open the UI, load the AlfyComputer_32.cpu and the file.asm.
To run CPUSim, open a shell and write
java -classpath .:richtextfx-fat-0.6.10.jar cpusim.Main -c -m alf_computer32.cpu -t file.asm
This will load the alf_computer32.cpu and run the file.asm.
After loading a machine and a program, to run it:
Instruction | Equivalent |
---|---|
set r1 value (16 bits) | r1 = value |
mov r1 r2 | r1 = r2 |
load r1 r2 | r2 = MEM [r1] |
store r1 r2 | MEM [r1] = r2 |
pload r1 r2 | r2 = PMEM [r1] |
pstore r1 r2 | PMEM [r1] = r2 |
push r1 | sp = sp - 4 MEM [sp] = r1 |
pop r1 | r1 = MEM [sp] sp = sp + 4 |
pushsp | temp = sp sp = sp - 4 MEM [sp] = temp |
popsp | sp = MEM [sp] |
jmp label | goto label |
run label | sp = sp - 4 MEM [sp] = ip goto etiquete |
ret | sp = sp + 4 ip = MEM [sp] |
(pseudo) label_title: | label label_title |
stop | stop the program |
add r1 r2 r3 | r1 = r2 + r3 |
sub r1 r2 r3 | r1 = r2 - r3 |
mul r1 r2 r3 | r1 = r2 * r3 |
div r1 r2 r3 | r1 = r2 / r3 |
mod r1 r2 r3 | r1 = r2 mod r3 |
dec r1 value (unsigned 16 bits) | r1 = r1 - value |
inc r1 value (unsigned 16 bits) | r1 = r1 + value |
test r1 r2 | t = r1 - r2 |
je label | if t = 0 goto label |
jne label | if t != 0 goto label |
jg label | if t > 0 goto label |
jge label | if t >= 0 goto label |
jl label | if t < 0 goto label |
jle label | if t ⇐ 0 goto label |
and r1 r2 r3 | r1 = r2 AND r3 (bitwise, bit by bit) |
or r1 r2 r3 | r1 = r2 OR r3 (bitwise, bit by bit) |
xor r1 r2 r3 | r1 = r2 XOR r3 (bitwise, bit by bit) |
shl r1 r2 (left shift) | r1 = r1 « r2 |
shr r1 r2 (right shift) | r1 = r1 » r2 |
read r1 | r1 = read character from keyboard |
write r1 | write character r1 to the display |
readnumber r1 | r1 = read number from keyboard |
writenumber r1 | write number r1 to the display |