Examples [7F] [22] [AL] [CL]
[7F] the contents of RAM at location 7F
[CL] the contents of the RAM location that CL points to. CL contains a number that is used as the address.
The Instruction Set
Pop-up Help
Pop-up Help
AND - Logical AND two values together | CPU flags are set |
Assembler
|
Machine Code
|
Explanation
|
AND BL,CL
|
AA 01 02
|
AND CL with BL. Answer goes into BL
|
AND AL,12
|
BA 00 12
|
AND 12 with AL. Answer goes into AL
|
The AND rule is that two ones give a one. All other inputs give nought. Look at this example...
10101010
00001111
--------
ANSWER 00001010
The left four bits are masked to 0.
|
Pop-up Help
CALL and RET | |
Assembler
|
Machine Code
|
Explanation
|
CALL 50
|
CA 50
|
Call the procedure at address 50.
The CPU pushes the instruction pointer value IP + 2 onto the stack. Later the CPU returns to this address.
IP is then set to 50.
|
RET
|
CB
|
The CPU instruction pointer is set to 50. The CPU executes instructions from this address until it reaches the RET command. It then pops the value of IP off the stack and jumps to this address where execution resumes.
|
Pop-up Help
CLI and STI | CPU (I) flag is set/cleared |
Assembler
|
Machine Code
|
Explanation
|
STI
|
FC
|
STI sets the Interrupt flag.
|
CLI
|
FD
|
CLI clears the Interrupt flag 'I' in the status register. STI sets the interrupt flag 'I' in the status register. The machine code for CLI is FD. The machine code for STI is FC.
If (I) is set, the CPU will respond to interrupts. The simulator generates a hardware interrupt at regular time intervals that you can adjust.
If 'I' is set, there should be an interrupt vector at address [02]. The CPU will jump to the code that this vector points to whenever there is an interrupt.
|
Pop-up Help
CLO | CPU flags are NOT set |
Assembler
|
Machine Code
|
Explanation
|
CLO
|
FE
|
Close unwanted peripheral windows.
CLO is not an x86 command. It closes all unnecessary simulator windows which would otherwise have to be closed manually one by one.
|
Pop-up Help
CMP | CPU flags are set |
Assembler
|
Machine Code
|
Explanation
|
CMP AL,0D
|
DB 00 0D
|
Compare AL with 0D
If the values being compared are ...
EQUAL set the 'Z' flag.
AL less than 0D set the 'S' flag.
AL greater than 0D set no flags.
|
CMP AL,BL
|
DA 00 01
|
Compare AL with BL
If the values being compared are ...
EQUAL set the 'Z' flag.
AL less than BL set the 'S' flag.
AL greater than BL set no flags.
|
CMP CL,[20]
|
DC 02 20
|
Compare CL with 20
If the values being compared are ...
EQUAL set the 'Z' flag.
CL less than RAM[20] set the 'S' flag.
CL greater than RAM[20] set no flags.
|
Pop-up Help
DB | CPU flags are NOT set |
Assembler
|
Machine Code
|
Explanation
|
DB 22
DB 33
DB 44
DB 0
|
22
33
44
00
|
Define Byte
DB gives a method for loading values directly into RAM.
DB does not have a machine code.
The numbers or text after DB are loaded into RAM.
Use DB to set up data tables.
|
DB "Hello"
DB 0
|
48
65
6C
6C
6F
00
|
ASCII codes are loaded into RAM.
End of text is marked by NULL
|
Pop-up Help
DEC and INC | CPU flags are set |
Assembler
|
Machine Code
|
Explanation
|
INC BL
|
A4 01
|
Add one to BL.
|
DEC AL
|
A5 00
|
Subtract one from AL.
|
Pop-up Help
DIV and MOD | CPU flags are set |
Assembler
|
Machine Code
|
Explanation
|
DIV AL,5
|
B3 00 05
|
Divide AL by 5. Answer goes into AL.
DIV differs from the x86 DIV.
|
DIV AL,BL
|
A3 00 01
|
Divide AL by BL. Answer goes into AL.
DIV differs from the x86 DIV.
|
MOD AL,5
|
B6 00 05
|
MOD AL by 5.
Remainder after division goes into AL.
MOD is not an x86 command.
|
MOD AL,BL
|
A6 00 01
|
MOD AL by BL.
Remainder after division goes into AL.
MOD is not an x86 command.
|
The x86 DIV calculates div and mod in one command. The answers are put into different registers. This is not possible with the 8 bit simulator so div and mod are separated and simplified.
8 DIV 3 is 3 (with remainder 2). 8 MOD 3 is 2
|
Pop-up Help
END | CPU flags are NOT set |
Assembler
|
Machine Code
|
Explanation
|
END
|
00
|
END stops further program execution.
The simulator achieves this by stopping the CPU clock.
END is also an assembler directive.
All code after END is ignored by the assembler.
There should be only one END in a program.
|
Pop-up Help
HALT | CPU flags are NOT set |
Assembler
|
Machine Code
|
Explanation
|
HALT
|
00
|
HALT stops further program execution.
The simulator achieves this by stopping the CPU clock.
HALT is not an assembler directive. (See END)
There can be any number of HALT commands in a program.
|
Pop-up Help
IN and OUT | CPU flags are NOT set |
Assembler
|
Machine Code
|
Explanation
|
IN 07
|
F0 07
|
Input from port 07. The data is stored in the AL register.
|
OUT 03
|
F1 03
|
Output to port 03. The data comes from the AL register.
|
Pop-up Help
INC and DEC | CPU flags are set |
Assembler
|
Machine Code
|
Explanation
|
INC BL
|
A4 01
|
Add one to BL.
|
DEC AL
|
A5 00
|
Subtract one from AL.
|
Pop-up Help
INT and IRET | CPU flags are NOT set |
Assembler
|
Machine Code
|
Explanation
|
INT 02
|
CC 02
|
The return address (IP + 2) is pushed onto the stack.
The stack pointer (SP) is reduced by one.
RAM location 02 contains the address of the Interrupt Handler.
This address is "fetched" and IP is set to it.
|
IRET
|
CD
|
The return address is popped off the stack.
The stack pointer (SP) is increased by one.
IP is set to the return address popped off the stack.
|
Pop-up Help
JMP | CPU flags are NOT set and the flags are ignored |
Assembler
|
Machine Code
|
Explanation
|
JMP Forward
|
C0 12
|
Set IP to a new value
Add 12 to IP
The assembler calculates the jump distance.
The biggest possible forward jump is +127.
|
JMP Back
|
FE
|
Set IP to a new value
Add -2 to IP
FE is -2. This is explained here.
The assembler calculates the jump distance.
The biggest possible backward jump is -128.
|
Pop-up Help
JNO | CPU flags are NOT set. JNO uses the (O) flag.
The (O) flag is set if a calculation gives a result too big to fit in an 8 but register.
|
Assembler
|
Machine Code
|
Explanation
|
JNO Forward
|
C6 12
|
Jump if the (O) flag is NOT set.
If the (O) flag is NOT set, jump forward 12 places.
If the (O) flag is NOT set, add 12 to (IP).
If the (O) flag is set, add 2 to (IP).
The assembler calculates the jump distance.
The biggest possible forward jump is +127.
|
JNO Back
|
C6 FE
|
Jump if the (O) flag is NOT set.
If the (O) flag is NOT set, jump back 2 places.
If the (O) flag is NOT set, add -2 to (IP).
If the (O) flag is set, add 2 to (IP).
The assembler calculates the jump distance.
The biggest possible backward jump is -128.
FE is -2. This is explained here.
|
Pop-up Help
Share with your friends: |