1144 lines
29 KiB
NASM
1144 lines
29 KiB
NASM
; Tests for opcode range 0x00-0x0F
|
|
; ---------------------------------
|
|
|
|
|
|
; 0x00 - ADD REG8/MEM8,REG8
|
|
; ############################################################
|
|
|
|
TEST_00_0: ; ADD MEM8,REG8 - Test data values from memory
|
|
|
|
mov ax,es ; Increment ES so it is not the same as DS
|
|
inc ax
|
|
mov es,ax
|
|
|
|
mov byte [00050],000
|
|
mov ax,000FF
|
|
lock add [00050],al ; test lock prefix
|
|
cmp byte [00050],0FF
|
|
jne FAIL_00_0
|
|
|
|
mov byte [00050],000
|
|
mov ax,00000
|
|
add [00050],al
|
|
cmp byte [00050],000
|
|
jne FAIL_00_0
|
|
|
|
mov byte es:[00052],011 ; test segment override
|
|
mov ax,00022
|
|
add es:[00052],al
|
|
cmp byte es:[00052],033
|
|
jne FAIL_00_0
|
|
|
|
mov byte [00053],0FF
|
|
mov ax,000FF
|
|
add [00053],al
|
|
cmp byte [00053],0FE
|
|
jne FAIL_00_0
|
|
jmp TEST_00_1
|
|
|
|
FAIL_00_0:
|
|
mov dx,00030 ; Print a 0
|
|
mov ax,00202
|
|
int 021
|
|
|
|
; ##################
|
|
TEST_00_1: ; ADD MEM8,REG8 - Test flags
|
|
; Overflow, Sign, Zero, Parity, AUX, Carry
|
|
|
|
mov byte [00054],07B
|
|
mov ax,00036
|
|
add [00054],al ; Overflow should be set
|
|
jno FAIL_00_1 ; If not set, then fail
|
|
|
|
mov byte [00055],0B1
|
|
mov ax,00037
|
|
add [00055],al ; Overflow should NOT be set
|
|
jno PASS_00_1 ; If not set, then we passed
|
|
jmp FAIL_00_1 ; If set then we fail
|
|
|
|
PASS_00_1:
|
|
mov byte [00056],0FF
|
|
mov ax,000FF
|
|
add [00056],al ; sign should be set
|
|
jns FAIL_00_1 ; If not set, then fail
|
|
|
|
mov byte [00057],011
|
|
mov ax,00022
|
|
add [00057],al ; sign should NOT be set
|
|
js FAIL_00_1 ; If set then we fail
|
|
|
|
mov byte [00058],000
|
|
mov ax,00000
|
|
add [00058],al ; zero should be set
|
|
jne FAIL_00_1 ; If not set then we fail
|
|
jmp PASS_00_2
|
|
|
|
FAIL_00_1:
|
|
mov dx,00030 ; Print a 0
|
|
mov ax,00202
|
|
int 021
|
|
jmp TEST_01_0
|
|
|
|
PASS_00_2:
|
|
mov byte [00050],000
|
|
mov ax,00001
|
|
add [00050],al ; zero should NOT be set
|
|
je FAIL_00_1 ; If set then we fail
|
|
|
|
mov byte [00050],012
|
|
mov ax,00035
|
|
add [00050],al ; parity should be set
|
|
jnp FAIL_00_1 ; If not set then we fail
|
|
|
|
mov byte [00050],012
|
|
mov ax,00034
|
|
add [00050],al ; parity should NOT be set
|
|
jp FAIL_00_1 ; If set then we fail
|
|
|
|
mov byte [00050],0FF
|
|
mov ax,000FF
|
|
add [00050],al ; carry should be set
|
|
jnc FAIL_00_1 ; If not set then we fail
|
|
|
|
mov byte [00050],012
|
|
mov ax,00034
|
|
add [00050],al ; carry should NOT be set
|
|
jc FAIL_00_1 ; If set then we fail
|
|
|
|
|
|
; 0x01 - ADD REG16/MEM16,REG16
|
|
; ############################################################
|
|
|
|
TEST_01_0: ; ADD MEM16,REG16 - Test data values from memory
|
|
|
|
mov word [00060],00000
|
|
mov ax,000FF
|
|
lock add [00060],ax
|
|
cmp word [00060],000FF
|
|
jne FAIL_01_0
|
|
|
|
mov word [00060],00000
|
|
mov ax,00000
|
|
add [00060],ax
|
|
cmp word [00060],00000
|
|
jne FAIL_01_0
|
|
|
|
mov word es:[00060],03333
|
|
mov ax,01111
|
|
add es:[00060],ax
|
|
cmp word es:[00060],04444
|
|
jne FAIL_01_0
|
|
|
|
mov word [00060],000FF
|
|
mov ax,000FF
|
|
add [00060],ax
|
|
cmp byte [00060],000FE
|
|
jne FAIL_01_0
|
|
jmp TEST_01_1
|
|
|
|
|
|
FAIL_01_0:
|
|
mov dx,00031 ; Print a 1
|
|
mov ax,00202
|
|
int 021
|
|
|
|
; ##################
|
|
TEST_01_1: ; ADD MEM16,REG16 - Test flags
|
|
; Overflow, Sign, Zero, Parity, AUX, Carry
|
|
|
|
mov word [00050],07FFF
|
|
mov ax,01234
|
|
add [00050],ax ; Overflow should be set
|
|
jno FAIL_01_1 ; If not set, then fail
|
|
|
|
mov word [00050],01212
|
|
mov ax,03434
|
|
add [00050],ax ; Overflow should NOT be set
|
|
jno PASS_01_1 ; If not set, then we passed
|
|
jmp FAIL_01_1 ; If set then we fail
|
|
|
|
PASS_01_1:
|
|
mov word [00050],00001
|
|
mov ax,07FFF
|
|
add [00050],ax ; sign should be set
|
|
jns FAIL_01_1 ; If not set, then fail
|
|
|
|
mov word [00050],01234
|
|
mov ax,04321
|
|
add [00050],ax ; sign should NOT be set
|
|
js FAIL_01_1 ; If set then we fail
|
|
|
|
mov word [00050],00000
|
|
mov ax,00000
|
|
add [00050],ax ; zero should be set
|
|
jne FAIL_01_1 ; If not set then we fail
|
|
jmp PASS_01_2
|
|
|
|
FAIL_01_1:
|
|
mov dx,00032 ; Print a 2
|
|
mov ax,00202
|
|
int 021
|
|
jmp TEST_02_0
|
|
|
|
PASS_01_2:
|
|
mov word [00050],01111
|
|
mov ax,02222
|
|
add [00050],ax ; zero should NOT be set
|
|
je FAIL_01_1 ; If set then we fail
|
|
|
|
mov word [00050],04444
|
|
mov ax,01111
|
|
add [00050],ax ; parity should be set
|
|
jnp FAIL_01_1 ; If not set then we fail
|
|
|
|
mov word [00050],01111
|
|
mov ax,01234
|
|
add [00050],ax ; parity should NOT be set
|
|
jp FAIL_01_1 ; If set then we fail
|
|
|
|
mov word [00050],0FFFF
|
|
mov ax,00001
|
|
add [00050],ax ; carry should be set
|
|
jnc FAIL_01_1 ; If not set then we fail
|
|
|
|
mov word [00050],01234
|
|
mov ax,05678
|
|
add [00050],ax ; carry should NOT be set
|
|
jc FAIL_01_1 ; If set then we fail
|
|
|
|
|
|
; 0x02 - ADD REG8,MEM8/REG8
|
|
; ############################################################
|
|
|
|
TEST_02_0: ; ADD REG8,REG8 - Test data values from registers
|
|
mov ax,000FF
|
|
lock add ah,al
|
|
cmp ax,0FFFF
|
|
jne FAIL_02_0
|
|
|
|
mov ax,00000
|
|
add ah,al
|
|
cmp ax,00000
|
|
jne FAIL_02_0
|
|
|
|
mov ax,0FFFF
|
|
add ah,al
|
|
cmp ax , 0FEFF
|
|
jne FAIL_02_0
|
|
jmp TEST_02_1
|
|
|
|
FAIL_02_0:
|
|
mov dx,00032 ; Print a 2
|
|
mov ax,00202
|
|
int 021
|
|
|
|
; ##################
|
|
|
|
TEST_02_1: ; ADD MEM8,REG8 - Test data values from memory
|
|
|
|
mov byte [00050],000
|
|
mov ax,000FF
|
|
add al,[00050]
|
|
cmp al,0FF
|
|
jne FAIL_02_1
|
|
|
|
mov byte [00050],000
|
|
mov ax,00000
|
|
add al,[00050]
|
|
cmp al,000
|
|
jne FAIL_02_1
|
|
|
|
mov byte es:[00050],066
|
|
mov ax,00011
|
|
add al,es:[00050]
|
|
cmp al,077
|
|
jne FAIL_02_1
|
|
|
|
mov byte [00050],0FF
|
|
mov ax,000FF
|
|
add al,[00050]
|
|
cmp al,0FE
|
|
jne FAIL_02_1
|
|
jmp TEST_02_2
|
|
|
|
|
|
|
|
FAIL_02_1:
|
|
mov dx,00032 ; Print a 2
|
|
mov ax,00202
|
|
int 021
|
|
|
|
; ##################
|
|
|
|
TEST_02_2: ; ADD REG8,REG8 - Test flags
|
|
; Overflow, Sign, Zero, Parity, AUX, Carry
|
|
|
|
mov ax,07B36 ; Test overflow flag
|
|
add ah,al ; Overflow should be set
|
|
jno FAIL_02_2 ; If not set, then fail
|
|
|
|
mov ax,0B137 ; Test overflow flag
|
|
add ah,al ; Overflow should NOT be set
|
|
jno PASS_02_2 ; If not set, then we passed
|
|
jmp FAIL_02_2 ; If set then we fail
|
|
|
|
PASS_02_2:
|
|
mov dx,0FFFF ; Test sign flag
|
|
add dl,dh ; sign should be set
|
|
jns FAIL_02_2 ; If not set, then fail
|
|
|
|
mov cx,01122 ; Test sign flag
|
|
add ch,cl ; sign should NOT be set
|
|
js FAIL_02_2 ; If set then we fail
|
|
|
|
mov cx,00000 ; Test zero flag
|
|
add ch,cl ; zero should be set
|
|
jne FAIL_02_2 ; If not set then we fail
|
|
|
|
mov cx,00001 ; Test zero flag
|
|
add ch,cl ; zero should NOT be set
|
|
je FAIL_02_2 ; If set then we fail
|
|
|
|
mov ax,01235 ; Test parity flag
|
|
add ah,al ; parity should be set
|
|
jnp FAIL_02_2 ; If not set then we fail
|
|
|
|
mov cx,01234 ; Test parity flag
|
|
add ch,cl ; parity should NOT be set
|
|
jp FAIL_02_2 ; If set then we fail
|
|
|
|
mov ax,0FFFF ; Test carry flag
|
|
add ah,al ; carry should be set
|
|
jnc FAIL_02_2 ; If not set then we fail
|
|
|
|
mov cx,01234 ; Test carry flag
|
|
add ch,cl ; carry should NOT be set
|
|
jc FAIL_02_2 ; If set then we fail
|
|
jmp TEST_03_0
|
|
|
|
FAIL_02_2:
|
|
mov dx,00032 ; Print a 2
|
|
mov ax,00202
|
|
int 021
|
|
|
|
|
|
; 0x03 - ADD REG16,MEM16/REG16
|
|
; ############################################################
|
|
|
|
TEST_03_0: ; ADD MEM16,REG16 - Test data values from memory
|
|
|
|
mov word [00055],00000
|
|
mov ax,0FFFF
|
|
add ax,[00055]
|
|
cmp ax,0FFFF
|
|
jne FAIL_03_0
|
|
|
|
mov word [00057],00000
|
|
mov ax,00000
|
|
add ax,[00057]
|
|
cmp ax,00000
|
|
jne FAIL_03_0
|
|
|
|
mov word es:[00059],06666
|
|
mov ax,01111
|
|
add ax,es:[00059]
|
|
cmp ax,07777
|
|
jne FAIL_03_0
|
|
|
|
mov word [00060],0FFFF
|
|
mov ax,0FFFF
|
|
add ax,[00060]
|
|
cmp ax,0FFFE
|
|
jne FAIL_03_0
|
|
jmp TEST_03_1
|
|
|
|
FAIL_03_0:
|
|
mov dx,00033 ; Print a 3
|
|
mov ax,00202
|
|
int 021
|
|
|
|
; ##################
|
|
|
|
TEST_03_1: ; ADD REG16,MEM16 - Test flags
|
|
; Overflow, Sign, Zero, Parity, AUX, Carry
|
|
|
|
mov word [00070],07FFF ; Test overflow flag
|
|
mov ax,01234
|
|
add ax,word [00070] ; Overflow should be set
|
|
jno FAIL_03_1 ; If not set, then fail
|
|
|
|
mov word [00070],01212 ; Test overflow flag
|
|
mov ax,03434
|
|
add ax,word [00070] ; Overflow should NOT be set
|
|
jno PASS_03_1 ; If not set, then we passed
|
|
jmp FAIL_03_1 ; If set then we fail
|
|
|
|
PASS_03_1:
|
|
mov word [00070],00001 ; Test sign flag
|
|
mov ax,07FFF
|
|
add ax,word [00070] ; Sign should be set
|
|
jns FAIL_03_1 ; If not set, then fail
|
|
|
|
mov word [00070],01234 ; Test sign flag
|
|
mov ax,04321
|
|
add ax,word [00070] ; Sign should NOT be set
|
|
js FAIL_03_1 ; If set, then fail
|
|
|
|
mov word [00070],00000 ; Test zero flag
|
|
mov ax,00000
|
|
add ax,word [00070] ; Zero should be set
|
|
jne FAIL_03_1 ; If not set, then fail
|
|
|
|
mov word [00070],00001 ; Test zero flag
|
|
mov ax,00000
|
|
add ax,word [00070] ; Zero should NOT be set
|
|
je FAIL_03_1 ; If set, then fail
|
|
jmp TEST_03_2
|
|
|
|
|
|
FAIL_03_1:
|
|
mov dx,00033 ; Print a 3
|
|
mov ax,00202
|
|
int 021
|
|
|
|
|
|
TEST_03_2:
|
|
mov word [00070],01111 ; Test parity flag
|
|
mov ax,01111
|
|
add ax,word [00070] ; Parity should be set
|
|
jnp FAIL_03_1 ; If not set, then fail
|
|
|
|
mov word [00070],01111 ; Test parity flag
|
|
mov ax,01234
|
|
add ax,word [00070] ; Parity should NOT be set
|
|
jp FAIL_03_1 ; If set, then fail
|
|
|
|
mov word [00070],0FFFF ; Test carry flag
|
|
mov ax,00001
|
|
add ax,word [00070] ; Carry should be set
|
|
jnc FAIL_03_1 ; If not set, then fail
|
|
|
|
mov word [00070],01234 ; Test carry flag
|
|
mov ax,05678
|
|
add ax,word [00070] ; Carry should NOT be set
|
|
jc FAIL_03_1 ; If set, then fail
|
|
|
|
|
|
|
|
; 0x04 - ADD AL,IMMED8
|
|
; ############################################################
|
|
|
|
TEST_04_0: ; ADD AL,IMMED8 - Test data values from registers
|
|
mov ax,000FF
|
|
lock add al,000
|
|
cmp ax,000FF
|
|
jne FAIL_04_0
|
|
|
|
mov ax,00000
|
|
add al,000
|
|
cmp ax,00000
|
|
jne FAIL_04_0
|
|
|
|
mov ax,012FF
|
|
add al,0FF
|
|
cmp ax , 012FE
|
|
jne FAIL_04_0
|
|
jmp TEST_04_1
|
|
|
|
FAIL_04_0:
|
|
mov dx,00034 ; Print a 4
|
|
mov ax,00202
|
|
int 021
|
|
|
|
; ##################
|
|
|
|
TEST_04_1: ; ADD AL,IMMED8 - Test flags
|
|
; Overflow, Sign, Zero, Parity, AUX, Carry
|
|
|
|
mov ax,0007B ; Test overflow flag
|
|
add al,036 ; Overflow should be set
|
|
jno FAIL_04_1 ; If not set, then fail
|
|
|
|
mov ax,037B1 ; Test overflow flag
|
|
add al,037 ; Overflow should NOT be set
|
|
jno PASS_04_1 ; If not set, then we passed
|
|
jmp FAIL_04_1
|
|
|
|
PASS_04_1:
|
|
mov ax,0FFFF ; Test sign flag
|
|
add al,0FF ; sign should be set
|
|
jns FAIL_04_1 ; If not set, then fail
|
|
|
|
mov ax,09911 ; Test sign flag
|
|
add al,022 ; sign should NOT be set
|
|
js FAIL_04_1 ; If set then we fail
|
|
|
|
mov ax,00000 ; Test zero flag
|
|
add al,000 ; zero should be set
|
|
jne FAIL_04_1 ; If not set then we fail
|
|
|
|
mov ax,00001 ; Test zero flag
|
|
add al,012 ; zero should NOT be set
|
|
je FAIL_04_1 ; If set then we fail
|
|
|
|
mov ax,01235 ; Test parity flag
|
|
add al,012 ; parity should be set
|
|
jnp FAIL_04_1 ; If not set then we fail
|
|
|
|
mov ax,01234 ; Test parity flag
|
|
add al,012 ; parity should NOT be set
|
|
jp FAIL_04_1 ; If set then we fail
|
|
|
|
mov ax,0FFFF ; Test carry flag
|
|
add al,001 ; carry should be set
|
|
jnc FAIL_04_1 ; If not set then we fail
|
|
|
|
mov ax,01234 ; Test carry flag
|
|
add al,012 ; carry should NOT be set
|
|
jc FAIL_04_1 ; If set then we fail
|
|
|
|
jmp TEST_05_0
|
|
|
|
FAIL_04_1:
|
|
mov dx,00034 ; Print a 4
|
|
mov ax,00202
|
|
int 021
|
|
|
|
|
|
; 0x05 - ADD AX,IMMED16
|
|
;
|
|
|
|
TEST_05_0: ; ADD AX,IMMED16 - Test data values from registers
|
|
mov ax,0FFFF
|
|
lock add ax,00000
|
|
cmp ax,0FFFF
|
|
jne FAIL_05_0
|
|
|
|
mov ax,00000
|
|
add ax,00000
|
|
cmp ax,00000
|
|
jne FAIL_05_0
|
|
|
|
mov ax,01200
|
|
add ax,00034
|
|
cmp ax,01234
|
|
jne FAIL_05_0
|
|
jmp TEST_05_1
|
|
|
|
FAIL_05_0:
|
|
mov dx,00035 ; Print a 5
|
|
mov ax,00202
|
|
int 021
|
|
|
|
; ##################
|
|
|
|
TEST_05_1: ; ADD AX,IMMED16 - Test flags
|
|
; Overflow, Sign, Zero, Parity, AUX, Carry
|
|
|
|
mov ax,07FFF ; Test overflow flag
|
|
add ax,01234 ; Overflow should be set
|
|
jno FAIL_05_1 ; If not set, then fail
|
|
|
|
mov ax,01212 ; Test overflow flag
|
|
add ax,03434 ; Overflow should NOT be set
|
|
jno PASS_05_1 ; If not set, then we passed
|
|
jmp FAIL_05_1
|
|
|
|
PASS_05_1:
|
|
mov ax,00001 ; Test sign flag
|
|
add ax,07FFF ; sign should be set
|
|
jns FAIL_05_1 ; If not set, then fail
|
|
|
|
mov ax,01234 ; Test sign flag
|
|
add ax,04321 ; sign should NOT be set
|
|
js FAIL_05_1 ; If set then we fail
|
|
|
|
mov ax,00000 ; Test zero flag
|
|
add ax,00000 ; zero should be set
|
|
jne FAIL_05_1 ; If not set then we fail
|
|
|
|
mov ax,00001 ; Test zero flag
|
|
add ax,01234 ; zero should NOT be set
|
|
je FAIL_05_1 ; If set then we fail
|
|
|
|
mov ax,04444 ; Test parity flag
|
|
add ax,01111 ; parity should be set
|
|
jnp FAIL_05_1 ; If not set then we fail
|
|
|
|
mov ax,01111 ; Test parity flag
|
|
add ax,01234 ; parity should NOT be set
|
|
jp FAIL_05_1 ; If set then we fail
|
|
|
|
mov ax,0FFFF ; Test carry flag
|
|
add ax,00001 ; carry should be set
|
|
jnc FAIL_05_1 ; If not set then we fail
|
|
|
|
mov ax,01234 ; Test carry flag
|
|
add ax,05678 ; carry should NOT be set
|
|
jc FAIL_05_1 ; If set then we fail
|
|
|
|
jmp TEST_06_0
|
|
|
|
FAIL_05_1:
|
|
mov dx,00035 ; Print a 5
|
|
mov ax,00202
|
|
int 021
|
|
|
|
|
|
; 0x06 - PUSH ES
|
|
; ############################################################
|
|
|
|
TEST_06_0:
|
|
mov ax,01234
|
|
mov es,ax
|
|
lock push es
|
|
pop bx
|
|
cmp ax,bx
|
|
jne FAIL_06_0
|
|
|
|
jmp TEST_07_0
|
|
|
|
FAIL_06_0:
|
|
mov dx,00036 ; Print a 6
|
|
mov ax,00202
|
|
int 021
|
|
|
|
|
|
; 0x07 - POP ES
|
|
; ############################################################
|
|
|
|
TEST_07_0:
|
|
mov ax,01234
|
|
push ax
|
|
lock pop es
|
|
mov bx,es
|
|
cmp ax,bx
|
|
jne FAIL_07_0
|
|
|
|
jmp TEST_08_0
|
|
|
|
FAIL_07_0:
|
|
mov dx,00037 ; Print a 7
|
|
mov ax,00202
|
|
int 021
|
|
|
|
; 0x08 - OR REG8/MEM8,REG8
|
|
; ############################################################
|
|
|
|
TEST_08_0: ; OR MEM8,REG8 - Test data values from memory
|
|
|
|
mov ax,es ; Increment ES so it is not the same as DS
|
|
inc ax
|
|
mov es,ax
|
|
|
|
mov byte [00050],05A
|
|
mov ax,000A5
|
|
lock or [00050],al
|
|
cmp byte [00050],0FF
|
|
jne FAIL_08_0
|
|
|
|
mov byte [00050],000
|
|
mov ax,00000
|
|
or [00050],al
|
|
cmp byte [00050],000
|
|
jne FAIL_08_0
|
|
|
|
mov byte es:[00050],080
|
|
mov ax,00001
|
|
or es:[00050],al
|
|
cmp byte es:[00050],081
|
|
jne FAIL_08_0
|
|
jmp TEST_08_1
|
|
|
|
|
|
FAIL_08_0:
|
|
mov dx,00038 ; Print a 8
|
|
mov ax,00202
|
|
int 021
|
|
|
|
; ##################
|
|
TEST_08_1: ; OR MEM8,REG8 - Test flags
|
|
; Overflow, Sign, Zero, Parity, AUX, Carry
|
|
|
|
mov byte [00050],011
|
|
mov ax,00022
|
|
or [00050],al ; Overflow should NEVER be set
|
|
jno PASS_08_1 ; If not set, then we passed
|
|
jmp FAIL_08_1 ; If set then we fail
|
|
|
|
PASS_08_1:
|
|
mov byte [00050],080
|
|
mov ax,00000
|
|
or [00050],al ; sign should be set
|
|
jns FAIL_08_1 ; If not set, then fail
|
|
|
|
mov byte [00050],011
|
|
mov ax,00022
|
|
or [00050],al ; sign should NOT be set
|
|
js FAIL_08_1 ; If set then we fail
|
|
|
|
mov byte [00050],000
|
|
mov ax,00000
|
|
or [00050],al ; zero should be set
|
|
jne FAIL_08_1 ; If not set then we fail
|
|
jmp PASS_08_2
|
|
|
|
FAIL_08_1:
|
|
mov dx,00038 ; Print a 8
|
|
mov ax,00202
|
|
int 021
|
|
jmp TEST_09_0
|
|
|
|
PASS_08_2:
|
|
mov byte [00050],000
|
|
mov ax,00001
|
|
or [00050],al ; zero should NOT be set
|
|
je FAIL_08_1 ; If set then we fail
|
|
|
|
mov byte [00050],001
|
|
mov ax,00002
|
|
or [00050],al ; parity should be set
|
|
jnp FAIL_08_1 ; If not set then we fail
|
|
|
|
mov byte [00050],001
|
|
mov ax,00006
|
|
or [00050],al ; parity should NOT be set
|
|
jp FAIL_08_1 ; If set then we fail
|
|
|
|
mov byte [00050],012
|
|
mov ax,00034
|
|
or [00050],al ; carry should NEVER be set
|
|
jc FAIL_08_1 ; If set then we fail
|
|
|
|
|
|
; 0x09 - OR REG16/MEM16,REG16
|
|
; ############################################################
|
|
|
|
TEST_09_0: ; OR MEM16,REG16 - Test data values from memory
|
|
|
|
mov word [00050],05A5A
|
|
mov ax,0A5A5
|
|
lock or [00050],ax
|
|
cmp word [00050],0FFFF
|
|
jne FAIL_09_0
|
|
|
|
mov word [00050],00000
|
|
mov ax,00000
|
|
or [00050],ax
|
|
cmp word [00050],00000
|
|
jne FAIL_09_0
|
|
|
|
mov word es:[00050],01111
|
|
mov ax,02222
|
|
or es:[00050],ax
|
|
cmp word es:[00050],03333
|
|
jne FAIL_09_0
|
|
jmp TEST_09_1
|
|
|
|
|
|
FAIL_09_0:
|
|
mov dx,00039 ; Print a 9
|
|
mov ax,00202
|
|
int 021
|
|
|
|
; ##################
|
|
TEST_09_1: ; OR MEM16,REG16 - Test flags
|
|
; Overflow, Sign, Zero, Parity, AUX, Carry
|
|
|
|
mov word [00050],01111
|
|
mov ax,02222
|
|
or [00050],ax ; Overflow should NEVER be set
|
|
jno PASS_09_1 ; If not set, then we passed
|
|
jmp FAIL_09_1 ; If set then we fail
|
|
|
|
PASS_09_1:
|
|
mov word [00050],08000
|
|
mov ax,00001
|
|
or [00050],ax ; sign should be set
|
|
jns FAIL_09_1 ; If not set, then fail
|
|
|
|
mov word [00050],07FF0
|
|
mov ax,0000F
|
|
or [00050],ax ; sign should NOT be set
|
|
js FAIL_09_1 ; If set then we fail
|
|
|
|
mov word [00050],00000
|
|
mov ax,00000
|
|
or [00050],ax ; zero should be set
|
|
jne FAIL_09_1 ; If not set then we fail
|
|
jmp PASS_09_2
|
|
|
|
FAIL_09_1:
|
|
mov dx,00039 ; Print a 9
|
|
mov ax,00202
|
|
int 021
|
|
jmp TEST_0A_0
|
|
|
|
PASS_09_2:
|
|
mov word [00050],00000
|
|
mov ax,00001
|
|
or [00050],ax ; zero should NOT be set
|
|
je FAIL_09_1 ; If set then we fail
|
|
|
|
mov word [00050],00011
|
|
mov ax,00022
|
|
or [00050],ax ; parity should be set
|
|
jnp FAIL_09_1 ; If not set then we fail
|
|
|
|
mov word [00050],00011
|
|
mov ax,00002
|
|
or [00050],ax ; parity should NOT be set
|
|
jp FAIL_09_1 ; If set then we fail
|
|
|
|
mov word [00050],00012
|
|
mov ax,00034
|
|
or [00050],ax ; carry should NEVER be set
|
|
jc FAIL_09_1 ; If set then we fail
|
|
|
|
|
|
; 0x0A - OR REG8,MEM8/REG8
|
|
; ############################################################
|
|
|
|
TEST_0A_0: ; OR REG8,REG8 - Test data values from registers
|
|
mov ax,05AA5
|
|
lock or ah,al
|
|
cmp ax,0FFA5
|
|
jne FAIL_0A_0
|
|
|
|
mov ax,00000
|
|
or ah,al
|
|
cmp ax,00000
|
|
jne FAIL_0A_0
|
|
|
|
mov ax,08001
|
|
or ah,al
|
|
cmp ax,08101
|
|
jne FAIL_0A_0
|
|
jmp TEST_0A_1
|
|
|
|
FAIL_0A_0:
|
|
mov dx,00041 ; Print a A
|
|
mov ax,00202
|
|
int 021
|
|
|
|
; ##################
|
|
|
|
TEST_0A_1: ; OR MEM8,REG8 - Test data values from memory
|
|
|
|
mov byte [00050],05A
|
|
mov ax,000A5
|
|
or al,[00050]
|
|
cmp al,0FF
|
|
jne FAIL_0A_1
|
|
|
|
mov byte [00050],000
|
|
mov ax,00000
|
|
or al,[00050]
|
|
cmp al,000
|
|
jne FAIL_0A_1
|
|
|
|
mov byte es:[00050],080
|
|
mov ax,00001
|
|
or al,es:[00050]
|
|
cmp al,081
|
|
jne FAIL_0A_1
|
|
jmp TEST_0A_2
|
|
|
|
|
|
|
|
FAIL_0A_1:
|
|
mov dx,00041 ; Print a A
|
|
mov ax,00202
|
|
int 021
|
|
|
|
; ##################
|
|
|
|
TEST_0A_2: ; OR REG8,REG8 - Test flags
|
|
; Overflow, Sign, Zero, Parity, AUX, Carry
|
|
|
|
mov ax,0B137 ; Test overflow flag
|
|
or ah,al ; Overflow should NEVER be set
|
|
jno PASS_0A_2 ; If not set, then we passed
|
|
jmp FAIL_0A_2 ; If set then we fail
|
|
|
|
PASS_0A_2:
|
|
mov dx,0FFFF ; Test sign flag
|
|
or dl,dh ; sign should be set
|
|
jns FAIL_0A_2 ; If not set, then fail
|
|
|
|
mov cx,01122 ; Test sign flag
|
|
or ch,cl ; sign should NOT be set
|
|
js FAIL_0A_2 ; If set then we fail
|
|
|
|
mov cx,00000 ; Test zero flag
|
|
or ch,cl ; zero should be set
|
|
jne FAIL_0A_2 ; If not set then we fail
|
|
|
|
mov cx,00001 ; Test zero flag
|
|
or ch,cl ; zero should NOT be set
|
|
je FAIL_0A_2 ; If set then we fail
|
|
|
|
mov ax,00102 ; Test parity flag
|
|
or ah,al ; parity should be set
|
|
jnp FAIL_0A_2 ; If not set then we fail
|
|
|
|
mov cx,00100 ; Test parity flag
|
|
or ch,cl ; parity should NOT be set
|
|
jp FAIL_0A_2 ; If set then we fail
|
|
|
|
mov cx,01234 ; Test carry flag
|
|
or ch,cl ; carry should NEVER be set
|
|
jc FAIL_0A_2 ; If set then we fail
|
|
jmp TEST_0B_1
|
|
|
|
FAIL_0A_2:
|
|
mov dx,00041 ; Print a A
|
|
mov ax,00202
|
|
int 021
|
|
|
|
|
|
; 0x0B - OR REG16,MEM16/REG16
|
|
; ############################################################
|
|
|
|
TEST_0B_1: ; OR MEM16,REG16 - Test data values from memory
|
|
mov word [00050],05A5A
|
|
mov ax,0A5A5
|
|
lock or ax,[00050]
|
|
cmp ax,0FFFF
|
|
jne FAIL_0B_1
|
|
|
|
mov word [00050],00000
|
|
mov ax,00000
|
|
or ax,[00050]
|
|
cmp ax,00000
|
|
jne FAIL_0B_1
|
|
|
|
mov word es:[00050],01111
|
|
mov ax,02222
|
|
or ax,es:[00050]
|
|
cmp ax,03333
|
|
jne FAIL_0B_1
|
|
jmp TEST_0B_2
|
|
|
|
FAIL_0B_1:
|
|
mov dx,00042 ; Print a B
|
|
mov ax,00202
|
|
int 021
|
|
|
|
; ##################
|
|
|
|
TEST_0B_2: ; OR REG16,REG16 - Test flags
|
|
; Overflow, Sign, Zero, Parity, AUX, Carry
|
|
|
|
mov ax,01234 ; Test overflow flag
|
|
mov word[00060],05678
|
|
or ax,[00060] ; Overflow should NEVER be set
|
|
jno PASS_0B_2 ; If not set, then we passed
|
|
jmp FAIL_0B_2 ; If set then we fail
|
|
|
|
PASS_0B_2:
|
|
mov ax,08000 ; Test sign flag
|
|
mov word[00060],00001
|
|
or ax,[00060] ; sign should be set
|
|
jns FAIL_0B_2 ; If not set, then fail
|
|
|
|
mov ax,01122 ; Test sign flag
|
|
mov word[00060],01234
|
|
or ax,[00060] ; sign should NOT be set
|
|
js FAIL_0B_2 ; If set then we fail
|
|
|
|
mov ax,00000 ; Test zero flag
|
|
mov word[00060],00000
|
|
or ax,[00060] ; zero should be set
|
|
jne FAIL_0B_2 ; If not set then we fail
|
|
|
|
mov ax,00001 ; Test zero flag
|
|
mov word[00060],00000
|
|
or ax,[00060] ; zero should NOT be set
|
|
je FAIL_0B_2 ; If set then we fail
|
|
|
|
mov ax,00011 ; Test parity flag
|
|
mov word[00060],00011
|
|
or ax,[00060] ; parity should be set
|
|
jnp FAIL_0B_2 ; If not set then we fail
|
|
|
|
mov ax,00013 ; Test parity flag
|
|
mov word[00060],00013
|
|
or ax,[00060] ; parity should NOT be set
|
|
jp FAIL_0B_2 ; If set then we fail
|
|
|
|
mov ax,0FFFF ; Test carry flag
|
|
mov word[00060],0FFFF
|
|
or ax,[00060] ; carry should NEVER be set
|
|
jc FAIL_0B_2 ; If set then we fail
|
|
|
|
jmp TEST_0C_0
|
|
|
|
FAIL_0B_2:
|
|
mov dx,00042 ; Print a B
|
|
mov ax,00202
|
|
int 021
|
|
|
|
|
|
; 0x0C - OR AL,IMMED8
|
|
; ############################################################
|
|
|
|
TEST_0C_0: ; OR AL,IMMED8 - Test data values from registers
|
|
mov ax,0005A
|
|
lock or al,0A5
|
|
cmp ax,000FF
|
|
jne FAIL_0C_0
|
|
|
|
mov ax,00000
|
|
or al,000
|
|
cmp ax,00000
|
|
jne FAIL_0C_0
|
|
jmp TEST_0C_1
|
|
|
|
FAIL_0C_0:
|
|
mov dx,00043 ; Print a C
|
|
mov ax,00202
|
|
int 021
|
|
|
|
; ##################
|
|
|
|
TEST_0C_1: ; OR AL,IMMED8 - Test flags
|
|
; Overflow, Sign, Zero, Parity, AUX, Carry
|
|
|
|
mov ax,01234 ; Test overflow flag
|
|
or al,011 ; Overflow should NEVER be set
|
|
jno PASS_0C_1 ; If not set, then we passed
|
|
jmp FAIL_0C_1
|
|
|
|
PASS_0C_1:
|
|
mov ax,00080 ; Test sign flag
|
|
or al,001 ; sign should be set
|
|
jns FAIL_0C_1 ; If not set, then fail
|
|
|
|
mov ax,0007E ; Test sign flag
|
|
or al,001 ; sign should NOT be set
|
|
js FAIL_0C_1 ; If set then we fail
|
|
|
|
mov ax,00000 ; Test zero flag
|
|
or al,000 ; zero should be set
|
|
jne FAIL_0C_1 ; If not set then we fail
|
|
|
|
mov ax,00001 ; Test zero flag
|
|
or al,012 ; zero should NOT be set
|
|
je FAIL_0C_1 ; If set then we fail
|
|
|
|
mov ax,01201 ; Test parity flag
|
|
or al,002 ; parity should be set
|
|
jnp FAIL_0C_1 ; If not set then we fail
|
|
|
|
mov ax,01201 ; Test parity flag
|
|
or al,006 ; parity should NOT be set
|
|
jp FAIL_0C_1 ; If set then we fail
|
|
|
|
mov ax,01234 ; Test carry flag
|
|
or al,012 ; carry should NEVER be set
|
|
jc FAIL_0C_1 ; If set then we fail
|
|
|
|
jmp TEST_0D_0
|
|
|
|
FAIL_0C_1:
|
|
mov dx,00043 ; Print a C
|
|
mov ax,00202
|
|
int 021
|
|
|
|
|
|
; 0x0D - OR AX,IMMED16
|
|
; ############################################################
|
|
|
|
TEST_0D_0: ; OR AX,IMMED16 - Test data values from registers
|
|
mov ax,05A5A
|
|
lock or ax,0A5A5
|
|
cmp ax,0FFFF
|
|
jne FAIL_0D_0
|
|
|
|
mov ax,00000
|
|
or ax,00000
|
|
cmp ax,00000
|
|
jne FAIL_0D_0
|
|
jmp TEST_0D_1
|
|
|
|
FAIL_0D_0:
|
|
mov dx,00044 ; Print a D
|
|
mov ax,00202
|
|
int 021
|
|
|
|
; ##################
|
|
|
|
TEST_0D_1: ; OR AX,IMMED16 - Test flags
|
|
; Overflow, Sign, Zero, Parity, AUX, Carry
|
|
|
|
mov ax,0B137 ; Test overflow flag
|
|
or ax,01234 ; Overflow should NEVER be set
|
|
jno PASS_0D_1 ; If not set, then we passed
|
|
jmp FAIL_0D_1
|
|
|
|
PASS_0D_1:
|
|
mov ax,08000 ; Test sign flag
|
|
or ax,00001 ; sign should be set
|
|
jns FAIL_0D_1 ; If not set, then fail
|
|
|
|
mov ax,07FFE ; Test sign flag
|
|
or ax,00001 ; sign should NOT be set
|
|
js FAIL_0D_1 ; If set then we fail
|
|
|
|
mov ax,00000 ; Test zero flag
|
|
or ax,00000 ; zero should be set
|
|
jne FAIL_0D_1 ; If not set then we fail
|
|
|
|
mov ax,00001 ; Test zero flag
|
|
or ax,00000 ; zero should NOT be set
|
|
je FAIL_0D_1 ; If set then we fail
|
|
|
|
mov ax,00001 ; Test parity flag
|
|
or ax,00002 ; parity should be set
|
|
jnp FAIL_0D_1 ; If not set then we fail
|
|
|
|
mov ax,00001 ; Test parity flag
|
|
or ax,00006 ; parity should NOT be set
|
|
jp FAIL_0D_1 ; If set then we fail
|
|
|
|
mov ax,01234 ; Test carry flag
|
|
or ax,01234 ; carry should NEVER be set
|
|
jc FAIL_0D_1 ; If set then we fail
|
|
|
|
jmp TEST_0E_0
|
|
|
|
FAIL_0D_1:
|
|
mov dx,00044 ; Print a D
|
|
mov ax,00202
|
|
int 021
|
|
|
|
|
|
; 0x0E - PUSH CS
|
|
; ############################################################
|
|
|
|
TEST_0E_0:
|
|
mov ax,cs
|
|
lock push cs
|
|
pop bx
|
|
cmp ax,bx
|
|
jne FAIL_0E_0
|
|
|
|
jmp Z_END
|
|
|
|
FAIL_0E_0:
|
|
mov dx,00045 ; Print a E
|
|
mov ax,00202
|
|
int 021
|
|
|
|
|
|
|
|
; xxxxxxxxxxxxxxxxxxxxxxx
|
|
; End
|
|
; xxxxxxxxxxxxxxxxxxxxxxx
|
|
Z_END:
|
|
mov ax,00000 ; DOS Command=Exit
|
|
int 021
|
|
|
|
|