; Tests for opcode range 0x81 with second word=0x0-0x7 ; These tests are for REG16,IMM16 ; ---------------------------------------------------- mov ax,es ; Increment ES so it is not the same as DS inc ax mov es,ax ; 0x81 - ADD REG16,IMM16 ; ############################################################ TEST_81_0_0: ; Test from Memory mov dx,0FFFF lock add dx,01234 ; test lock prefix cmp dx,01233 jne FAIL_81_0_0 mov dx,00000 add dx,01234 cmp dx,01234 jne FAIL_81_0_0 mov word dx,01111 ; test segment override add word dx,02222 cmp word dx,03333 jne FAIL_81_0_0 jmp TEST_81_0_1 FAIL_81_0_0: mov dx,00030 ; Print a 0 mov ax,00202 int 021 TEST_81_0_1: ; ADD REG16,IMM16 - Test flags ; Overflow, Sign, Zero, Parity, AUX, Carry mov dx,00001 add dx,07FFF ; Overflow should be set jno FAIL_81_0_1 ; If not set, then fail mov dx,00022 add dx,01234 ; Overflow should NOT be set jno PASS_81_0_1 ; If not set, then we passed jmp FAIL_81_0_1 ; If set then we fail PASS_81_0_1: mov dx,07FFF add word[00050],00234 ; sign should be set jns FAIL_81_0_1 ; If not set, then fail mov dx,01111 add dx,02222 ; sign should NOT be set js FAIL_81_0_1 ; If set then we fail mov dx,00100 add dx,0FF00 ; zero should be set jne FAIL_81_0_1 ; If not set then we fail jmp TEST_81_1_0 FAIL_81_0_1: mov dx,00030 ; Print a 0 mov ax,00202 int 021 ; 0x81 - OR REG16,IMM16 ; ############################################################ TEST_81_1_0: ; OR REG16,IMM16 - Test data values from memory mov ax,es ; Increment ES so it is not the same as DS inc ax mov es,ax mov dx,05A5A lock or dx,0A5A5 cmp dx,0FFFF jne FAIL_81_1_0 mov dx,00000 or dx,01234 cmp dx,01234 jne FAIL_81_1_0 mov word dx,05500 or word dx,05555 cmp word dx,05555 jne FAIL_81_1_0 jmp TEST_81_1_1 FAIL_81_1_0: mov dx,00031 ; Print a 1 mov ax,00202 int 021 ; ################## TEST_81_1_1: ; OR REG16,IMM16 - Test flags ; Overflow, Sign, Zero, Parity, AUX, Carry mov dx,01111 or dx,02222 ; Overflow should NEVER be set jno PASS_81_1_1 ; If not set, then we passed jmp FAIL_81_1_1 ; If set then we fail PASS_81_1_1: mov dx,08000 or dx,01234 ; sign should be set jns FAIL_81_1_1 ; If not set, then fail mov dx,01111 or dx,02222 ; sign should NOT be set js FAIL_81_1_1 ; If set then we fail mov dx,00000 or dx,00000 ; zero should be set jne FAIL_81_1_1 ; If not set then we fail jmp PASS_81_1_2 FAIL_81_1_1: mov dx,00031 ; Print a 1 mov ax,00202 int 021 jmp TEST_81_2_0 PASS_81_1_2: mov dx,00000 or dx,01234 ; zero should NOT be set je FAIL_81_1_1 ; If set then we fail mov dx,01111 or dx,02222 ; parity should be set jnp FAIL_81_1_1 ; If not set then we fail mov dx,00010 or dx,03400 ; parity should NOT be set jp FAIL_81_1_1 ; If set then we fail mov dx,01112 or dx,02234 ; carry should NEVER be set jc FAIL_81_1_1 ; If set then we fail ; 0x81 - ADC REG16,IMM16 ; ############################################################ TEST_81_2_0: ; ADC REG16,IMM16 - Test data values from memory ; Tests with Carry Bit CLEARED ; ---------------------------- clc mov dx,00000 lock adc dx,0F3FF ; test lock prefix cmp dx,0F3FF jne FAIL_81_2_0 clc mov dx,00000 adc dx,01200 cmp dx,01200 jne FAIL_81_2_0 clc mov word dx,01111 ; test segment override adc word dx,02222 cmp word dx,03333 jne FAIL_81_2_0 clc mov dx,0FFFF adc dx,012FF cmp dx,012FE jne FAIL_81_2_0 jmp TEST_81_2_1 FAIL_81_2_0: mov dx,00032 ; Print a 2 mov ax,00202 int 021 ; ################## ; Tests with Carry Bit SET ; ------------------------ TEST_81_2_1: stc mov dx,00000 lock adc dx,01200 ; test lock prefix cmp dx,01201 jne FAIL_81_2_1 stc mov dx,00000 adc dx,01234 cmp dx,01235 jne FAIL_81_2_1 stc mov word dx,01111 ; test segment override adc word dx,02222 cmp word dx,03334 jne FAIL_81_2_1 stc mov dx,0FFFF adc dx,01234 cmp dx,01234 jne FAIL_81_2_1 jmp TEST_81_2_2 FAIL_81_2_1: mov dx,00032 ; Print a 2 mov ax,00202 int 021 ; ################## TEST_81_2_2: ; ADC REG16,IMM16 - Test flags ; Overflow, Sign, Zero, Parity, AUX, Carry ; Tests with Carry Bit CLEARED ; ---------------------------- clc mov dx,00001 adc dx,07FFF ; Overflow should be set jno FAIL_81_2_2 ; If not set, then fail clc mov dx,00002 adc dx,01111 ; Overflow should NOT be set jno PASS_81_2_2 ; If not set, then we passed jmp FAIL_81_2_2 ; If set then we fail PASS_81_2_2: clc mov dx,00001 adc dx,07FFF ; sign should be set jns FAIL_81_2_2 ; If not set, then fail clc mov dx,01111 adc dx,02222 ; sign should NOT be set js FAIL_81_2_2 ; If set then we fail clc mov dx,00100 adc dx,0FF00 ; zero should be set jne FAIL_81_2_2 ; If not set then we fail jmp PASS_81_2_3 FAIL_81_2_2: mov dx,00032 ; Print a 2 mov ax,00202 int 021 jmp PASS_81_2_4 PASS_81_2_3: clc mov dx,00000 adc dx,03001 ; zero should NOT be set je FAIL_81_2_2 ; If set then we fail clc mov dx,00011 adc dx,01122 ; parity should be set jnp FAIL_81_2_2 ; If not set then we fail clc mov dx,00011 adc dx,01121 ; parity should NOT be set jp FAIL_81_2_2 ; If set then we fail clc mov dx,0FFFF adc dx,02201 ; carry should be set jnc FAIL_81_2_2 ; If not set then we fail clc mov dx,01222 adc dx,03433 ; carry should NOT be set jc FAIL_81_2_2 ; If set then we fail ; Tests with Carry Bit SET ; ------------------------ stc mov dx,07FFF adc dx,00201 ; Overflow should be set jno FAIL_81_2_3 ; If not set, then fail stc mov dx,01111 adc dx,02222 ; Overflow should NOT be set jno PASS_81_2_4 ; If not set, then we passed jmp FAIL_81_2_3 ; If set then we fail PASS_81_2_4: stc mov dx,07FFE adc dx,00201 ; sign should be set jns FAIL_81_2_3 ; If not set, then fail stc mov dx,01111 adc dx,02222 ; sign should NOT be set js FAIL_81_2_3 ; If set then we fail stc mov dx,0EEEF adc dx,01110 ; zero should be set jne FAIL_81_2_3 ; If not set then we fail jmp PASS_81_2_5 FAIL_81_2_3: mov dx,00032 ; Print a 2 mov ax,00202 int 021 jmp TEST_81_3_0 PASS_81_2_5: stc mov dx,00000 adc dx,01234 ; zero should NOT be set je FAIL_81_2_3 ; If set then we fail stc mov dx,02210 adc dx,02222 ; parity should be set jnp FAIL_81_2_3 ; If not set then we fail stc mov dx,02211 adc dx,02222 ; parity should NOT be set jp FAIL_81_2_3 ; If set then we fail stc mov dx,0FFFF adc dx,02000 ; carry should be set jnc FAIL_81_2_3 ; If not set then we fail stc mov dx,01111 adc dx,02222 ; carry should NOT be set jc FAIL_81_2_3 ; If set then we fail ; 0x81 - SBB REG16,IMM16 ; ############################################################ TEST_81_3_0: ; SBB REG16,IMM16 - Test data values from memory ; Tests with Carry Bit CLEARED ; ---------------------------- clc mov dx,00000 lock sbb dx,01201 ; test lock prefix cmp dx,0EDFF jne FAIL_81_3_0 clc mov dx,00000 sbb dx,01200 cmp dx,0EE00 jne FAIL_81_3_0 clc mov word dx,02222 ; test segment override sbb word dx,01111 cmp word dx,01111 jne FAIL_81_3_0 clc mov dx,0FF00 sbb dx,0FF00 cmp dx,00000 jne FAIL_81_3_0 jmp TEST_81_3_1 FAIL_81_3_0: mov dx,00033 ; Print a 3 mov ax,00202 int 021 ; ################## ; Tests with Carry Bit SET ; ------------------------ TEST_81_3_1: stc mov dx,01235 lock sbb dx,01234 ; test lock prefix cmp dx,00000 jne FAIL_81_3_1 stc mov dx,01234 sbb dx,00000 cmp dx,01233 jne FAIL_81_3_1 stc mov word dx,01111 ; test segment override sbb word dx,02222 cmp word dx,0EEEE jne FAIL_81_3_1 stc mov dx,0FFFF sbb dx,01234 cmp dx,0EDCA jne FAIL_81_3_1 jmp TEST_81_3_2 FAIL_81_3_1: mov dx,00033 ; Print a 3 mov ax,00202 int 021 ; ################## TEST_81_3_2: ; SBB REG16,IMM16 - Test flags ; Overflow, Sign, Zero, Parity, AUX, Carry ; Tests with Carry Bit CLEARED ; ---------------------------- clc mov dx,08000 sbb dx,00101 ; Overflow should be set jno FAIL_81_3_2 ; If not set, then fail clc mov dx,07800 sbb dx,03400 ; Overflow should NOT be set jno PASS_81_3_2 ; If not set, then we passed jmp FAIL_81_3_2 ; If set then we fail PASS_81_3_2: clc mov dx,08FFF sbb dx,00101 ; sign should be set jns FAIL_81_3_2 ; If not set, then fail clc mov dx,01111 sbb dx,00101 ; sign should NOT be set js FAIL_81_3_2 ; If set then we fail clc mov dx,01234 sbb dx,01234 ; zero should be set jne FAIL_81_3_2 ; If not set then we fail jmp PASS_81_3_3 FAIL_81_3_2: mov dx,00033 ; Print a 3 mov ax,00202 int 021 jmp PASS_81_3_4 PASS_81_3_3: clc mov dx,04444 sbb dx,02222 ; zero should NOT be set je FAIL_81_3_2 ; If set then we fail clc mov dx,04444 sbb dx,01111 ; parity should be set jnp FAIL_81_3_2 ; If not set then we fail clc mov dx,04444 sbb dx,01110 ; parity should NOT be set jp FAIL_81_3_2 ; If set then we fail clc mov dx,00000 sbb dx,00101 ; carry should be set jnc FAIL_81_3_2 ; If not set then we fail clc mov dx,01234 sbb dx,00112 ; carry should NOT be set jc FAIL_81_3_2 ; If set then we fail ; Tests with Carry Bit SET ; ------------------------ stc mov dx,08000 sbb dx,00200 ; Overflow should be set jno FAIL_81_3_3 ; If not set, then fail stc mov dx,03333 sbb dx,01111 ; Overflow should NOT be set jno PASS_81_3_4 ; If not set, then we passed jmp FAIL_81_3_3 ; If set then we fail PASS_81_3_4: stc mov dx,00001 sbb dx,00201 ; sign should be set jns FAIL_81_3_3 ; If not set, then fail stc mov dx,04444 sbb dx,02222 ; sign should NOT be set js FAIL_81_3_3 ; If set then we fail stc mov dx,00201 sbb dx,00200 ; zero should be set jne FAIL_81_3_3 ; If not set then we fail jmp PASS_81_3_5 FAIL_81_3_3: mov dx,00033 ; Print a 3 mov ax,00202 int 021 jmp TEST_81_4_0 PASS_81_3_5: stc mov dx,01111 sbb dx,00201 ; zero should NOT be set je FAIL_81_3_3 ; If set then we fail stc mov dx,04444 sbb dx,01113 ; parity should be set jnp FAIL_81_3_3 ; If not set then we fail stc mov dx,04448 sbb dx,01113 ; parity should NOT be set jp FAIL_81_3_3 ; If set then we fail stc mov dx,00000 sbb dx,00200 ; carry should be set jnc FAIL_81_3_3 ; If not set then we fail stc mov dx,06666 sbb dx,02222 ; carry should NOT be set jc FAIL_81_3_3 ; If set then we fail ; 0x81 - AND REG16,IMM16 ; ############################################################ TEST_81_4_0: ; AND REG16,IMM16 - Test data values from memory mov dx,05A5A lock and dx,0A5A5 cmp dx,000 jne FAIL_81_4_0 mov dx,0FFFF and dx,01111 cmp dx,01111 jne FAIL_81_4_0 mov word dx,01100 and word dx,01100 cmp word dx,01100 jne FAIL_81_4_0 jmp TEST_81_4_1 FAIL_81_4_0: mov dx,00034 ; Print a 4 mov ax,00202 int 021 ; ################## TEST_81_4_1: ; AND REG16,IMM16 - Test flags ; Overflow, Sign, Zero, Parity, AUX, Carry mov dx,01111 and dx,02222 ; Overflow should NEVER be set jno PASS_81_4_1 ; If not set, then we passed jmp FAIL_81_4_1 ; If set then we fail PASS_81_4_1: mov dx,08000 and dx,08000 ; sign should be set jns FAIL_81_4_1 ; If not set, then fail mov dx,0FFFF and dx,07FFF ; sign should NOT be set js FAIL_81_4_1 ; If set then we fail mov dx,00000 and dx,012FF ; zero should be set jne FAIL_81_4_1 ; If not set then we fail jmp PASS_81_4_2 FAIL_81_4_1: mov dx,00034 ; Print a 4 mov ax,00202 int 021 jmp TEST_81_5_0 PASS_81_4_2: mov dx,0FF00 and dx,00100 ; zero should NOT be set je FAIL_81_4_1 ; If set then we fail mov dx,00003 and dx,00103 ; parity should be set jnp FAIL_81_4_1 ; If not set then we fail mov dx,00003 and dx,00101 ; parity should NOT be set jp FAIL_81_4_1 ; If set then we fail mov dx,01112 and dx,01134 ; carry should NEVER be set jc FAIL_81_4_1 ; If set then we fail ; 0x28 - SUB REG16,IMM16 ; ############################################################ TEST_81_5_0: ; SUB REG16,IMM16 - Test data values from memory mov dx,08888 lock sub dx,01111 ; test lock prefix cmp dx,07777 jne FAIL_81_5_0 mov dx,01222 sub dx,01222 cmp dx,00000 jne FAIL_81_5_0 mov word dx,02222 ; test segment override sub word dx,01111 cmp word dx,01111 jne FAIL_81_5_0 mov dx,00100 sub dx,00101 cmp dx,0FFFF jne FAIL_81_5_0 jmp TEST_81_5_1 FAIL_81_5_0: mov dx,00035 ; Print a 5 mov ax,00202 int 021 ; ################## TEST_81_5_1: ; SUB REG16,IMM16 - Test flags ; Overflow, Sign, Zero, Parity, AUX, Carry mov dx,08000 sub dx,00201 ; Overflow should be set jno FAIL_81_5_1 ; If not set, then fail mov dx,01234 sub dx,01234 ; Overflow should NOT be set jno PASS_81_5_1 ; If not set, then we passed jmp FAIL_81_5_1 ; If set then we fail PASS_81_5_1: mov dx,00000 sub dx,00201 ; sign should be set jns FAIL_81_5_1 ; If not set, then fail mov dx,02222 sub dx,01111 ; sign should NOT be set js FAIL_81_5_1 ; If set then we fail mov dx,01111 sub dx,01111 ; zero should be set jne FAIL_81_5_1 ; If not set then we fail jmp PASS_81_5_2 FAIL_81_5_1: mov dx,00035 ; Print a 5 mov ax,00202 int 021 jmp TEST_81_6_0 PASS_81_5_2: mov dx,05555 sub dx,01111 ; zero should NOT be set je FAIL_81_5_1 ; If set then we fail mov dx,00034 sub dx,00201 ; parity should be set jnp FAIL_81_5_1 ; If not set then we fail mov dx,00032 sub dx,00201 ; parity should NOT be set jp FAIL_81_5_1 ; If set then we fail mov dx,00000 sub dx,00201 ; carry should be set jnc FAIL_81_5_1 ; If not set then we fail mov dx,04031 sub dx,00211 ; carry should NOT be set jc FAIL_81_5_1 ; If set then we fail ; 0x81 - XOR REG16,IMM16 ; ############################################################ TEST_81_6_0: ; XOR REG16,IMM16 - Test data values from memory mov dx,05A5A lock xor dx,0A5A5 cmp word dx,0FFFF jne FAIL_81_6_0 mov dx,00200 xor dx,00200 cmp word dx,00000 jne FAIL_81_6_0 mov word dx,08200 xor word dx,00201 cmp word word dx,08001 jne FAIL_81_6_0 jmp TEST_81_6_1 FAIL_81_6_0: mov dx,00036 ; Print a 6 mov ax,00202 int 021 ; ################## TEST_81_6_1: ; XOR REG16,IMM16 - Test flags ; Overflow, Sign, Zero, Parity, AUX, Carry mov dx,020FF xor dx,0207F ; Overflow should NEVER be set jno PASS_81_6_1 ; If not set, then we passed jmp FAIL_81_6_1 ; If set then we fail PASS_81_6_1: mov dx,08000 xor dx,00200 ; sign should be set jns FAIL_81_6_1 ; If not set, then fail mov dx,01111 xor dx,02222 ; sign should NOT be set js FAIL_81_6_1 ; If set then we fail mov dx,05A22 xor dx,05A22 ; zero should be set jne FAIL_81_6_1 ; If not set then we fail jmp PASS_81_6_2 FAIL_81_6_1: mov dx,00036 ; Print a 6 mov ax,00202 int 021 jmp TEST_81_7_0 PASS_81_6_2: mov dx,00000 xor dx,00201 ; zero should NOT be set je FAIL_81_6_1 ; If set then we fail mov dx,00001 xor dx,00202 ; parity should be set jnp FAIL_81_6_1 ; If not set then we fail mov dx,00001 xor dx,00206 ; parity should NOT be set jp FAIL_81_6_1 ; If set then we fail mov dx,01212 xor dx,01234 ; carry should NEVER be set jc FAIL_81_6_1 ; If set then we fail ; 0x81 - CMP REG16,IMM16 ; ############################################################ TEST_81_7_0: ; CMP REG16,IMM16 - Test data values from memory mov dx,01212 lock cmp dx,01212 ; test lock prefix jne FAIL_81_7_0 mov dx,00200 cmp dx,00200 jne FAIL_81_7_0 mov word dx,01111 ; test segment override cmp word dx,01111 jne FAIL_81_7_0 mov dx,0F2FF cmp dx,0F2FF jne FAIL_81_7_0 jmp TEST_81_7_1 FAIL_81_7_0: mov dx,00037 ; Print a 7 mov ax,00202 int 021 ; ################## TEST_81_7_1: ; CMP REG16,IMM16 - Test flags ; Overflow, Sign, Zero, Parity, AUX, Carry mov dx,08000 cmp dx,00201 ; Overflow should be set jno FAIL_81_7_1 ; If not set, then fail mov dx,02222 cmp dx,01111 ; Overflow should NOT be set jno PASS_81_7_1 ; If not set, then we passed jmp FAIL_81_7_1 ; If set then we fail PASS_81_7_1: mov dx,0FFFF cmp dx,00201 ; sign should be set jns FAIL_81_7_1 ; If not set, then fail mov dx,01111 cmp dx,00201 ; sign should NOT be set js FAIL_81_7_1 ; If set then we fail mov dx,03434 cmp dx,03434 ; zero should be set jne FAIL_81_7_1 ; If not set then we fail jmp PASS_81_7_2 FAIL_81_7_1: mov dx,00037 ; Print a 7 mov ax,00202 int 021 jmp Z_END PASS_81_7_2: mov dx,01100 cmp dx,03301 ; zero should NOT be set je FAIL_81_7_1 ; If set then we fail mov dx,00044 cmp dx,00200 ; parity should be set jnp FAIL_81_7_1 ; If not set then we fail mov dx,00044 cmp dx,00201 ; parity should NOT be set jp FAIL_81_7_1 ; If set then we fail mov dx,00000 cmp dx,00201 ; carry should be set jnc FAIL_81_7_1 ; If not set then we fail mov dx,01234 cmp dx,00201 ; carry should NOT be set jc FAIL_81_7_1 ; If set then we fail ; xxxxxxxxxxxxxxxxxxxxxxx ; End ; xxxxxxxxxxxxxxxxxxxxxxx Z_END: mov ax,00000 ; DOS Command=Exit int 021