Projects/MCL86/Tests/EA_MODES.ASM

1306 lines
32 KiB
NASM

; Addressing modes tests
; ----------------------
; Test all combinations of addressing modes to and from memory.
; CGA video memory space at BB000-BB1FF is used.
; Set all segments and pointers
; -----------------------------
mov ax,0BB00 ; Set the ES
mov es,ax
mov di,00000 ; Zero the DI pointer
mov ax,0B900 ; Set the DS
mov ds,ax
mov si,02000 ; Zero the SI pointer
mov ax,0BA00 ; Set the SS
mov ss,ax
mov sp,011FE ; Set the Stack to BB1FE
mov bp,01000 ; Set the BP
; Fill BB000-BB1FF with incremening data
; ---------------------------------------
mov ax,00000 ; Zero out value to write
mov cx,00200 ; Set cx to count 512 times
cld ; Make sure DI increments
L1: stosb ; ES:DI <= AL
inc ax ; AX and DI will increment
loop L1 ; Repeat FF times
; Read memory using each addressing mode
; and compare to immediate value.
; Then write and read back a byte to verify EA writing.
; MOD=00 R/M=000 -- DS:BX+SI= B900+2030+14 = BB044
ADDR_TEST1:
mov bx , 02030
mov si , 014
lea ax , [bx+si]
cmp byte [bx+si] , 044
jne FAIL1
cmp word [bx+si] , 04544
jne FAIL1
; MOD=01 R/M=000 -- DS:BX+SI+D8= B900+2030+14+4 = BB048
mov bx , 02030
mov si , 014
lea ax , [bx+si+04]
cmp byte [bx+si+04] , 048
jne FAIL1
cmp word [bx+si+04] , 04948
jne FAIL1
; MOD=01 R/M=000 -- DS:BX+SI-D8= B900+2030+14-3 = BB040
mov bx , 02030
mov si , 014
lea ax , [bx+si-04]
cmp byte [bx+si-04] , 040
jne FAIL1
cmp word [bx+si-04] , 04140
jne FAIL1
; MOD=10 R/M=000 -- DS:BX+SI+D16= B900+2020+25+104 = BB149
mov bx , 02020
mov si , 00025
lea ax , [bx+si+0104]
cmp byte [bx+si+0104] , 049
jne FAIL1
cmp word [bx+si+0104] , 04A49
jne FAIL1
; MOD=10 R/M=000 -- DS:BX+SI-D16= B900+2120+25-102 = BB043
mov bx , 02120
mov si , 00025
lea ax , [bx+si-0102]
cmp byte [bx+si-0102], 043
jne FAIL1
cmp word [bx+si-0102], 04443
jne FAIL1
jmp TEST2
FAIL1:
mov dx,00031 ; Print a 1
mov ax,00202
int 021
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
; MOD=00 R/M=001 -- DS:BX+DI= B900+2040+04 = BB044
TEST2: mov bx , 02040
mov di , 004
lea ax , [bx+di]
cmp byte [bx+di] , 044
jne FAIL2
cmp word [bx+di] , 04544
jne FAIL2
; MOD=01 R/M=001 -- DS:BX+DI+D8= B900+2040+04+4 = BB048
mov bx , 02040
mov di , 004
lea ax , [bx+di+04]
cmp byte [bx+di+04] , 048
jne FAIL2
cmp word [bx+di+04] , 04948
jne FAIL2
; MOD=01 R/M=001 -- DS:BX+DI-D8= B900+2040+04-3 = BB040
mov bx , 02040
mov di , 004
lea ax , [bx+di-04]
cmp byte [bx+di-04] , 040
jne FAIL2
cmp word [bx+di-04] , 04140
jne FAIL2
; MOD=10 R/M=001 -- DS:BX+DI+D16= B900+2010+35+104 = BB149
mov bx , 02010
mov di , 00035
lea ax , [bx+di+0104]
cmp byte [bx+di+0104] , 049
jne FAIL2
cmp word [bx+di+0104] , 04A49
jne FAIL2
; MOD=10 R/M=001 -- DS:BX+DI-D16= B900+2110+35-102 = BB043
mov bx , 02110
mov di , 00035
lea ax , [bx+di-0102]
cmp byte [bx+di-0102], 043
jne FAIL2
cmp word [bx+di-0102] , 04443
jne FAIL2
jmp TEST3
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
FAIL2:
mov dx,00032 ; Print a 2
mov ax,00202
int 021
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
; MOD=00 R/M=010 -- SS:BP+SI= BA00+1070+05 = BB075
TEST3: mov bp , 01070
mov si, 005
lea ax , [bp+si]
cmp byte [bp+si] , 075
jne FAIL3
cmp word [bp+si] , 07675
jne FAIL3
; MOD=01 R/M=010 -- SS:BP+SI+D8= BA00+1070+05+2 = BB077
mov bp , 01070
mov si , 005
lea ax , [bp+si+02]
cmp byte [bp+si+02] , 077
jne FAIL3
cmp word [bp+si+02] , 07877
jne FAIL3
; MOD=01 R/M=010 -- SS:BP+SI-D8= BA00+1070+05-3 = BB072
mov bp , 01070
mov si , 005
lea ax , [bp+si-03]
cmp byte [bp+si-03] , 072
jne FAIL3
cmp word [bp+si-03] , 07372
jne FAIL3
; MOD=10 R/M=010 -- SS:BP+SI+D16= BA00+1070+05+103 = BB178
mov bp , 01070
mov si , 005
lea ax , [bp+si+0103]
cmp byte [bp+si+0103] , 078
jne FAIL3
cmp word [bp+si+0103] , 07978
jne FAIL3
; MOD=10 R/M=010 -- SS:BP+SI-D16= BA00+1170+35-102 = BB0A3
mov bp , 01170
mov si , 00035
lea ax , [bp+si-0102]
cmp byte [bp+si-0102], 0A3
jne FAIL3
cmp word [bp+si-0102] , 0A4A3
jne FAIL3
jmp TEST4
FAIL3:
mov dx,00033 ; Print a 3
mov ax,00202
int 021
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
; MOD=00 R/M=011 -- SS:BP+DI= BA00+1070+06 = BB076
TEST4: mov bp , 01070
mov di, 006
lea ax , [bp+di]
cmp byte [bp+di] , 076
jne FAIL4
cmp word [bp+di] , 07776
jne FAIL4
; MOD=01 R/M=011 -- SS:BP+DI+D8= BA00+1070+06+2 = BB078
mov bp , 01070
mov di , 006
lea ax , [bp+di+02]
cmp byte [bp+di+02] , 078
jne FAIL4
cmp word [bp+di+02] , 07978
jne FAIL4
; MOD=01 R/M=011 -- SS:BP+DI-D8= BA00+1070+06-3 = BB073
mov bp , 01070
mov di , 006
lea ax , [bp+di-03]
cmp byte [bp+di-03] , 073
jne FAIL4
cmp word [bp+di-03] , 07473
jne FAIL4
; MOD=10 R/M=011 -- SS:BP+DI+D16= BA00+1070+06+103 = BB179
mov bp , 01070
mov di , 006
lea ax , [bp+di+0103]
cmp byte [bp+di+0103] , 079
jne FAIL4
cmp word [bp+di+0103] , 07A79
jne FAIL4
; MOD=10 R/M=011 -- SS:BP+DI-D16= BA00+1170+36-102 = BB0A4
mov bp , 01170
mov di , 00036
lea ax , [bp+di-0102]
cmp byte [bp+di-0102], 0A4
jne FAIL4
cmp word [bp+di-0102] , 0A5A4
jne FAIL4
jmp TEST5
FAIL4:
mov dx,00034 ; Print a 4
mov ax,00202
int 021
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
; MOD=00 R/M=100 -- DS:SI= B900+2024 = BB024
TEST5: mov bx , 00000
mov si , 02024
lea ax , [si]
cmp byte [si] , 024
jne FAIL5
cmp word [si] , 02524
jne FAIL5
; MOD=01 R/M=100 -- DS:SI+D8= B900+2024+3 = BB027
mov bx , 00000
mov si , 02024
lea ax , [si+03]
cmp byte [si+03] , 027
jne FAIL5
cmp word [si+03] , 02827
jne FAIL5
; MOD=01 R/M=100 -- DS:SI-D8= B900+2024-3 = BB021
mov bx , 00000
mov si , 02024
lea ax , [si-03]
cmp byte [si-03] , 021
jne FAIL5
cmp word [si-03] , 02221
jne FAIL5
; MOD=10 R/M=100 -- DS:SI+D16= B900+2024+104 = BB128
mov bx , 00000
mov si , 02024
lea ax , [si+0104]
cmp byte [si+0104] , 028
jne FAIL5
cmp word [si+0104] , 02928
jne FAIL5
; MOD=10 R/M=100 -- DS:SI-D16= B900+2124-102 = BB022
mov bx , 00000
mov si , 02124
lea ax , [si-0102]
cmp byte [si-0102], 022
jne FAIL5
cmp word [si-0102] , 02322
jne FAIL5
jmp TEST6
FAIL5:
mov dx,00035 ; Print a 5
mov ax,00202
int 021
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
; MOD=00 R/M=101 -- DS:DI= B900+2024 = BB024
TEST6: mov si , 00000
mov di , 02024
lea ax , [di]
cmp byte [di] , 024
jne FAIL6
cmp word [di] , 02524
jne FAIL6
; MOD=01 R/M=101 -- DS:DI+D8= B900+2024+3 = BB027
mov si , 00000
mov di , 02024
lea ax , [di+03]
cmp byte [di+03] , 027
jne FAIL6
cmp word [di+03] , 02827
jne FAIL6
; MOD=01 R/M=101 -- DS:DI-D8= B900+2024-3 = BB021
mov si , 00000
mov di , 02024
lea ax , [di-03]
cmp byte [di-03] , 021
jne FAIL6
cmp word [di-03] , 02221
jne FAIL6
; MOD=10 R/M=101 -- DS:DI+D16= B900+2025+104 = BB129
mov si , 00000
mov di , 02025
lea ax , [di+0104]
cmp byte [di+0104] , 029
jne FAIL6
cmp word [di+0104] , 02A29
jne FAIL6
; MOD=10 R/M=101 -- DS:DI-D16= B900+2124-102 = BB022
mov si , 00000
mov di , 02124
lea ax , [di-0102]
cmp byte [di-0102], 022
jne FAIL6
cmp word [di-0102] , 02322
jne FAIL6
jmp TEST7
FAIL6:
mov dx,00036 ; Print an 6
mov ax,00202
int 021
jmp Z_END
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
; MOD=00 R/M=110 -- DS=B900:[DIRECT ACCESS] = BB044
TEST7: mov bp , 00000
lea ax , [02044]
cmp byte [02044] , 044
jne FAIL7
cmp word [02044] , 04544
jne FAIL7
; MOD=01 R/M=110 -- SS:BP+D8= BA00+1050+5 = BB055
mov bp , 01050
lea ax , [bp+05]
cmp byte [bp+05] , 055
jne FAIL7
cmp word [bp+05] , 05655
jne FAIL7
; MOD=01 R/M=110 -- SS:BP+D8= BA00+1050-3 = BB04D
mov bp , 01050
lea ax , [bp-03]
cmp byte [bp-03] , 04D
jne FAIL7
cmp word [bp-03] , 04E4D
jne FAIL7
; MOD=10 R/M=110 -- SS:BP+D16= BA00+1060+106 = BB166
mov bp , 01060
lea ax , [bp+0106]
cmp byte [bp+0106] , 066
jne FAIL7
cmp word [bp+0106] , 06766
jne FAIL7
; MOD=10 R/M=110 -- SS:BP-D16= BA00+1170-102 = BB06E
mov bp , 01170
lea ax , [bp-0102]
cmp byte [bp-0102], 06E
jne FAIL7
cmp word [bp-0102] , 06F6E
jne FAIL7
jmp TEST8
FAIL7:
mov dx,00037 ; Print an 7
mov ax,00202
int 021
jmp Z_END
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
; MOD=00 R/M=111 -- DS:BX= B900+2066 = BB066
TEST8: mov bx , 02066
mov si , 00000
lea ax , [bx]
cmp byte [bx] , 066
jne FAIL8
cmp word [bx] , 06766
jne FAIL8
; MOD=01 R/M=111 -- DS:BX+D8= B900+2066+3 = BB069
mov bx , 02066
mov si , 00000
lea ax , [bx+03]
cmp byte [bx+03] , 069
jne FAIL8
cmp word [bx+03] , 06A69
jne FAIL8
; MOD=01 R/M=111 -- DS:BX-D8= B900+2066-3 = BB063
mov bx , 02066
mov si , 00000
lea ax , [bx-03]
cmp byte [bx-03] , 063
jne FAIL8
cmp word [bx-03] , 06463
jne FAIL8
; MOD=10 R/M=111 -- DS:BX+D16= B900+2066+103 = BB169
mov bx , 02066
mov si , 00000
lea ax , [bx+0103]
cmp byte [bx+0103] , 069
jne FAIL8
cmp word [bx+0103] , 06A69
jne FAIL8
; MOD=10 R/M=111 -- DS:BX-D16= B900+2166-102 = BB064
mov bx , 02166
mov si , 00000
lea ax , [bx-0102]
cmp byte [bx-0102], 064
jne FAIL8
cmp word [bx-0102] , 06564
jne FAIL8
jmp ADR_MODE_TEST_2
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
FAIL8:
mov dx,00038 ; Print an 8
mov ax,00202
int 021
jmp Z_END
; Addressing modes Test-2
; ------------------------
ADR_MODE_TEST_2:
nop
; Set all segments and pointers
; -----------------------------
mov ax,0BB00 ; Set the ES
mov es,ax
mov di,00000 ; Zero the DI pointer
mov ax,0B900 ; Set the DS
mov ds,ax
mov si,02000 ; Zero the SI pointer
mov ax,0BA00 ; Set the SS
mov ss,ax
mov sp,011FE ; Set the Stack to BB1FE
mov bp,01000 ; Set the BP
; Fill BB000-BB1FF with incremening data
; ---------------------------------------
mov ax,00000 ; Zero out value to write
mov cx,00200 ; Set cx to count 512 times
cld ; Make sure DI increments
L11: stosb ; ES:DI <= AL
inc ax ; AX and DI will increment
loop L11 ; Repeat FF times
; Write memory using each addressing mode
; and compare to immediate value.
; MOD=00 R/M=000 -- DS:BX+SI= B900+2030+14 = BB044
TEST11: mov bx , 02030
mov si , 014
mov byte [bx+si] , 05A
cmp byte [bx+si] , 05A
jne FAIL11
; MOD=01 R/M=000 -- DS:BX+SI+D8= B900+2030+14+4 = BB048
mov bx , 02030
mov si , 014
mov byte [bx+si+04] , 012
cmp byte [bx+si+04] , 012
jne FAIL11
; MOD=01 R/M=000 -- DS:BX+SI-D8= B900+2030+14-3 = BB040
mov bx , 02030
mov si , 014
mov byte [bx+si-04] , 034
cmp byte [bx+si-04] , 034
jne FAIL11
; MOD=10 R/M=000 -- DS:BX+SI+D16= B900+2020+25+104 = BB149
mov bx , 02020
mov si , 00025
mov byte [bx+si+0104] , 087
cmp byte [bx+si+0104] , 087
jne FAIL11
; MOD=10 R/M=000 -- DS:BX+SI-D16= B900+2120+25-102 = BB043
mov bx , 02120
mov si , 00025
mov byte [bx+si-0102] , 041
cmp byte [bx+si-0102] , 041
jne FAIL11
jmp TEST12
FAIL11:
mov dx,00031 ; Print a 1
mov ax,00202
int 021
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
; MOD=00 R/M=001 -- DS:BX+DI= B900+2040+04 = BB044
TEST12: mov bx , 02040
mov di , 004
mov byte [bx+di] , 012
cmp byte [bx+di] , 012
jne FAIL12
; MOD=01 R/M=001 -- DS:BX+DI+D8= B900+2040+04+4 = BB048
mov bx , 02040
mov di , 004
mov byte [bx+di+04] , 085
cmp byte [bx+di+04] , 085
jne FAIL12
; MOD=01 R/M=001 -- DS:BX+DI-D8= B900+2040+04-3 = BB040
mov bx , 02040
mov di , 004
mov byte [bx+di-04] , 056
cmp byte [bx+di-04] , 056
jne FAIL12
; MOD=10 R/M=001 -- DS:BX+DI+D16= B900+2010+35+104 = BB149
mov bx , 02010
mov di , 00035
mov byte [bx+di+0104] , 053
cmp byte [bx+di+0104] , 053
jne FAIL12
; MOD=10 R/M=001 -- DS:BX+DI-D16= B900+2110+35-102 = BB043
mov bx , 02110
mov di , 00035
mov byte [bx+di-0102] , 075
cmp byte [bx+di-0102] , 075
jne FAIL12
jmp TEST13
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
FAIL12:
mov dx,00032 ; Print a 2
mov ax,00202
int 021
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
; MOD=00 R/M=010 -- SS:BP+SI= BA00+1070+05 = BB075
TEST13: mov bp , 01070
mov si, 005
mov byte [bp+si] , 072
cmp byte [bp+si] , 072
jne FAIL13
; MOD=01 R/M=010 -- SS:BP+SI+D8= BA00+1070+05+2 = BB077
mov bp , 01070
mov si , 005
mov byte [bp+si+02] , 011
cmp byte [bp+si+02] , 011
jne FAIL13
; MOD=01 R/M=010 -- SS:BP+SI-D8= BA00+1070+05-3 = BB072
mov bp , 01070
mov si , 005
mov byte [bp+si-03] , 024
cmp byte [bp+si-03] , 024
jne FAIL13
; MOD=10 R/M=010 -- SS:BP+SI+D16= BA00+1070+05+103 = BB178
mov bp , 01070
mov si , 005
mov byte [bp+si+0103] , 033
cmp byte [bp+si+0103] , 033
jne FAIL13
; MOD=10 R/M=010 -- SS:BP+SI-D16= BA00+1170+35-102 = BB0A3
mov bp , 01170
mov si , 00035
mov byte [bp+si-0102] , 0BC
cmp byte [bp+si-0102] , 0BC
jne FAIL13
jmp TEST14
FAIL13:
mov dx,00033 ; Print a 3
mov ax,00202
int 021
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
; MOD=00 R/M=011 -- SS:BP+DI= BA00+1070+06 = BB076
TEST14: mov bp , 01070
mov di, 006
mov byte [bp+di] , 0A2
cmp byte [bp+di] , 0A2
jne FAIL14
; MOD=01 R/M=011 -- SS:BP+DI+D8= BA00+1070+06+2 = BB078
mov bp , 01070
mov di , 006
mov byte [bp+di+02] , 0CE
cmp byte [bp+di+02] , 0CE
jne FAIL14
; MOD=01 R/M=011 -- SS:BP+DI-D8= BA00+1070+06-3 = BB073
mov bp , 01070
mov di , 006
mov byte [bp+di-03] , 022
cmp byte [bp+di-03] , 022
jne FAIL14
; MOD=10 R/M=011 -- SS:BP+DI+D16= BA00+1070+06+103 = BB179
mov bp , 01070
mov di , 006
mov byte [bp+di+0103] , 0AB
cmp byte [bp+di+0103] , 0AB
jne FAIL14
; MOD=10 R/M=011 -- SS:BP+DI-D16= BA00+1170+36-102 = BB0A4
mov bp , 01170
mov di , 00036
mov byte [bp+di-0102] , 0EE
cmp byte [bp+di-0102] , 0EE
jne FAIL14
jmp TEST15
FAIL14:
mov dx,00034 ; Print a 4
mov ax,00202
int 021
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
; MOD=00 R/M=100 -- DS:SI= B900+2024 = BB024
TEST15: mov bx , 00000
mov si , 02024
mov byte [si] , 0DD
cmp byte [si] , 0DD
jne FAIL15
; MOD=01 R/M=100 -- DS:SI+D8= B900+2024+3 = BB027
mov bx , 00000
mov si , 02024
mov byte [si+03] , 012
cmp byte [si+03] , 012
jne FAIL15
; MOD=01 R/M=100 -- DS:SI-D8= B900+2024-3 = BB021
mov bx , 00000
mov si , 02024
mov byte [si-03] , 0F3
cmp byte [si-03] , 0F3
jne FAIL15
; MOD=10 R/M=100 -- DS:SI+D16= B900+2024+104 = BB128
mov bx , 00000
mov si , 02024
mov byte [si+0104] , 0A2
cmp byte [si+0104] , 0A2
jne FAIL15
; MOD=10 R/M=100 -- DS:SI-D16= B900+2124-102 = BB022
mov bx , 00000
mov si , 02124
mov byte [si-0102] , 04E
cmp byte [si-0102] , 04E
jne FAIL15
jmp TEST16
FAIL15:
mov dx,00035 ; Print a 5
mov ax,00202
int 021
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
; MOD=00 R/M=101 -- DS:DI= B900+2024 = BB024
TEST16: mov si , 00000
mov di , 02024
mov byte [di] , 0AA
cmp byte [di] , 0AA
jne FAIL16
; MOD=01 R/M=101 -- DS:DI+D8= B900+2024+3 = BB027
mov si , 00000
mov di , 02024
mov byte [di+03] , 0AB
cmp byte [di+03] , 0AB
jne FAIL16
; MOD=01 R/M=101 -- DS:DI-D8= B900+2024-3 = BB021
mov si , 00000
mov di , 02024
mov byte [di-03] , 033
cmp byte [di-03] , 033
jne FAIL16
; MOD=10 R/M=101 -- DS:DI+D16= B900+2025+104 = BB129
mov si , 00000
mov di , 02025
mov byte [di+0104] , 046
cmp byte [di+0104] , 046
jne FAIL16
; MOD=10 R/M=101 -- DS:DI-D16= B900+2124-102 = BB022
mov si , 00000
mov di , 02124
mov byte [di-0102] , 0CE
cmp byte [di-0102] , 0CE
jne FAIL16
jmp TEST17
FAIL16:
mov dx,00036 ; Print an 6
mov ax,00202
int 021
jmp Z_END
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
; MOD=00 R/M=110 -- DS=B900:[DIRECT ACCESS] = BB044
TEST17: mov bp , 00000
mov byte [02044] , 0A2
cmp byte [02044] , 0A2
jne FAIL17
; MOD=01 R/M=110 -- SS:BP+D8= BA00+1050+5 = BB055
mov bp , 01050
mov byte [bp+05] , 0E8
cmp byte [bp+05] , 0E8
jne FAIL17
; MOD=01 R/M=110 -- SS:BP+D8= BA00+1050-3 = BB04D
mov bp , 01050
mov byte [bp-03] , 03C
cmp byte [bp-03] , 03C
jne FAIL17
; MOD=10 R/M=110 -- SS:BP+D16= BA00+1060+106 = BB166
mov bp , 01060
mov byte [bp+0106] , 012
cmp byte [bp+0106] , 012
jne FAIL17
; MOD=10 R/M=110 -- SS:BP-D16= BA00+1170-102 = BB06E
mov bp , 01170
mov byte [bp-0102] , 09C
cmp byte [bp-0102] , 09C
jne FAIL17
jmp TEST18
FAIL17:
mov dx,00037 ; Print an 7
mov ax,00202
int 021
jmp Z_END
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
; MOD=00 R/M=111 -- DS:BX= B900+2066 = BB066
TEST18: mov bx , 02066
mov si , 00000
mov byte [bx] , 045
cmp byte [bx] , 045
jne FAIL18
; MOD=01 R/M=111 -- DS:BX+D8= B900+2066+3 = BB069
mov bx , 02066
mov si , 00000
mov byte [bx+03] , 099
cmp byte [bx+03] , 099
jne FAIL18
; MOD=01 R/M=111 -- DS:BX-D8= B900+2066-3 = BB063
mov bx , 02066
mov si , 00000
mov byte [bx-03] , 0C6
cmp byte [bx-03] , 0C6
jne FAIL18
; MOD=10 R/M=111 -- DS:BX+D16= B900+2066+103 = BB169
mov bx , 02066
mov si , 00000
mov byte [bx+0103] , 034
cmp byte [bx+0103] , 034
jne FAIL18
; MOD=10 R/M=111 -- DS:BX-D16= B900+2166-102 = BB064
mov bx , 02166
mov si , 00000
mov byte [bx-0102] , 0EA
cmp byte [bx-0102] , 0EA
jne FAIL18
jmp ADR_MODE_TEST_3
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
FAIL18:
mov dx,00038 ; Print an 8
mov ax,00202
int 021
jmp Z_END
; Addressing modes Test-3
; -----------------------
ADR_MODE_TEST_3:
nop
; Set all segments and pointers
; -----------------------------
mov ax,0BB00 ; Set the ES
mov es,ax
mov di,00000 ; Zero the DI pointer
mov ax,0B900 ; Set the DS
mov ds,ax
mov si,02000 ; Zero the SI pointer
mov ax,0BA00 ; Set the SS
mov ss,ax
mov sp,011FE ; Set the Stack to BB1FE
mov bp,01000 ; Set the BP
; Fill BB000-BB1FF with incremening data
; ---------------------------------------
mov ax,00000 ; Zero out value to write
mov cx,00200 ; Set cx to count 512 times
cld ; Make sure DI increments
L21: stosb ; ES:DI <= AL
inc ax ; AX and DI will increment
loop L21 ; Repeat FF times
; Write memory using each addressing mode
; and compare to immediate value.
; MOD=00 R/M=000 -- DS:BX+SI= B900+2030+14 = BB044
TEST21: mov bx , 02030
mov si , 014
mov word [bx+si] , 0325A
cmp word [bx+si] , 0325A
jne FAIL21
; MOD=01 R/M=000 -- DS:BX+SI+D8= B900+2030+14+4 = BB048
mov bx , 02030
mov si , 014
mov word [bx+si+04] , 0EC12
cmp word [bx+si+04] , 0EC12
jne FAIL21
; MOD=01 R/M=000 -- DS:BX+SI-D8= B900+2030+14-3 = BB040
mov bx , 02030
mov si , 014
mov word [bx+si-04] , 0AB34
cmp word [bx+si-04] , 0AB34
jne FAIL21
; MOD=10 R/M=000 -- DS:BX+SI+D16= B900+2020+25+104 = BB149
mov bx , 02020
mov si , 00025
mov word [bx+si+0104] , 0DD87
cmp word [bx+si+0104] , 0DD87
jne FAIL21
; MOD=10 R/M=000 -- DS:BX+SI-D16= B900+2120+25-102 = BB043
mov bx , 02120
mov si , 00025
mov word [bx+si-0102] , 0D341
cmp word [bx+si-0102] , 0D341
jne FAIL21
jmp TEST22
FAIL21:
mov dx,00031 ; Print a 1
mov ax,00202
int 021
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
; MOD=00 R/M=001 -- DS:BX+DI= B900+2040+04 = BB044
TEST22: mov bx , 02040
mov di , 004
mov word [bx+di] , 02E12
cmp word [bx+di] , 02E12
jne FAIL22
; MOD=01 R/M=001 -- DS:BX+DI+D8= B900+2040+04+4 = BB048
mov bx , 02040
mov di , 004
mov word [bx+di+04] , 02285
cmp word [bx+di+04] , 02285
jne FAIL22
; MOD=01 R/M=001 -- DS:BX+DI-D8= B900+2040+04-3 = BB040
mov bx , 02040
mov di , 004
mov word [bx+di-04] , 0EA56
cmp word [bx+di-04] , 0EA56
jne FAIL22
; MOD=10 R/M=001 -- DS:BX+DI+D16= B900+2010+35+104 = BB149
mov bx , 02010
mov di , 00035
mov word [bx+di+0104] , 0CC53
cmp word [bx+di+0104] , 0CC53
jne FAIL22
; MOD=10 R/M=001 -- DS:BX+DI-D16= B900+2110+35-102 = BB043
mov bx , 02110
mov di , 00035
mov word [bx+di-0102] , 04475
cmp word [bx+di-0102] , 04475
jne FAIL22
jmp TEST23
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
FAIL22:
mov dx,00032 ; Print a 2
mov ax,00202
int 021
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
; MOD=00 R/M=010 -- SS:BP+SI= BA00+1070+05 = BB075
TEST23: mov bp , 01070
mov si, 005
mov word [bp+si] , 08472
cmp word [bp+si] , 08472
jne FAIL23
; MOD=01 R/M=010 -- SS:BP+SI+D8= BA00+1070+05+2 = BB077
mov bp , 01070
mov si , 005
mov word [bp+si+02] , 03C11
cmp word [bp+si+02] , 03C11
jne FAIL23
; MOD=01 R/M=010 -- SS:BP+SI-D8= BA00+1070+05-3 = BB072
mov bp , 01070
mov si , 005
mov word [bp+si-03] , 02A24
cmp word [bp+si-03] , 02A24
jne FAIL23
; MOD=10 R/M=010 -- SS:BP+SI+D16= BA00+1070+05+103 = BB178
mov bp , 01070
mov si , 005
mov word [bp+si+0103] , 04C33
cmp word [bp+si+0103] , 04C33
jne FAIL23
; MOD=10 R/M=010 -- SS:BP+SI-D16= BA00+1170+35-102 = BB0A3
mov bp , 01170
mov si , 00035
mov word [bp+si-0102] , 055BC
cmp word [bp+si-0102] , 055BC
jne FAIL23
jmp TEST24
FAIL23:
mov dx,00033 ; Print a 3
mov ax,00202
int 021
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
; MOD=00 R/M=011 -- SS:BP+DI= BA00+1070+06 = BB076
TEST24: mov bp , 01070
mov di, 006
mov word [bp+di] , 0EDA2
cmp word [bp+di] , 0EDA2
jne FAIL24
; MOD=01 R/M=011 -- SS:BP+DI+D8= BA00+1070+06+2 = BB078
mov bp , 01070
mov di , 006
mov word [bp+di+02] , 0DFCE
cmp word [bp+di+02] , 0DFCE
jne FAIL24
; MOD=01 R/M=011 -- SS:BP+DI-D8= BA00+1070+06-3 = BB073
mov bp , 01070
mov di , 006
mov word [bp+di-03] , 0C422
cmp word [bp+di-03] , 0C422
jne FAIL24
; MOD=10 R/M=011 -- SS:BP+DI+D16= BA00+1070+06+103 = BB179
mov bp , 01070
mov di , 006
mov word [bp+di+0103] , 02CAB
cmp word [bp+di+0103] , 02CAB
jne FAIL24
; MOD=10 R/M=011 -- SS:BP+DI-D16= BA00+1170+36-102 = BB0A4
mov bp , 01170
mov di , 00036
mov word [bp+di-0102] , 057EE
cmp word [bp+di-0102] , 057EE
jne FAIL24
jmp TEST25
FAIL24:
mov dx,00034 ; Print a 4
mov ax,00202
int 021
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
; MOD=00 R/M=100 -- DS:SI= B900+2024 = BB024
TEST25: mov bx , 00000
mov si , 02024
mov word [si] , 010DD
cmp word [si] , 010DD
jne FAIL25
; MOD=01 R/M=100 -- DS:SI+D8= B900+2024+3 = BB027
mov bx , 00000
mov si , 02024
mov word [si+03] , 02A12
cmp word [si+03] , 02A12
jne FAIL25
; MOD=01 R/M=100 -- DS:SI-D8= B900+2024-3 = BB021
mov bx , 00000
mov si , 02024
mov word [si-03] , 0CDF3
cmp word [si-03] , 0CDF3
jne FAIL25
; MOD=10 R/M=100 -- DS:SI+D16= B900+2024+104 = BB128
mov bx , 00000
mov si , 02024
mov word [si+0104] , 0DFA2
cmp word [si+0104] , 0DFA2
jne FAIL25
; MOD=10 R/M=100 -- DS:SI-D16= B900+2124-102 = BB022
mov bx , 00000
mov si , 02124
mov word [si-0102] , 0AD4E
cmp word [si-0102] , 0AD4E
jne FAIL25
jmp TEST26
FAIL25:
mov dx,00035 ; Print a 5
mov ax,00202
int 021
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
; MOD=00 R/M=101 -- DS:DI= B900+2024 = BB024
TEST26: mov si , 00000
mov di , 02024
mov word [di] , 03CAA
cmp word [di] , 03CAA
jne FAIL26
; MOD=01 R/M=101 -- DS:DI+D8= B900+2024+3 = BB027
mov si , 00000
mov di , 02024
mov word [di+03] , 021AB
cmp word [di+03] , 021AB
jne FAIL26
; MOD=01 R/M=101 -- DS:DI-D8= B900+2024-3 = BB021
mov si , 00000
mov di , 02024
mov word [di-03] , 07933
cmp word [di-03] , 07933
jne FAIL26
; MOD=10 R/M=101 -- DS:DI+D16= B900+2025+104 = BB129
mov si , 00000
mov di , 02025
mov word [di+0104] , 0B646
cmp word [di+0104] , 0B646
jne FAIL26
; MOD=10 R/M=101 -- DS:DI-D16= B900+2124-102 = BB022
mov si , 00000
mov di , 02124
mov word [di-0102] , 0EBCE
cmp word [di-0102] , 0EBCE
jne FAIL26
jmp TEST27
FAIL26:
mov dx,00036 ; Print an 6
mov ax,00202
int 021
jmp Z_END
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
; MOD=00 R/M=110 -- DS=B900:[DIRECT ACCESS] = BB044
TEST27: mov bp , 00000
mov word [02044] , 0ABA2
cmp word [02044] , 0ABA2
jne FAIL27
; MOD=01 R/M=110 -- SS:BP+D8= BA00+1050+5 = BB055
mov bp , 01050
mov word [bp+05] , 0BEE8
cmp word [bp+05] , 0BEE8
jne FAIL27
; MOD=01 R/M=110 -- SS:BP+D8= BA00+1050-3 = BB04D
mov bp , 01050
mov word [bp-03] , 09B3C
cmp word [bp-03] , 09B3C
jne FAIL27
; MOD=10 R/M=110 -- SS:BP+D16= BA00+1060+106 = BB166
mov bp , 01060
mov word [bp+0106] , 06E12
cmp word [bp+0106] , 06E12
jne FAIL27
; MOD=10 R/M=110 -- SS:BP-D16= BA00+1170-102 = BB06E
mov bp , 01170
mov word [bp-0102] , 03C9C
cmp word [bp-0102] , 03C9C
jne FAIL27
jmp TEST28
FAIL27:
mov dx,00037 ; Print an 7
mov ax,00202
int 021
jmp Z_END
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
; MOD=00 R/M=111 -- DS:BX= B900+2066 = BB066
TEST28: mov bx , 02066
mov si , 00000
mov word [bx] , 0B245
cmp word [bx] , 0B245
jne FAIL28
; MOD=01 R/M=111 -- DS:BX+D8= B900+2066+3 = BB069
mov bx , 02066
mov si , 00000
mov word [bx+03] , 01A99
cmp word [bx+03] , 01A99
jne FAIL28
; MOD=01 R/M=111 -- DS:BX-D8= B900+2066-3 = BB063
mov bx , 02066
mov si , 00000
mov word [bx-03] , 04DC6
cmp word [bx-03] , 04DC6
jne FAIL28
; MOD=10 R/M=111 -- DS:BX+D16= B900+2066+103 = BB169
mov bx , 02066
mov si , 00000
mov word [bx+0103] , 0EC34
cmp word [bx+0103] , 0EC34
jne FAIL28
; MOD=10 R/M=111 -- DS:BX-D16= B900+2166-102 = BB064
mov bx , 02166
mov si , 00000
mov word [bx-0102] , 05DEA
cmp word [bx-0102] , 05DEA
jne FAIL28
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Z_END:
mov ax,00000 ; DOS Command=Exit
int 021
FAIL28:
mov dx,00038 ; Print an 8
mov ax,00202
int 021
jmp Z_END