Projects/MCL86/Tests/TEST_DX.ASM

1621 lines
33 KiB
NASM

; Tests for opcode range 0xD0-0xDF
; ---------------------------------
; 0xD0 - 8-Bit Shifts and Rotate Opcodes
; ############################################################
TEST_D0_0:
; ROL
; Test against Register
mov ax,0817F
rol al,1
cmp ax,081FE
jne FAIL_D0_0 ; Only lower byte should be rotated
mov bx,0817F
rol bl,1
jc FAIL_D0_0 ; Carry should not be set
mov cx,08180
rol cl,1
cmp cx,08101
jne FAIL_D0_0 ; Only lower byte should be rotated
mov dx,08180
rol dl,1
jnc FAIL_D0_0 ; Carry should be set
mov dx,08180
rol dl,1
jno FAIL_D0_0 ; Overflow should be set
mov dx,081FF
rol dl,1
jo FAIL_D0_0 ; Overflow should NOT be set
; ROL
; Test against Memory
mov word[00050],0817F
rol byte[00050],1
cmp word[00050],081FE
jne FAIL_D0_0 ; Only lower byte should be rotated
mov word[00050],0817F
rol byte[00050],1
jc FAIL_D0_0 ; Carry should not be set
mov word[00050],08180
rol byte[00050],1
cmp word[00050],08101
jne FAIL_D0_0 ; Only lower byte should be rotated
mov word[00050],08180
rol byte[00050],1
jnc FAIL_D0_0 ; Carry should be set
mov word[00050],08180
rol byte[00050],1
jno FAIL_D0_0 ; Overflow should be set
mov word[00050],081FF
rol byte[00050],1
jo FAIL_D0_0 ; Overflow should NOT be set
jmp TEST_D0_1
FAIL_D0_0:
mov dx,00030 ; Print a 0
mov ax,00202
int 021
TEST_D0_1:
; ROR
; Test against Register
mov ax,081FE
ror al,1
cmp ax,0817F
jne FAIL_D0_1 ; Only lower byte should be rotated
mov bx,081FE
ror bl,1
jc FAIL_D0_1 ; Carry should not be set
mov cx,0813F
ror cl,1
cmp cx,0819F
jne FAIL_D0_1 ; Only lower byte should be rotated
mov dx,0812F
ror dl,1
jnc FAIL_D0_1 ; Carry should be set
mov dx,08180
ror dl,1
jno FAIL_D0_1 ; Overflow should be set
mov dx,081FF
ror dl,1
jo FAIL_D0_1 ; Overflow should NOT be set
; ROR
; Test against Memory
mov word[00050],081FE
ror byte[00050],1
cmp word[00050],0817F
jne FAIL_D0_1 ; Only lower byte should be rotated
mov word[00050],0813E
ror byte[00050],1
jc FAIL_D0_1 ; Carry should not be set
mov word[00050],0813F
ror byte[00050],1
cmp word[00050],0819F
jne FAIL_D0_1 ; Only lower byte should be rotated
mov word[00050],0812F
ror byte[00050],1
jnc FAIL_D0_1 ; Carry should be set
mov word[00050],08180
ror byte[00050],1
jno FAIL_D0_1 ; Overflow should be set
mov word[00050],081FF
ror byte[00050],1
jo FAIL_D0_1 ; Overflow should NOT be set
jmp TEST_D0_2
FAIL_D0_1:
mov dx,00030 ; Print a 0
mov ax,00202
int 021
TEST_D0_2:
; RCL
; Test against Register
clc
mov ax,0817F
rcl al,1
cmp ax,081FE
jne FAIL_D0_2 ; Only lower byte should be rotated
clc
mov cx,08180
rcl cl,1
cmp cx,08100
jne FAIL_D0_2 ; Only lower byte should be rotated
stc
mov ax,0817F
rcl al,1
cmp ax,081FF
jne FAIL_D0_2 ; Only lower byte should be rotated
stc
mov cx,08180
rcl cl,1
cmp cx,08101
jne FAIL_D0_2 ; Only lower byte should be rotated
clc
mov bx,0817F
rcl bl,1
jc FAIL_D0_2 ; Carry should not be set
clc
mov dx,08180
rcl dl,1
jnc FAIL_D0_2 ; Carry should be set
mov dx,08180
rcl dl,1
jno FAIL_D0_2 ; Overflow should be set
mov dx,081FF
rcl dl,1
jo FAIL_D0_2 ; Overflow should NOT be set
jmp TEST_D0_22
FAIL_D0_2:
mov dx,00039 ; Print a 0
mov ax,00202
int 021
TEST_D0_22:
; RCL
; Test against Memory
clc
mov word[00050],0817F
rcl byte[00050],1
cmp word[00050],081FE
jne FAIL_D0_22 ; Only lower byte should be rotated
clc
mov word[00050],08180
rcl byte[00050],1
cmp word[00050],08100
jne FAIL_D0_22 ; Only lower byte should be rotated
stc
mov word[00050],0817F
rcl byte[00050],1
cmp word[00050],081FF
jne FAIL_D0_22 ; Only lower byte should be rotated
stc
mov word[00050],08180
rcl byte[00050],1
cmp word[00050],08101
jne FAIL_D0_22 ; Only lower byte should be rotated
mov word[00050],0817F
rcl byte[00050],1
jc FAIL_D0_22 ; Carry should not be set
mov word[00050],08180
rcl byte[00050],1
jnc FAIL_D0_22 ; Carry should be set
mov word[00050],08180
rcl byte[00050],1
jno FAIL_D0_22 ; Overflow should be set
mov word[00050],081FF
rcl byte[00050],1
jo FAIL_D0_22 ; Overflow should NOT be set
jmp TEST_D0_3
FAIL_D0_22:
mov dx,00030 ; Print a 0
mov ax,00202
int 021
TEST_D0_3:
; RCR
; Test against Register
clc
mov ax,0817F
rcr al,1
cmp ax,0813F
jne FAIL_D0_3 ; Only lower byte should be rotated
clc
mov cx,08180
rcr cl,1
cmp cx,08140
jne FAIL_D0_3 ; Only lower byte should be rotated
stc
mov ax,08100
rcr al,1
cmp ax,08180
jne FAIL_D0_3 ; Only lower byte should be rotated
stc
mov cx,08108
rcr cl,1
cmp cx,08184
jne FAIL_D0_3 ; Only lower byte should be rotated
clc
mov bx,08110
rcr bl,1
jc FAIL_D0_3 ; Carry should not be set
clc
mov dx,08181
rcr dl,1
jnc FAIL_D0_3 ; Carry should be set
stc
mov dx,08100
rcr dl,1
jno FAIL_D0_3 ; Overflow should be set
clc
mov dx,08100
rcr dl,1
jo FAIL_D0_3 ; Overflow should NOT be set
jmp TEST_D0_32
FAIL_D0_3:
mov dx,00030 ; Print a 0
mov ax,00202
int 021
TEST_D0_32:
; RCR
; Test against Memory
clc
mov word[00050],0817F
rcr byte[00050],1
cmp word[00050],0813F
jne FAIL_D0_32 ; Only lower byte should be rotated
clc
mov word[00050],08180
rcr byte[00050],1
cmp word[00050],08140
jne FAIL_D0_32 ; Only lower byte should be rotated
stc
mov word[00050],08100
rcr byte[00050],1
cmp word[00050],08180
jne FAIL_D0_32 ; Only lower byte should be rotated
stc
mov word[00050],08108
rcr byte[00050],1
cmp word[00050],08184
jne FAIL_D0_32 ; Only lower byte should be rotated
mov word[00050],08110
rcr byte[00050],1
jc FAIL_D0_32 ; Carry should not be set
mov word[00050],08181
rcr byte[00050],1
jnc FAIL_D0_32 ; Carry should be set
stc
mov word[00050],08100
rcr byte[00050],1
jno FAIL_D0_32 ; Overflow should be set
clc
mov word[00050],08100
rcr byte[00050],1
jo FAIL_D0_32 ; Overflow should NOT be set
jmp TEST_D0_4
FAIL_D0_32:
mov dx,00030 ; Print a 0
mov ax,00202
int 021
TEST_D0_4:
; SAL
; Test against Register
mov ax,08122
sal al,1
cmp ax,08144
jne FAIL_D0_4 ; Only lower byte should be rotated
mov bx,08122
sal bl,1
jc FAIL_D0_4 ; Carry should not be set
mov cx,08188
sal cl,1
cmp cx,08110
jne FAIL_D0_4 ; Only lower byte should be rotated
mov dx,08180
sal dl,1
jnc FAIL_D0_4 ; Carry should be set
mov dx,08180
sal dl,1
jno FAIL_D0_4 ; Overflow should be set
mov dx,081FF
sal dl,1
jo FAIL_D0_4 ; Overflow should NOT be set
; SAL
; Test against Memory
mov word[00050],08122
sal byte[00050],1
cmp word[00050],08144
jne FAIL_D0_4 ; Only lower byte should be rotated
mov word[00050],08122
sal byte[00050],1
jc FAIL_D0_4 ; Carry should not be set
mov word[00050],08188
sal byte[00050],1
cmp word[00050],08110
jne FAIL_D0_4 ; Only lower byte should be rotated
mov word[00050],08180
sal byte[00050],1
jnc FAIL_D0_4 ; Carry should be set
mov word[00050],08180
sal byte[00050],1
jno FAIL_D0_4 ; Overflow should be set
mov word[00050],081FF
sal byte[00050],1
jo FAIL_D0_4 ; Overflow should NOT be set
jmp TEST_D0_5
FAIL_D0_4:
mov dx,00030 ; Print a 0
mov ax,00202
int 021
TEST_D0_5:
; SAR
; Test against Register
mov ax,08180
sar al,1
cmp ax,081C0
jne FAIL_D0_5 ; Only lower byte should be rotated
mov bx,081FE
sar bl,1
jc FAIL_D0_5 ; Carry should not be set
mov cx,0817F
sar cl,1
cmp cx,0813F
jne FAIL_D0_5 ; Only lower byte should be rotated
mov dx,0812F
sar dl,1
jnc FAIL_D0_5 ; Carry should be set
mov dx,081FF
sar dl,1
jo FAIL_D0_5 ; Overflow should NOT be set
; SAR
; Test against Memory
mov word[00050],08180
sar byte[00050],1
cmp word[00050],081C0
jne FAIL_D0_5 ; Only lower byte should be rotated
mov word[00050],081FE
sar byte[00050],1
jc FAIL_D0_5 ; Carry should not be set
mov word[00050],0817F
sar byte[00050],1
cmp word[00050],0813F
jne FAIL_D0_5 ; Only lower byte should be rotated
mov word[00050],0812F
sar byte[00050],1
jnc FAIL_D0_5 ; Carry should be set
mov word[00050],081FF
sar byte[00050],1
jo FAIL_D0_5 ; Overflow should NOT be set
jmp TEST_D0_6
FAIL_D0_5:
mov dx,00030 ; Print a 0
mov ax,00202
int 021
TEST_D0_6:
; SHR
; Test against Register
mov ax,08180
shr al,1
cmp ax,08140
jne FAIL_D0_6 ; Only lower byte should be rotated
mov bx,081FE
shr bl,1
jc FAIL_D0_6 ; Carry should not be set
mov cx,0817F
shr cl,1
cmp cx,0813F
jne FAIL_D0_6 ; Only lower byte should be rotated
mov dx,0812F
shr dl,1
jnc FAIL_D0_6 ; Carry should be set
mov dx,081FF
shr dl,1
jno FAIL_D0_6 ; Overflow should be set
mov dx,0812F
shr dl,1
jo FAIL_D0_6 ; Overflow should NOT be set
; SHR
; Test against Memory
mov word[00050],08180
shr byte[00050],1
cmp word[00050],08140
jne FAIL_D0_6 ; Only lower byte should be rotated
mov word[00050],081FE
shr byte[00050],1
jc FAIL_D0_6 ; Carry should not be set
mov word[00050],0817F
shr byte[00050],1
cmp word[00050],0813F
jne FAIL_D0_6 ; Only lower byte should be rotated
mov word[00050],0812F
shr byte[00050],1
jnc FAIL_D0_6 ; Carry should be set
mov word[00050],081FF
shr byte[00050],1
jno FAIL_D0_6 ; Overflow should be set
mov word[00050],0812F
shr byte[00050],1
jo FAIL_D0_6 ; Overflow should NOT be set
jmp TEST_D1_0
FAIL_D0_6:
mov dx,00030 ; Print a 0
mov ax,00202
int 021
; 0xD1 - 16-Bit Shifts and Rotate Opcodes
; ############################################################
TEST_D1_0:
; ROL
; Test against Register
mov ax,08000
rol ax,1
cmp ax,00001
jne FAIL_D1_0
mov bx,00022
rol bx,1
jc FAIL_D1_0 ; Carry should not be set
mov cx,01111
rol cx,1
cmp cx,02222
jne FAIL_D1_0
mov dx,08180
rol dx,1
jnc FAIL_D1_0 ; Carry should be set
mov dx,08180
rol dx,1
jno FAIL_D1_0 ; Overflow should be set
mov dx,01234
rol dx,1
jo FAIL_D1_0 ; Overflow should NOT be set
; ROL
; Test against Memory
mov word[00050],08000
rol word[00050],1
cmp word[00050],00001
jne FAIL_D1_0
mov word[00050],00022
rol word[00050],1
jc FAIL_D1_0 ; Carry should not be set
mov word[00050],01111
rol word[00050],1
cmp word[00050],02222
jne FAIL_D1_0
mov word[00050],08180
rol word[00050],1
jnc FAIL_D1_0 ; Carry should be set
mov word[00050],08180
rol word[00050],1
jno FAIL_D1_0 ; Overflow should be set
mov word[00050],01234
rol word[00050],1
jo FAIL_D1_0 ; Overflow should NOT be set
jmp TEST_D1_1
FAIL_D1_0:
mov dx,00031 ; Print a 0
mov ax,00202
int 021
TEST_D1_1:
; ROR
; Test against Register
mov ax,00001
ror ax,1
cmp ax,08000
jne FAIL_D1_1
mov bx,02222
ror bx,1
jc FAIL_D1_1 ; Carry should not be set
mov cx,04444
ror cx,1
cmp cx,02222
jne FAIL_D1_1
mov dx,01111
ror dx,1
jnc FAIL_D1_1 ; Carry should be set
mov dx,08180
ror dx,1
jno FAIL_D1_1 ; Overflow should be set
mov dx,02222
ror dx,1
jo FAIL_D1_1 ; Overflow should NOT be set
; ROR
; Test against Memory
mov word[00050],00001
ror word[00050],1
cmp word[00050],08000
jne FAIL_D1_1
mov word[00050],02222
ror word[00050],1
jc FAIL_D1_1 ; Carry should not be set
mov word[00050],04444
ror word[00050],1
cmp word[00050],02222
jne FAIL_D1_1
mov word[00050],01111
ror word[00050],1
jnc FAIL_D1_1 ; Carry should be set
mov word[00050],08180
ror word[00050],1
jno FAIL_D1_1 ; Overflow should be set
mov word[00050],02222
ror word[00050],1
jo FAIL_D1_1 ; Overflow should NOT be set
jmp TEST_D1_2
FAIL_D1_1:
mov dx,00031 ; Print a 0
mov ax,00202
int 021
TEST_D1_2:
; RCL
; Test against Register
clc
mov ax,0817F
rcl ax,1
cmp ax,002FE
jne FAIL_D1_2
clc
mov cx,01111
rcl cx,1
cmp cx,02222
jne FAIL_D1_2
stc
mov ax,0817F
rcl ax,1
cmp ax,002FF
jne FAIL_D1_2
stc
mov cx,01111
rcl cx,1
cmp cx,02223
jne FAIL_D1_2
clc
mov bx,07777
rcl bx,1
jc FAIL_D1_2 ; Carry should not be set
clc
mov dx,08888
rcl dx,1
jnc FAIL_D1_2 ; Carry should be set
mov dx,08000
rcl dx,1
jno FAIL_D1_2 ; Overflow should be set
mov dx,0FFFF
rcl dx,1
jo FAIL_D1_2 ; Overflow should NOT be set
jmp TEST_D1_22
FAIL_D1_2:
mov dx,00039 ; Print a 0
mov ax,00202
int 021
TEST_D1_22:
; RCL
; Test against Memory
clc
mov word[00050],0817F
rcl word[00050],1
cmp word[00050],002FE
jne FAIL_D1_22
clc
mov word[00050],01111
rcl word[00050],1
cmp word[00050],02222
jne FAIL_D1_22
stc
mov word[00050],0817F
rcl word[00050],1
cmp word[00050],002FF
jne FAIL_D1_22
stc
mov word[00050],01111
rcl word[00050],1
cmp word[00050],02223
jne FAIL_D1_22
mov word[00050],07777
rcl word[00050],1
jc FAIL_D1_22 ; Carry should not be set
mov word[00050],08888
rcl word[00050],1
jnc FAIL_D1_22 ; Carry should be set
mov word[00050],08000
rcl word[00050],1
jno FAIL_D1_22 ; Overflow should be set
mov word[00050],0FFFF
rcl word[00050],1
jo FAIL_D1_22 ; Overflow should NOT be set
jmp TEST_D1_3
FAIL_D1_22:
mov dx,00031 ; Print a 0
mov ax,00202
int 021
TEST_D1_3:
; RCR
; Test against Register
clc
mov ax,0447F
rcr ax,1
cmp ax,0223F
jne FAIL_D1_3
clc
mov cx,01111
rcr cx,1
cmp cx,00888
jne FAIL_D1_3
stc
mov ax,00001
rcr ax,1
cmp ax,08000
jne FAIL_D1_3
stc
mov cx,08000
rcr cx,1
cmp cx,0C000
jne FAIL_D1_3
clc
mov bx,08110
rcr bx,1
jc FAIL_D1_3 ; Carry should not be set
clc
mov dx,08181
rcr dx,1
jnc FAIL_D1_3 ; Carry should be set
stc
mov dx,00F00
rcr dx,1
jno FAIL_D1_3 ; Overflow should be set
clc
mov dx,00000
rcr dx,1
jo FAIL_D1_3 ; Overflow should NOT be set
jmp TEST_D1_32
FAIL_D1_3:
mov dx,00031 ; Print a 0
mov ax,00202
int 021
TEST_D1_32:
; RCR
; Test against Memory
clc
mov word[00050],0447F
rcr word[00050],1
cmp word[00050],0223F
jne FAIL_D1_32
clc
mov word[00050],01111
rcr word[00050],1
cmp word[00050],00888
jne FAIL_D1_32
stc
mov word[00050],00001
rcr word[00050],1
cmp word[00050],08000
jne FAIL_D1_32
stc
mov word[00050],08000
rcr word[00050],1
cmp word[00050],0C000
jne FAIL_D1_32
mov word[00050],08110
rcr word[00050],1
jc FAIL_D1_32 ; Carry should not be set
mov word[00050],08181
rcr word[00050],1
jnc FAIL_D1_32 ; Carry should be set
stc
mov word[00050],00F00
rcr word[00050],1
jno FAIL_D1_32 ; Overflow should be set
clc
mov word[00050],00000
rcr word[00050],1
jo FAIL_D1_32 ; Overflow should NOT be set
jmp TEST_D1_4
FAIL_D1_32:
mov dx,00031 ; Print a 0
mov ax,00202
int 021
TEST_D1_4:
; SAL
; Test against Register
mov ax,07FFF
sal ax,1
cmp ax,0FFFE
jne FAIL_D1_4
mov bx,02222
sal bx,1
jc FAIL_D1_4 ; Carry should not be set
mov cx,00001
sal cx,1
cmp cx,00002
jne FAIL_D1_4
mov dx,08000
sal dx,1
jnc FAIL_D1_4 ; Carry should be set
mov dx,08180
sal dx,1
jno FAIL_D1_4 ; Overflow should be set
mov dx,0FFFF
sal dx,1
jo FAIL_D1_4 ; Overflow should NOT be set
; SAL
; Test against Memory
mov word[00050],07FFF
sal word[00050],1
cmp word[00050],0FFFE
jne FAIL_D1_4
mov word[00050],02222
sal word[00050],1
jc FAIL_D1_4 ; Carry should not be set
mov word[00050],00001
sal word[00050],1
cmp word[00050],00002
jne FAIL_D1_4
mov word[00050],08000
sal word[00050],1
jnc FAIL_D1_4 ; Carry should be set
mov word[00050],08180
sal word[00050],1
jno FAIL_D1_4 ; Overflow should be set
mov word[00050],0FFFF
sal word[00050],1
jo FAIL_D1_4 ; Overflow should NOT be set
jmp TEST_D1_5
FAIL_D1_4:
mov dx,00031 ; Print a 0
mov ax,00202
int 021
TEST_D1_5:
; SAR
; Test against Register
mov ax,08000
sar ax,1
cmp ax,0C000
jne FAIL_D1_5
mov bx,04444
sar bx,1
jc FAIL_D1_5 ; Carry should not be set
mov cx,00001
sar cx,1
cmp cx,00000
jne FAIL_D1_5
mov dx,00001
sar dx,1
jnc FAIL_D1_5 ; Carry should be set
mov dx,081FF
sar dx,1
jo FAIL_D1_5 ; Overflow should NOT be set
; SAR
; Test against Memory
mov word[00050],08000
sar word[00050],1
cmp word[00050],0C000
jne FAIL_D1_5
mov word[00050],04444
sar word[00050],1
jc FAIL_D1_5 ; Carry should not be set
mov word[00050],00001
sar word[00050],1
cmp word[00050],00000
jne FAIL_D1_5
mov word[00050],00001
sar word[00050],1
jnc FAIL_D1_5 ; Carry should be set
mov word[00050],081FF
sar word[00050],1
jo FAIL_D1_5 ; Overflow should NOT be set
jmp TEST_D1_6
FAIL_D1_5:
mov dx,00031 ; Print a 0
mov ax,00202
int 021
TEST_D1_6:
; SHR
; Test against Register
mov ax,0FFFF
shr ax,1
cmp ax,07FFF
jne FAIL_D1_6
mov bx,04444
shr bx,1
jc FAIL_D1_6 ; Carry should not be set
mov cx,04444
shr cx,1
cmp cx,02222
jne FAIL_D1_6
mov dx,00001
shr dx,1
jnc FAIL_D1_6 ; Carry should be set
mov dx,081FF
shr dx,1
jno FAIL_D1_6 ; Overflow should be set
mov dx,00000
shr dx,1
jo FAIL_D1_6 ; Overflow should NOT be set
; SHR
; Test against Memory
mov word[00050],0FFFF
shr word[00050],1
cmp word[00050],07FFF
jne FAIL_D1_6
mov word[00050],04444
shr word[00050],1
jc FAIL_D1_6 ; Carry should not be set
mov word[00050],04444
shr word[00050],1
cmp word[00050],02222
jne FAIL_D1_6
mov word[00050],00001
shr word[00050],1
jnc FAIL_D1_6 ; Carry should be set
mov word[00050],081FF
shr word[00050],1
jno FAIL_D1_6 ; Overflow should be set
mov word[00050],00000
shr word[00050],1
jo FAIL_D1_6 ; Overflow should NOT be set
jmp TEST_D2_0
FAIL_D1_6:
mov dx,00031 ; Print a 0
mov ax,00202
int 021
; 0xD2 - 8-Bit Shifts and Rotate Opcodes with CL
; ############################################################
TEST_D2_0:
; ROL, cl - Test against Register and Memory
mov ax,0004A
mov word[00050],00001
mov cx,0000F
mov bx,00000
mov dx,00000
cli
L_D2_0: ; Do 16 shifts of 16 different cl's
rol al,cl ; and add up all results into dx and bx
rol byte[00050],cl
add dx,ax
add bx,word[00050]
loop L_D2_0
sti
cmp dx,005B0 ; Final result of additions of all shifts
jne FAIL_D2_0
cmp bx,001FD
jne FAIL_D2_0
jmp TEST_D2_1
FAIL_D2_0:
mov dx,00032 ; Print a 2
mov ax,00202
int 021
TEST_D2_1:
; ROR, cl - Test against Register and Memory
mov ax,00084
mov word[00050],00005
mov cx,0000F
mov bx,00000
mov dx,00000
cli
L_D2_1: ; Do 16 shifts of 16 different cl's
ror al,cl ; and add up all results into dx and bx
ror byte[00050],cl
add dx,ax
add bx,word[00050]
loop L_D2_1
sti
cmp dx,00378 ; Final result of additions of all shifts
jne FAIL_D2_1
cmp bx,003F7
jne FAIL_D2_1
jmp TEST_D2_2
FAIL_D2_1:
mov dx,00032 ; Print a 2
mov ax,00202
int 021
TEST_D2_2:
; RCL, cl - Test against Register and Memory
mov ax,00099
mov word[00050],00006
mov cx,0000F
mov bx,00000
mov dx,00000
cli
L_D2_2: ; Do 16 shifts of 16 different cl's
rcl al,cl ; and add up all results into dx and bx
rcl byte[00050],cl
add dx,ax
add bx,word[00050]
loop L_D2_2
sti
cmp dx,0076E ; Final result of additions of all shifts
jne FAIL_D2_2
cmp bx,0025E
jne FAIL_D2_2
jmp TEST_D2_3
FAIL_D2_2:
mov dx,00032 ; Print a 2
mov ax,00202
int 021
TEST_D2_3:
; RCR, cl - Test against Register and Memory
mov ax,00083
mov word[00050],00012
mov cx,0000F
mov bx,00000
mov dx,00000
cli
L_D2_3: ; Do 16 shifts of 16 different cl's
rcr al,cl ; and add up all results into dx and bx
rcr byte[00050],cl
add dx,ax
add bx,word[00050]
loop L_D2_3
sti
cmp dx,005CB ; Final result of additions of all shifts
jne FAIL_D2_3
cmp bx,00262
jne FAIL_D2_3
jmp TEST_D2_4
FAIL_D2_3:
mov dx,00032 ; Print a 2
mov ax,00202
int 021
TEST_D2_4:
; SAL, cl - Test against Register and Memory
mov ax,00099
mov word[00050],00006
mov cx,00003
mov bx,00000
mov dx,00000
cli
L_D2_4: ; Do 16 shifts of 16 different cl's
sal al,cl ; and add up all results into dx and bx
sal byte[00050],cl
add dx,ax
add bx,word[00050]
loop L_D2_4
sti
cmp dx,00128 ; Final result of additions of all shifts
jne FAIL_D2_4
cmp bx,00170
jne FAIL_D2_4
jmp TEST_D2_5
FAIL_D2_4:
mov dx,00032 ; Print a 2
mov ax,00202
int 021
TEST_D2_5:
; SHR, cl - Test against Register and Memory
mov ax,00083
mov word[00050],00012
mov cx,00003
mov bx,00000
mov dx,00000
cli
L_D2_5: ; Do 16 shifts of 16 different cl's
shr al,cl ; and add up all results into dx and bx
shr byte[00050],cl
add dx,ax
add bx,word[00050]
loop L_D2_5
sti
cmp dx,00016 ; Final result of additions of all shifts
jne FAIL_D2_5
cmp bx,00002
jne FAIL_D2_5
jmp TEST_D2_6
FAIL_D2_5:
mov dx,00032 ; Print a 2
mov ax,00202
int 021
TEST_D2_6:
; SAR, cl - Test against Register and Memory
mov ax,00083
mov word[00050],00012
mov cx,00003
mov bx,00000
mov dx,00000
cli
L_D2_6: ; Do 16 shifts of 16 different cl's
sar al,cl ; and add up all results into dx and bx
sar byte[00050],cl
add dx,ax
add bx,word[00050]
loop L_D2_6
sti
cmp dx,002EA ; Final result of additions of all shifts
jne FAIL_D2_6
cmp bx,00002
jne FAIL_D2_6
jmp TEST_D3_0
FAIL_D2_6:
mov dx,00032 ; Print a 2
mov ax,00202
int 021
; 0xD3 - 16-Bit Shifts and Rotate Opcodes with CL
; ############################################################
TEST_D3_0:
; ROL, cl - Test against Register and Memory
mov ax,01234
mov word[00050],01234
mov cx,0000F
mov bx,00000
mov dx,00000
cli
L_D3_0: ; Do 16 shifts of 16 different cl's
rol ax,cl ; and add up all results into dx and bx
rol word[00050],cl
add dx,ax
add bx,word[00050]
loop L_D3_0
sti
cmp dx,0EDC7 ; Final result of additions of all shifts
jne FAIL_D3_0
cmp bx,0EDC7
jne FAIL_D3_0
jmp TEST_D3_1
FAIL_D3_0:
mov dx,00033 ; Print a 3
mov ax,00202
int 021
TEST_D3_1:
; ROR, cl - Test against Register and Memory
mov ax,05678
mov word[00050],05678
mov cx,0000F
mov bx,00000
mov dx,00000
cli
L_D3_1: ; Do 16 shifts of 16 different cl's
ror ax,cl ; and add up all results into dx and bx
ror word[00050],cl
add dx,ax
add bx,word[00050]
loop L_D3_1
sti
cmp dx,0A980 ; Final result of additions of all shifts
jne FAIL_D3_1
cmp bx,0A980
jne FAIL_D3_1
jmp TEST_D3_2
FAIL_D3_1:
mov dx,00033 ; Print a 3
mov ax,00202
int 021
TEST_D3_2:
; RCL, cl - Test against Register and Memory
mov ax,09999
mov word[00050],09999
mov cx,0000F
mov bx,00000
mov dx,00000
cli
clc
L_D3_2: ; Do 16 shifts of 16 different cl's
rcl ax,cl ; and add up all results into dx and bx
rcl word[00050],cl
add dx,ax
add bx,word[00050]
loop L_D3_2
sti
cmp dx,0EB59 ; Final result of additions of all shifts
jne FAIL_D3_2
cmp bx,05B7A
jne FAIL_D3_2
jmp TEST_D3_3
FAIL_D3_2:
mov dx,00033 ; Print a 3
mov ax,00202
int 021
TEST_D3_3:
; RCR, cl - Test against Register and Memory
mov ax,02112
mov word[00050],02112
mov cx,0000F
mov bx,00000
mov dx,00000
clc
cli
L_D3_3: ; Do 16 shifts of 16 different cl's
rcr ax,cl ; and add up all results into dx and bx
rcr word[00050],cl
add dx,ax
add bx,word[00050]
loop L_D3_3
sti
cmp dx,0CA0B ; Final result of additions of all shifts
jne FAIL_D3_3
cmp bx,092C5
jne FAIL_D3_3
jmp TEST_D3_4
FAIL_D3_3:
mov dx,00033 ; Print a 3
mov ax,00202
int 021
TEST_D3_4:
; SAL, cl - Test against Register and Memory
mov ax,01414
mov word[00050],01414
mov cx,00003
mov bx,00000
mov dx,00000
cli
L_D3_4: ; Do 16 shifts of 16 different cl's
sal ax,cl ; and add up all results into dx and bx
sal word[00050],cl
add dx,ax
add bx,word[00050]
loop L_D3_4
sti
cmp dx,02820 ; Final result of additions of all shifts
jne FAIL_D3_4
cmp bx,02820
jne FAIL_D3_4
jmp TEST_D3_5
FAIL_D3_4:
mov dx,00033 ; Print a 3
mov ax,00202
int 021
TEST_D3_5:
; SHR, cl - Test against Register and Memory
mov ax,02345
mov word[00050],02345
mov cx,00003
mov bx,00000
mov dx,00000
cli
L_D3_5: ; Do 16 shifts of 16 different cl's
shr ax,cl ; and add up all results into dx and bx
shr word[00050],cl
add dx,ax
add bx,word[00050]
loop L_D3_5
sti
cmp dx,0060F ; Final result of additions of all shifts
jne FAIL_D3_5
cmp bx,0060F
jne FAIL_D3_5
jmp TEST_D3_6
FAIL_D3_5:
mov dx,00033 ; Print a 3
mov ax,00202
int 021
TEST_D3_6:
; SAR, cl - Test against Register and Memory
mov ax,09090
mov word[00050],09090
mov cx,00003
mov bx,00000
mov dx,00000
cli
L_D3_6: ; Do 16 shifts of 16 different cl's
sar ax,cl ; and add up all results into dx and bx
sar word[00050],cl
add dx,ax
add bx,word[00050]
loop L_D3_6
sti
cmp dx,0ECD8 ; Final result of additions of all shifts
jne FAIL_D3_6
cmp bx,0ECD8
jne FAIL_D3_6
jmp TEST_D4_0
FAIL_D3_6:
mov dx,00033 ; Print a 3
mov ax,00202
int 021
; 0xD4 - AAM
; ############################################################
TEST_D4_0:
mov ax,0000
mov dx,0000
mov cx,00FF
L_D4: AAM
add dx,ax
inc al
loop L_D4
cmp dx,01D6F
jne FAIL_D4_0
jmp TEST_D5_0
FAIL_D4_0:
mov dx,00034 ; Print a 4
mov ax,00202
int 021
; 0xD5 - AAD
; ############################################################
TEST_D5_0:
mov ax,00000
mov dx,00000
mov cx,0FFFF
L_D5: AAD
add dx,ax
inc al
loop L_D5
cmp dx,07F01
jne FAIL_D5_0
jmp TEST_D7_0
FAIL_D5_0:
mov dx,00035 ; Print a 5
mov ax,00202
int 021
; 0xD7 - XLAT
; ############################################################
TEST_D7_0:
mov byte [07788], 05A
mov bx,07777
mov ax,03311
xlat
cmp al,05A
jne FAIL_D7_0
jmp TEST_D7_1
TEST_D7_1:
mov byte ss:[04455], 0AB
mov bx,04444
mov ax,03311
ss: xlat
cmp al,0AB
jne FAIL_D7_0
jmp TEST_D8_0
FAIL_D7_0:
mov dx,00037 ; Print a 7
mov ax,00202
int 021
; 0xD8-0xDF - ESC
; ############################################################
TEST_D8_0:
; esc [bx]
; esc [bx+si]
; esc [01234]
; xxxxxxxxxxxxxxxxxxxxxxx
; End
; xxxxxxxxxxxxxxxxxxxxxxx
Z_END:
mov ax,00000 ; DOS Command=Exit
int 021