; Tests for opcode range 0x10-0x1F ; --------------------------------- ; 0x10 - ADC REG8/MEM8,REG8 ; ############################################################ TEST_10_0: ; ADC 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 ; Tests with Carry Bit CLEARED ; ---------------------------- clc mov byte [00050],000 mov ax,000FF lock adc [00050],al ; test lock prefix cmp byte [00050],0FF jne FAIL_10_0 clc mov byte [00050],000 mov ax,00000 adc [00050],al cmp byte [00050],000 jne FAIL_10_0 clc mov byte es:[00052],011 ; test segment override mov ax,00022 adc es:[00052],al cmp byte es:[00052],033 jne FAIL_10_0 clc mov byte [00053],0FF mov ax,000FF adc [00053],al cmp byte [00053],0FE jne FAIL_10_0 jmp TEST_10_1 FAIL_10_0: mov dx,00030 ; Print a 0 mov ax,00202 int 021 ; ################## ; Tests with Carry Bit SET ; ------------------------ TEST_10_1: stc mov byte [00050],000 mov ax,000FF lock adc [00050],al ; test lock prefix cmp byte [00050],000 jne FAIL_10_1 stc mov byte [00050],000 mov ax,00000 adc [00050],al cmp byte [00050],001 jne FAIL_10_1 stc mov byte es:[00052],011 ; test segment override mov ax,00022 adc es:[00052],al cmp byte es:[00052],034 jne FAIL_10_1 stc mov byte [00053],0FF mov ax,000FF adc [00053],al cmp byte [00053],0FF jne FAIL_10_1 jmp TEST_10_2 FAIL_10_1: mov dx,00030 ; Print a 0 mov ax,00202 int 021 ; ################## TEST_10_2: ; ADC MEM8,REG8 - Test flags ; Overflow, Sign, Zero, Parity, AUX, Carry ; Tests with Carry Bit CLEARED ; ---------------------------- clc mov byte [00054],07B mov ax,00036 adc [00054],al ; Overflow should be set jno FAIL_10_2 ; If not set, then fail clc mov byte [00055],0B1 mov ax,00037 adc [00055],al ; Overflow should NOT be set jno PASS_10_2 ; If not set, then we passed jmp FAIL_10_2 ; If set then we fail PASS_10_2: clc mov byte [00056],0FF mov ax,000FF adc [00056],al ; sign should be set jns FAIL_10_2 ; If not set, then fail clc mov byte [00057],011 mov ax,00022 adc [00057],al ; sign should NOT be set js FAIL_10_2 ; If set then we fail clc mov byte [00058],000 mov ax,00000 adc [00058],al ; zero should be set jne FAIL_10_2 ; If not set then we fail jmp PASS_10_3 FAIL_10_2: mov dx,00030 ; Print a 0 mov ax,00202 int 021 jmp TEST_11_0 PASS_10_3: clc mov byte [00050],000 mov ax,00001 adc [00050],al ; zero should NOT be set je FAIL_10_2 ; If set then we fail clc mov byte [00050],012 mov ax,00035 adc [00050],al ; parity should be set jnp FAIL_10_2 ; If not set then we fail clc mov byte [00050],012 mov ax,00034 adc [00050],al ; parity should NOT be set jp FAIL_10_2 ; If set then we fail clc mov byte [00050],0FF mov ax,000FF adc [00050],al ; carry should be set jnc FAIL_10_2 ; If not set then we fail clc mov byte [00050],012 mov ax,00034 adc [00050],al ; carry should NOT be set jc FAIL_10_2 ; If set then we fail ; Tests with Carry Bit SET ; ------------------------ stc mov byte [00054],001 mov ax,0007F adc [00054],al ; Overflow should be set jno FAIL_10_3 ; If not set, then fail stc mov byte [00055],0B1 mov ax,00037 adc [00055],al ; Overflow should NOT be set jno PASS_10_4 ; If not set, then we passed jmp FAIL_10_3 ; If set then we fail PASS_10_4: stc mov byte [00056],0FF mov ax,000FF adc [00056],al ; sign should be set jns FAIL_10_3 ; If not set, then fail stc mov byte [00057],011 mov ax,00022 adc [00057],al ; sign should NOT be set js FAIL_10_3 ; If set then we fail stc mov byte [00058],000 mov ax,000FF adc [00058],al ; zero should be set jne FAIL_10_3 ; If not set then we fail jmp PASS_10_5 FAIL_10_3: mov dx,00030 ; Print a 0 mov ax,00202 int 021 jmp TEST_11_0 PASS_10_5: stc mov byte [00050],000 mov ax,00001 adc [00050],al ; zero should NOT be set je FAIL_10_3 ; If set then we fail stc mov byte [00050],012 mov ax,00035 adc [00050],al ; parity should be set jnp FAIL_10_3 ; If not set then we fail stc mov byte [00050],012 mov ax,00036 adc [00050],al ; parity should NOT be set jp FAIL_10_3 ; If set then we fail stc mov byte [00050],0FF mov ax,000FF adc [00050],al ; carry should be set jnc FAIL_10_3 ; If not set then we fail stc mov byte [00050],012 mov ax,00034 adc [00050],al ; carry should NOT be set jc FAIL_10_3 ; If set then we fail ; 0x11 - ADC REG16/MEM16,REG16 ; ############################################################ TEST_11_0: ; ADC MEM16,REG16 - Test data values from memory ; Tests with Carry Bit CLEARED ; ---------------------------- clc mov word [00060],00000 mov ax,000FF lock adc [00060],ax cmp word [00060],000FF jne FAIL_11_0 clc mov word [00060],00000 mov ax,00000 adc [00060],ax cmp word [00060],00000 jne FAIL_11_0 clc mov word es:[00060],03333 mov ax,01111 adc es:[00060],ax cmp word es:[00060],04444 jne FAIL_11_0 clc mov word [00060],000FF mov ax,000FF adc [00060],ax cmp byte [00060],000FE jne FAIL_11_0 jmp TEST_11_B FAIL_11_0: mov dx,00031 ; Print a 1 mov ax,00202 int 021 jmp TEST_11_1 TEST_11_B: ; Tests with Carry Bit SET ; ------------------------ stc mov word [00060],00000 mov ax,000FF lock adc [00060],ax cmp word [00060],00100 jne FAIL_11_0 stc mov word [00060],00000 mov ax,00000 adc [00060],ax cmp word [00060],00001 jne FAIL_11_0 stc mov word es:[00060],03333 mov ax,01111 adc es:[00060],ax cmp word es:[00060],04445 jne FAIL_11_0 stc mov word [00060],000FF mov ax,000FF adc [00060],ax cmp byte [00060],000FF jne FAIL_11_0 ; ################## TEST_11_1: ; ADC MEM16,REG16 - Test flags ; Overflow, Sign, Zero, Parity, AUX, Carry ; Tests with Carry Bit SET ; ------------------------ stc mov word [00050],07FFF mov ax,01234 adc [00050],ax ; Overflow should be set jno FAIL_11_1 ; If not set, then fail stc mov word [00050],01212 mov ax,03434 adc [00050],ax ; Overflow should NOT be set jno PASS_11_1 ; If not set, then we passed jmp FAIL_11_1 ; If set then we fail PASS_11_1: stc mov word [00050],00001 mov ax,07FFF adc [00050],ax ; sign should be set jns FAIL_11_1 ; If not set, then fail stc mov word [00050],01234 mov ax,04321 adc [00050],ax ; sign should NOT be set js FAIL_11_1 ; If set then we fail stc mov word [00050],0FFFE mov ax,00001 adc [00050],ax ; zero should be set jne FAIL_11_1 ; If not set then we fail jmp PASS_11_2 FAIL_11_1: mov dx,00031 ; Print a 1 mov ax,00202 int 021 jmp TEST_12_0 PASS_11_2: stc mov word [00050],01111 mov ax,02222 adc [00050],ax ; zero should NOT be set je FAIL_11_1 ; If set then we fail stc mov word [00050],04444 mov ax,01111 adc [00050],ax ; parity should be set jnp FAIL_11_1 ; If not set then we fail stc mov word [00050],01111 mov ax,01234 adc [00050],ax ; parity should NOT be set jp FAIL_11_1 ; If set then we fail stc mov word [00050],0FFFF mov ax,00001 adc [00050],ax ; carry should be set jnc FAIL_11_1 ; If not set then we fail stc mov word [00050],01234 mov ax,05678 adc [00050],ax ; carry should NOT be set jc FAIL_11_1 ; If set then we fail ; Tests with Carry Bit CLEARED ; ------------------------ clc mov word [00050],07FFF mov ax,01234 adc [00050],ax ; Overflow should be set jno FAIL_11_2 ; If not set, then fail clc mov word [00050],01212 mov ax,03434 adc [00050],ax ; Overflow should NOT be set jno PASS_11_3 ; If not set, then we passed jmp FAIL_11_2 ; If set then we fail PASS_11_3: clc mov word [00050],00001 mov ax,07FFF adc [00050],ax ; sign should be set jns FAIL_11_2 ; If not set, then fail clc mov word [00050],01234 mov ax,04321 adc [00050],ax ; sign should NOT be set js FAIL_11_2 ; If set then we fail clc mov word [00050],00000 mov ax,00000 adc [00050],ax ; zero should be set jne FAIL_11_2 ; If not set then we fail jmp PASS_11_4 FAIL_11_2: mov dx,00031 ; Print a 1 mov ax,00202 int 021 jmp TEST_12_0 PASS_11_4: clc mov word [00050],01111 mov ax,02222 adc [00050],ax ; zero should NOT be set je FAIL_11_2 ; If set then we fail clc mov word [00050],04444 mov ax,01111 adc [00050],ax ; parity should be set jnp FAIL_11_2 ; If not set then we fail clc mov word [00050],01111 mov ax,01234 adc [00050],ax ; parity should NOT be set jp FAIL_11_2 ; If set then we fail clc mov word [00050],0FFFF mov ax,00001 adc [00050],ax ; carry should be set jnc FAIL_11_2 ; If not set then we fail clc mov word [00050],01234 mov ax,05678 adc [00050],ax ; carry should NOT be set jc FAIL_11_2 ; If set then we fail ; 0x12 - ADC REG8,MEM8/REG8 ; ############################################################ TEST_12_0: ; ADC REG8,REG8 - Test data values from registers ; Tests with Carry Bit CLEARED ; ------------------------ clc mov ax,000FF lock adc ah,al cmp ax,0FFFF jne FAIL_12_0 clc mov ax,00000 adc ah,al cmp ax,00000 jne FAIL_12_0 clc mov ax,0FFFF adc ah,al cmp ax , 0FEFF jne FAIL_12_0 ; Tests with Carry Bit SET ; ------------------------ stc mov ax,000FF lock adc ah,al cmp ax,000FF jne FAIL_12_0 stc mov ax,00000 adc ah,al cmp ax,00100 jne FAIL_12_0 stc mov ax,0FFFF adc ah,al cmp ax , 0FFFF jne FAIL_12_0 jmp TEST_12_1 FAIL_12_0: mov dx,00032 ; Print a 2 mov ax,00202 int 021 ; ################## TEST_12_1: ; ADC MEM8,REG8 - Test data values from memory ; Tests with Carry Bit SET ; ------------------------ stc mov byte [00050],000 mov ax,000FF adc al,[00050] cmp al,000 jne FAIL_12_1 stc mov byte [00050],000 mov ax,00000 adc al,[00050] cmp al,001 jne FAIL_12_1 stc mov byte es:[00050],066 mov ax,00011 adc al,es:[00050] cmp al,078 jne FAIL_12_1 stc mov byte [00050],0FF mov ax,000FF adc al,[00050] cmp al,0FF jne FAIL_12_1 ; Tests with Carry Bit CLEARED ; ---------------------------- clc mov byte [00050],000 mov ax,000FF adc al,[00050] cmp al,0FF jne FAIL_12_1 clc mov byte [00050],000 mov ax,00000 adc al,[00050] cmp al,000 jne FAIL_12_1 clc mov byte es:[00050],066 mov ax,00011 adc al,es:[00050] cmp al,077 jne FAIL_12_1 clc mov byte [00050],0FF mov ax,000FF adc al,[00050] cmp al,0FE jne FAIL_12_1 jmp TEST_12_2 FAIL_12_1: mov dx,00032 ; Print a 2 mov ax,00202 int 021 ; ################## TEST_12_2: ; ADC REG8,REG8 - Test flags ; Overflow, Sign, Zero, Parity, AUX, Carry ; Tests with Carry Bit CLEARED ; ---------------------------- clc mov ax,07B36 ; Test overflow flag adc ah,al ; Overflow should be set jno FAIL_12_2 ; If not set, then fail clc mov ax,0B137 ; Test overflow flag adc ah,al ; Overflow should NOT be set jno PASS_12_2 ; If not set, then we passed jmp FAIL_12_2 ; If set then we fail PASS_12_2: clc mov dx,0FFFF ; Test sign flag adc dl,dh ; sign should be set jns FAIL_12_2 ; If not set, then fail clc mov cx,01122 ; Test sign flag adc ch,cl ; sign should NOT be set js FAIL_12_2 ; If set then we fail clc mov cx,00000 ; Test zero flag adc ch,cl ; zero should be set jne FAIL_12_2 ; If not set then we fail clc mov cx,00001 ; Test zero flag adc ch,cl ; zero should NOT be set je FAIL_12_2 ; If set then we fail clc mov ax,01235 ; Test parity flag adc ah,al ; parity should be set jnp FAIL_12_2 ; If not set then we fail clc mov cx,01234 ; Test parity flag adc ch,cl ; parity should NOT be set jp FAIL_12_2 ; If set then we fail clc mov ax,0FFFF ; Test carry flag adc ah,al ; carry should be set jnc FAIL_12_2 ; If not set then we fail clc mov cx,01234 ; Test carry flag adc ch,cl ; carry should NOT be set jc FAIL_12_2 ; If set then we fail jmp TEST_12_3 FAIL_12_2: mov dx,00032 ; Print a 2 mov ax,00202 int 021 ; Tests with Carry Bit SET ; ------------------------ TEST_12_3: stc mov ax,07B36 ; Test overflow flag adc ah,al ; Overflow should be set jno FAIL_12_3 ; If not set, then fail stc mov ax,0B137 ; Test overflow flag adc ah,al ; Overflow should NOT be set jno PASS_12_3 ; If not set, then we passed jmp FAIL_12_3 ; If set then we fail PASS_12_3: stc mov dx,0FFFF ; Test sign flag adc dl,dh ; sign should be set jns FAIL_12_3 ; If not set, then fail stc mov cx,01122 ; Test sign flag adc ch,cl ; sign should NOT be set js FAIL_12_3 ; If set then we fail stc mov cx,000FF ; Test zero flag adc ch,cl ; zero should be set jne FAIL_12_3 ; If not set then we fail stc mov cx,00001 ; Test zero flag adc ch,cl ; zero should NOT be set je FAIL_12_3 ; If set then we fail stc mov ax,01235 ; Test parity flag adc ah,al ; parity should be set jnp FAIL_12_3 ; If not set then we fail stc mov cx,01236 ; Test parity flag adc ch,cl ; parity should NOT be set jp FAIL_12_3 ; If set then we fail stc mov ax,0FFFF ; Test carry flag adc ah,al ; carry should be set jnc FAIL_12_3 ; If not set then we fail stc mov cx,01234 ; Test carry flag adc ch,cl ; carry should NOT be set jc FAIL_12_3 ; If set then we fail jmp TEST_13_0 FAIL_12_3: mov dx,00032 ; Print a 2 mov ax,00202 int 021 ; 0x13 - ADC REG16,MEM16/REG16 ; ############################################################ TEST_13_0: ; ADC MEM16,REG16 - Test data values from memory ; Tests with Carry Bit CLEARED ; ---------------------------- clc mov word [00055],00000 mov ax,0FFFF adc ax,[00055] cmp ax,0FFFF jne FAIL_13_0 clc mov word [00057],00000 mov ax,00000 adc ax,[00057] cmp ax,00000 jne FAIL_13_0 clc mov word es:[00059],06666 mov ax,01111 adc ax,es:[00059] cmp ax,07777 jne FAIL_13_0 jmp TEST_13_B FAIL_13_0: mov dx,00033 ; Print a 3 mov ax,00202 int 021 TEST_13_B: clc mov word [00060],0FFFF mov ax,0FFFF adc ax,[00060] cmp ax,0FFFE jne FAIL_13_0 ; Tests with Carry Bit SET ; ------------------------ stc mov word [00055],00000 mov ax,0FFFF adc ax,[00055] cmp ax,00000 jne FAIL_13_B stc mov word [00057],00000 mov ax,00000 adc ax,[00057] cmp ax,00001 jne FAIL_13_B stc mov word es:[00059],06666 mov ax,01111 adc ax,es:[00059] cmp ax,07778 jne FAIL_13_B stc mov word [00060],0FFFF mov ax,0FFFF adc ax,[00060] cmp ax,0FFFF jne FAIL_13_B jmp TEST_13_1 FAIL_13_B: mov dx,00033 ; Print a 3 mov ax,00202 int 021 ; ################## TEST_13_1: ; ADC REG16,MEM16 - Test flags ; Overflow, Sign, Zero, Parity, AUX, Carry ; Tests with Carry Bit CLEARED ; ---------------------------- clc mov word [00070],07FFF ; Test overflow flag mov ax,01234 adc ax,word [00070] ; Overflow should be set jno FAIL_13_1 ; If not set, then fail clc mov word [00070],01212 ; Test overflow flag mov ax,03434 adc ax,word [00070] ; Overflow should NOT be set jno PASS_13_1 ; If not set, then we passed jmp FAIL_13_1 ; If set then we fail PASS_13_1: clc mov word [00070],00001 ; Test sign flag mov ax,07FFF adc ax,word [00070] ; Sign should be set jns FAIL_13_1 ; If not set, then fail clc mov word [00070],01234 ; Test sign flag mov ax,04321 adc ax,word [00070] ; Sign should NOT be set js FAIL_13_1 ; If set, then fail clc mov word [00070],00000 ; Test zero flag mov ax,00000 adc ax,word [00070] ; Zero should be set jne FAIL_13_1 ; If not set, then fail clc mov word [00070],00001 ; Test zero flag mov ax,00000 adc ax,word [00070] ; Zero should NOT be set je FAIL_13_1 ; If set, then fail jmp TEST_13_2 FAIL_13_1: mov dx,00033 ; Print a 3 mov ax,00202 int 021 TEST_13_2: clc mov word [00070],01111 ; Test parity flag mov ax,01111 adc ax,word [00070] ; Parity should be set jnp FAIL_13_2 ; If not set, then fail clc mov word [00070],01111 ; Test parity flag mov ax,01234 adc ax,word [00070] ; Parity should NOT be set jp FAIL_13_2 ; If set, then fail clc mov word [00070],0FFFF ; Test carry flag mov ax,00001 adc ax,word [00070] ; Carry should be set jnc FAIL_13_2 ; If not set, then fail clc mov word [00070],01234 ; Test carry flag mov ax,05678 adc ax,word [00070] ; Carry should NOT be set jc FAIL_13_2 ; If set, then fail ; Tests with Carry Bit SET ; ------------------------ stc mov word [00070],07FFF ; Test overflow flag mov ax,01234 adc ax,word [00070] ; Overflow should be set jno FAIL_13_2 ; If not set, then fail stc mov word [00070],01212 ; Test overflow flag mov ax,03434 adc ax,word [00070] ; Overflow should NOT be set jno PASS_13_2 ; If not set, then we passed jmp FAIL_13_2 ; If set then we fail PASS_13_2: stc mov word [00070],00001 ; Test sign flag mov ax,07FFF adc ax,word [00070] ; Sign should be set jns FAIL_13_2 ; If not set, then fail stc mov word [00070],01234 ; Test sign flag mov ax,04321 adc ax,word [00070] ; Sign should NOT be set js FAIL_13_2 ; If set, then fail jmp TEST_13_C FAIL_13_2: mov dx,00033 ; Print a 3 mov ax,00202 int 021 jmp TEST_14_0 TEST_13_C: stc mov word [00070],0FFFF ; Test zero flag mov ax,00000 adc ax,word [00070] ; Zero should be set jne FAIL_13_2 ; If not set, then fail stc mov word [00070],00001 ; Test zero flag mov ax,00000 adc ax,word [00070] ; Zero should NOT be set je FAIL_13_2 ; If set, then fail jmp TEST_13_3 TEST_13_3: stc mov word [00070],01110 ; Test parity flag mov ax,01111 adc ax,word [00070] ; Parity should be set jnp FAIL_13_2 ; If not set, then fail stc mov word [00070],01111 ; Test parity flag mov ax,01234 adc ax,word [00070] ; Parity should NOT be set jp FAIL_13_2 ; If set, then fail stc mov word [00070],0FFFF ; Test carry flag mov ax,00001 adc ax,word [00070] ; Carry should be set jnc FAIL_13_2 ; If not set, then fail stc mov word [00070],01234 ; Test carry flag mov ax,05678 adc ax,word [00070] ; Carry should NOT be set jc FAIL_13_2 ; If set, then fail ; 0x14 - ADC AL,IMMED8 ; ############################################################ TEST_14_0: ; ADC AL,IMMED8 - Test data values from registers ; Tests with Carry Bit CLEARED ; ---------------------------- clc mov ax,000FF lock adc al,000 cmp ax,000FF jne FAIL_14_0 clc mov ax,00000 adc al,000 cmp ax,00000 jne FAIL_14_0 clc mov ax,012FF adc al,0FF cmp ax , 012FE jne FAIL_14_0 ; Tests with Carry Bit SET ; ------------------------ stc mov ax,012FF lock adc al,001 cmp ax,01201 jne FAIL_14_0 stc mov ax,01200 adc al,000 cmp ax,01201 jne FAIL_14_0 stc mov ax,034FF adc al,0FF cmp ax , 034FF jne FAIL_14_0 jmp TEST_14_1 FAIL_14_0: mov dx,00034 ; Print a 4 mov ax,00202 int 021 ; ################## TEST_14_1: ; ADC AL,IMMED8 - Test flags ; Overflow, Sign, Zero, Parity, AUX, Carry ; Tests with Carry Bit CLEARED ; ---------------------------- clc mov ax,0007B ; Test overflow flag adc al,036 ; Overflow should be set jno FAIL_14_1 ; If not set, then fail clc mov ax,037B1 ; Test overflow flag adc al,037 ; Overflow should NOT be set jno PASS_14_1 ; If not set, then we passed jmp FAIL_14_1 PASS_14_1: clc mov ax,0FFFF ; Test sign flag adc al,0FF ; sign should be set jns FAIL_14_1 ; If not set, then fail clc mov ax,09911 ; Test sign flag adc al,022 ; sign should NOT be set js FAIL_14_1 ; If set then we fail clc mov ax,00000 ; Test zero flag adc al,000 ; zero should be set jne FAIL_14_1 ; If not set then we fail clc mov ax,00001 ; Test zero flag adc al,012 ; zero should NOT be set je FAIL_14_1 ; If set then we fail clc mov ax,01235 ; Test parity flag adc al,012 ; parity should be set jnp FAIL_14_1 ; If not set then we fail clc mov ax,01234 ; Test parity flag adc al,012 ; parity should NOT be set jp FAIL_14_1 ; If set then we fail clc mov ax,0FFFF ; Test carry flag adc al,001 ; carry should be set jnc FAIL_14_1 ; If not set then we fail clc mov ax,01234 ; Test carry flag adc al,012 ; carry should NOT be set jc FAIL_14_1 ; If set then we fail jmp TEST_14_B FAIL_14_1: mov dx,00034 ; Print a 4 mov ax,00202 int 021 TEST_14_B: ; Tests with Carry Bit SET ; ------------------------ stc mov ax,0007B ; Test overflow flag adc al,036 ; Overflow should be set jno FAIL_14_2 ; If not set, then fail stc mov ax,037B1 ; Test overflow flag adc al,037 ; Overflow should NOT be set jno PASS_14_2 ; If not set, then we passed jmp FAIL_14_2 PASS_14_2: stc mov ax,0FFFF ; Test sign flag adc al,0FF ; sign should be set jns FAIL_14_2 ; If not set, then fail stc mov ax,09911 ; Test sign flag adc al,022 ; sign should NOT be set js FAIL_14_2 ; If set then we fail stc mov ax,000FF ; Test zero flag adc al,000 ; zero should be set jne FAIL_14_2 ; If not set then we fail stc mov ax,00001 ; Test zero flag adc al,012 ; zero should NOT be set je FAIL_14_2 ; If set then we fail stc mov ax,01235 ; Test parity flag adc al,012 ; parity should be set jnp FAIL_14_2 ; If not set then we fail stc mov ax,01234 ; Test parity flag adc al,014 ; parity should NOT be set jp FAIL_14_2 ; If set then we fail stc mov ax,0FFFF ; Test carry flag adc al,001 ; carry should be set jnc FAIL_14_2 ; If not set then we fail stc mov ax,01234 ; Test carry flag adc al,012 ; carry should NOT be set jc FAIL_14_2 ; If set then we fail jmp TEST_15_0 FAIL_14_2: mov dx,00034 ; Print a 4 mov ax,00202 int 021 ; 0x15 - ADC AX,IMMED16 ; TEST_15_0: ; ADC AX,IMMED16 - Test data values from registers ; Tests with Carry Bit CLEARED ; ---------------------------- clc mov ax,0FFFF lock adc ax,00000 cmp ax,0FFFF jne FAIL_15_0 clc mov ax,00000 adc ax,00000 cmp ax,00000 jne FAIL_15_0 clc mov ax,01200 adc ax,00034 cmp ax,01234 jne FAIL_15_0 jmp TEST_15_A FAIL_15_0: mov dx,00035 ; Print a 5 mov ax,00202 int 021 jmp TEST_15_1 TEST_15_A: ; Tests with Carry Bit SET ; ------------------------ stc mov ax,0FFFF lock adc ax,00000 cmp ax,00000 jne FAIL_15_A stc mov ax,00000 adc ax,00000 cmp ax,00001 jne FAIL_15_A stc mov ax,01200 adc ax,00034 cmp ax,01235 jne FAIL_15_A jmp TEST_15_1 FAIL_15_A: mov dx,00035 ; Print a 5 mov ax,00202 int 021 ; ################## TEST_15_1: ; ADC AX,IMMED16 - Test flags ; Overflow, Sign, Zero, Parity, AUX, Carry ; Tests with Carry Bit CLEARED ; ---------------------------- clc mov ax,07FFF ; Test overflow flag adc ax,01234 ; Overflow should be set jno FAIL_15_1 ; If not set, then fail clc mov ax,01212 ; Test overflow flag adc ax,03434 ; Overflow should NOT be set jno PASS_15_1 ; If not set, then we passed jmp FAIL_15_1 PASS_15_1: clc mov ax,00001 ; Test sign flag adc ax,07FFF ; sign should be set jns FAIL_15_1 ; If not set, then fail clc mov ax,01234 ; Test sign flag adc ax,04321 ; sign should NOT be set js FAIL_15_1 ; If set then we fail clc mov ax,00000 ; Test zero flag adc ax,00000 ; zero should be set jne FAIL_15_1 ; If not set then we fail clc mov ax,00001 ; Test zero flag adc ax,01234 ; zero should NOT be set je FAIL_15_1 ; If set then we fail clc mov ax,04444 ; Test parity flag adc ax,01111 ; parity should be set jnp FAIL_15_1 ; If not set then we fail clc mov ax,01111 ; Test parity flag adc ax,01234 ; parity should NOT be set jp FAIL_15_1 ; If set then we fail clc mov ax,0FFFF ; Test carry flag adc ax,00001 ; carry should be set jnc FAIL_15_1 ; If not set then we fail clc mov ax,01234 ; Test carry flag adc ax,05678 ; carry should NOT be set jc FAIL_15_1 ; If set then we fail jmp TEST_15_2 FAIL_15_1: mov dx,00035 ; Print a 5 mov ax,00202 int 021 TEST_15_2: ; Tests with Carry Bit SET ; ------------------------ stc mov ax,07FFF ; Test overflow flag adc ax,01234 ; Overflow should be set jno FAIL_15_2 ; If not set, then fail stc mov ax,01212 ; Test overflow flag adc ax,03434 ; Overflow should NOT be set jno PASS_15_2 ; If not set, then we passed jmp FAIL_15_2 PASS_15_2: stc mov ax,00001 ; Test sign flag adc ax,07FFF ; sign should be set jns FAIL_15_2 ; If not set, then fail stc mov ax,01234 ; Test sign flag adc ax,04321 ; sign should NOT be set js FAIL_15_2 ; If set then we fail stc mov ax,0FFFF ; Test zero flag adc ax,00000 ; zero should be set jne FAIL_15_2 ; If not set then we fail stc mov ax,00001 ; Test zero flag adc ax,01234 ; zero should NOT be set je FAIL_15_2 ; If set then we fail stc mov ax,04444 ; Test parity flag adc ax,01111 ; parity should be set jnp FAIL_15_2 ; If not set then we fail stc mov ax,01111 ; Test parity flag adc ax,01234 ; parity should NOT be set jp FAIL_15_2 ; If set then we fail stc mov ax,0FFFF ; Test carry flag adc ax,00001 ; carry should be set jnc FAIL_15_2 ; If not set then we fail stc mov ax,01234 ; Test carry flag adc ax,01234 ; carry should NOT be set jc FAIL_15_2 ; If set then we fail jmp TEST_16_0 FAIL_15_2: mov dx,00035 ; Print a 5 mov ax,00202 int 021 ; 0x16 - PUSH SS ; ############################################################ TEST_16_0: mov ax,01234 mov ss,ax lock push ss pop bx cmp ax,bx jne FAIL_16_0 jmp TEST_17_0 FAIL_16_0: mov dx,00036 ; Print a 6 mov ax,00202 int 021 ; 0x17 - POP SS ; ############################################################ TEST_17_0: mov ax,0ABCD push ax lock pop ss mov bx,ss cmp ax,bx jne FAIL_17_0 jmp TEST_18_0 FAIL_17_0: mov dx,00037 ; Print a 7 mov ax,00202 int 021 ; 0x18 - SBB REG8/MEM8,REG8 ; ############################################################ TEST_18_0: ; SBB MEM8,REG8 - Test data values from memory ; Tests with Carry Bit CLEARED ; ---------------------------- clc mov byte [00050],000 mov ax,000FF lock sbb [00050],al ; test lock prefix cmp byte [00050],001 jne FAIL_18_0 clc mov byte [00050],000 mov ax,00000 sbb [00050],al cmp byte [00050],000 jne FAIL_18_0 clc mov byte es:[00052],011 ; test segment override mov ax,00022 sbb es:[00052],al cmp byte es:[00052],0EF jne FAIL_18_0 clc mov byte [00053],0FF mov ax,000FF sbb [00053],al cmp byte [00053],000 jne FAIL_18_0 jmp TEST_18_1 FAIL_18_0: mov dx,00038 ; Print a 8 mov ax,00202 int 021 ; ################## ; Tests with Carry Bit SET ; ------------------------ TEST_18_1: stc mov byte [00050],000 mov ax,000FF lock sbb [00050],al ; test lock prefix cmp byte [00050],000 jne FAIL_18_1 stc mov byte [00050],000 mov ax,00000 sbb [00050],al cmp byte [00050],0FF jne FAIL_18_1 stc mov byte es:[00052],011 ; test segment override mov ax,00022 sbb es:[00052],al cmp byte es:[00052],0EE jne FAIL_18_1 stc mov byte [00053],0FF mov ax,000FF sbb [00053],al cmp byte [00053],0FF jne FAIL_18_1 jmp TEST_18_2 FAIL_18_1: mov dx,00038 ; Print a 8 mov ax,00202 int 021 ; ################## TEST_18_2: ; SBB MEM8,REG8 - Test flags ; Overflow, Sign, Zero, Parity, AUX, Carry ; Tests with Carry Bit CLEARED ; ---------------------------- clc mov byte [00054],045 mov ax,0DEAD sbb [00054],al ; Overflow should be set jno FAIL_18_2 ; If not set, then fail clc mov byte [00055],078 mov ax,01234 sbb [00055],al ; Overflow should NOT be set jno PASS_18_2 ; If not set, then we passed jmp FAIL_18_2 ; If set then we fail PASS_18_2: clc mov byte [00056],000 mov ax,00001 sbb [00056],al ; sign should be set jns FAIL_18_2 ; If not set, then fail clc mov byte [00057],011 mov ax,00002 sbb [00057],al ; sign should NOT be set js FAIL_18_2 ; If set then we fail clc mov byte [00058],034 mov ax,00034 sbb [00058],al ; zero should be set jne FAIL_18_2 ; If not set then we fail jmp PASS_18_3 FAIL_18_2: mov dx,00038 ; Print a 8 mov ax,00202 int 021 jmp TEST_19_0 PASS_18_3: clc mov byte [00050],000 mov ax,00022 sbb [00050],al ; zero should NOT be set je FAIL_18_2 ; If set then we fail clc mov byte [00050],012 mov ax,00035 sbb [00050],al ; parity should be set jnp FAIL_18_2 ; If not set then we fail clc mov byte [00050],014 mov ax,00034 sbb [00050],al ; parity should NOT be set jp FAIL_18_2 ; If set then we fail clc mov byte [00050],0FE mov ax,000FF sbb [00050],al ; carry should be set jnc FAIL_18_2 ; If not set then we fail clc mov byte [00050],012 mov ax,00012 sbb [00050],al ; carry should NOT be set jc FAIL_18_2 ; If set then we fail ; Tests with Carry Bit SET ; ------------------------ stc mov byte [00054],080 mov ax,00011 sbb [00054],al ; Overflow should be set jno FAIL_18_3 ; If not set, then fail stc mov byte [00055],000 mov ax,00002 sbb [00055],al ; Overflow should NOT be set jno PASS_18_4 ; If not set, then we passed jmp FAIL_18_3 ; If set then we fail PASS_18_4: stc mov byte [00056],0FF mov ax,000FF sbb [00056],al ; sign should be set jns FAIL_18_3 ; If not set, then fail stc mov byte [00057],044 mov ax,00022 sbb [00057],al ; sign should NOT be set js FAIL_18_3 ; If set then we fail stc mov byte [00058],001 mov ax,00000 sbb [00058],al ; zero should be set jne FAIL_18_3 ; If not set then we fail jmp PASS_18_5 FAIL_18_3: mov dx,00038 ; Print a 8 mov ax,00202 int 021 jmp TEST_19_0 PASS_18_5: stc mov byte [00050],000 mov ax,00001 sbb [00050],al ; zero should NOT be set je FAIL_18_3 ; If set then we fail stc mov byte [00050],012 mov ax,00034 sbb [00050],al ; parity should be set jnp FAIL_18_3 ; If not set then we fail stc mov byte [00050],012 mov ax,00035 sbb [00050],al ; parity should NOT be set jp FAIL_18_3 ; If set then we fail stc mov byte [00050],0FF mov ax,000FF sbb [00050],al ; carry should be set jnc FAIL_18_3 ; If not set then we fail stc mov byte [00050],066 mov ax,00022 sbb [00050],al ; carry should NOT be set jc FAIL_18_3 ; If set then we fail ; 0x19 - SBB REG16/MEM16,REG16 ; ############################################################ TEST_19_0: ; SBB MEM16,REG16 - Test data values from memory ; Tests with Carry Bit CLEARED ; ---------------------------- clc mov word [00060],00000 mov ax,000FF lock sbb [00060],ax cmp word [00060],0FF01 jne FAIL_19_0 clc mov word [00060],00000 mov ax,00000 sbb [00060],ax cmp word [00060],00000 jne FAIL_19_0 clc mov word es:[00060],03333 mov ax,01111 sbb es:[00060],ax cmp word es:[00060],02222 jne FAIL_19_0 clc mov word [00060],05678 mov ax,05678 sbb [00060],ax cmp byte [00060],00000 jne FAIL_19_0 jmp TEST_19_B FAIL_19_0: mov dx,00039 ; Print a 9 mov ax,00202 int 021 jmp TEST_19_1 TEST_19_B: ; Tests with Carry Bit SET ; ------------------------ stc mov word [00060],00000 mov ax,000FF lock sbb [00060],ax cmp word [00060],0FF00 jne FAIL_19_0 stc mov word [00060],00000 mov ax,00000 sbb [00060],ax cmp word [00060],0FFFF jne FAIL_19_0 stc mov word es:[00060],03333 mov ax,01111 sbb es:[00060],ax cmp word es:[00060],02221 jne FAIL_19_0 stc mov word [00060],01234 mov ax,01234 sbb [00060],ax cmp byte [00060],0FFFF jne FAIL_19_0 ; ################## TEST_19_1: ; SBB MEM16,REG16 - Test flags ; Overflow, Sign, Zero, Parity, AUX, Carry ; Tests with Carry Bit SET ; ------------------------ stc mov word [00050],08000 mov ax,01234 sbb [00050],ax ; Overflow should be set jno FAIL_19_1 ; If not set, then fail stc mov word [00050],01212 mov ax,03434 sbb [00050],ax ; Overflow should NOT be set jno PASS_19_1 ; If not set, then we passed jmp FAIL_19_1 ; If set then we fail PASS_19_1: stc mov word [00050],00001 mov ax,07FFF sbb [00050],ax ; sign should be set jns FAIL_19_1 ; If not set, then fail stc mov word [00050],01234 mov ax,0005A sbb [00050],ax ; sign should NOT be set js FAIL_19_1 ; If set then we fail stc mov word [00050],00001 mov ax,00000 sbb [00050],ax ; zero should be set jne FAIL_19_1 ; If not set then we fail jmp PASS_19_2 FAIL_19_1: mov dx,00039 ; Print a 9 mov ax,00202 int 021 jmp TEST_1A_0 PASS_19_2: stc mov word [00050],01111 mov ax,02222 sbb [00050],ax ; zero should NOT be set je FAIL_19_1 ; If set then we fail stc mov word [00050],04444 mov ax,01110 sbb [00050],ax ; parity should be set jnp FAIL_19_1 ; If not set then we fail stc mov word [00050],01111 mov ax,01234 sbb [00050],ax ; parity should NOT be set jp FAIL_19_1 ; If set then we fail stc mov word [00050],00001 mov ax,00077 sbb [00050],ax ; carry should be set jnc FAIL_19_1 ; If not set then we fail stc mov word [00050],01234 mov ax,00055 sbb [00050],ax ; carry should NOT be set jc FAIL_19_1 ; If set then we fail ; Tests with Carry Bit CLEARED ; ------------------------ clc mov word [00050],02222 mov ax,08111 sbb [00050],ax ; Overflow should be set jno FAIL_19_2 ; If not set, then fail clc mov word [00050],01212 mov ax,00022 sbb [00050],ax ; Overflow should NOT be set jno PASS_19_3 ; If not set, then we passed jmp FAIL_19_2 ; If set then we fail PASS_19_3: clc mov word [00050],0FFFF mov ax,00001 sbb [00050],ax ; sign should be set jns FAIL_19_2 ; If not set, then fail clc mov word [00050],01234 mov ax,0002 sbb [00050],ax ; sign should NOT be set js FAIL_19_2 ; If set then we fail clc mov word [00050],00001 mov ax,00001 sbb [00050],ax ; zero should be set jne FAIL_19_2 ; If not set then we fail jmp PASS_19_4 FAIL_19_2: mov dx,00039 ; Print a 9 mov ax,00202 int 021 jmp TEST_1A_0 PASS_19_4: clc mov word [00050],01111 mov ax,02222 sbb [00050],ax ; zero should NOT be set je FAIL_19_2 ; If set then we fail clc mov word [00050],04444 mov ax,01111 sbb [00050],ax ; parity should be set jnp FAIL_19_2 ; If not set then we fail clc mov word [00050],01111 mov ax,00010 sbb [00050],ax ; parity should NOT be set jp FAIL_19_2 ; If set then we fail clc mov word [00050],00003 mov ax,08FFF sbb [00050],ax ; carry should be set jnc FAIL_19_2 ; If not set then we fail clc mov word [00050],01234 mov ax,00002 sbb [00050],ax ; carry should NOT be set jc FAIL_19_2 ; If set then we fail ; 0x1A - SBB REG8,MEM8/REG8 ; ############################################################ TEST_1A_0: ; SBB REG8,REG8 - Test data values from registers ; Tests with Carry Bit CLEARED ; ------------------------ clc mov ax,000FF lock sbb ah,al cmp ax,001FF jne FAIL_1A_0 clc mov ax,00000 sbb ah,al cmp ax,00000 jne FAIL_1A_0 clc mov ax,01234 sbb ah,al cmp ax , 0DE34 jne FAIL_1A_0 ; Tests with Carry Bit SET ; ------------------------ stc mov ax,0ABCD lock sbb ah,al cmp ax,0DDCD jne FAIL_1A_0 stc mov ax,00000 sbb ah,al cmp ax,0FF00 jne FAIL_1A_0 stc mov ax,0FEFF sbb ah,al cmp ax , 0FEFF jne FAIL_1A_0 jmp TEST_1A_1 FAIL_1A_0: mov dx,00041 ; Print a A mov ax,00202 int 021 ; ################## TEST_1A_1: ; SBB MEM8,REG8 - Test data values from memory ; Tests with Carry Bit SET ; ------------------------ stc mov byte [00050],0CC mov ax,00025 sbb al,[00050] cmp al,058 jne FAIL_1A_1 stc mov byte [00050],000 mov ax,00000 sbb al,[00050] cmp al,0FF jne FAIL_1A_1 stc mov byte es:[00050],066 mov ax,00011 sbb al,es:[00050] cmp al,0AA jne FAIL_1A_1 stc mov byte [00050],0FF mov ax,000FF sbb al,[00050] cmp al,0FF jne FAIL_1A_1 ; Tests with Carry Bit CLEARED ; ---------------------------- clc mov byte [00050],000 mov ax,000FF sbb al,[00050] cmp al,0FF jne FAIL_1A_1 clc mov byte [00050],000 mov ax,00000 sbb al,[00050] cmp al,000 jne FAIL_1A_1 clc mov byte es:[00050],011 mov ax,00077 sbb al,es:[00050] cmp al,066 jne FAIL_1A_1 clc mov byte [00050],0FF mov ax,000FF sbb al,[00050] cmp al,000 jne FAIL_1A_1 jmp TEST_1A_2 FAIL_1A_1: mov dx,00041 ; Print a A mov ax,00202 int 021 ; ################## TEST_1A_2: ; SBB REG8,REG8 - Test flags ; Overflow, Sign, Zero, Parity, AUX, Carry ; Tests with Carry Bit CLEARED ; ---------------------------- clc mov ax,08111 ; Test overflow flag sbb ah,al ; Overflow should be set jno FAIL_1A_2 ; If not set, then fail clc mov ax,01234 ; Test overflow flag sbb ah,al ; Overflow should NOT be set jno PASS_1A_2 ; If not set, then we passed jmp FAIL_1A_2 ; If set then we fail PASS_1A_2: clc mov dx,0FF01 ; Test sign flag sbb dh,dl ; sign should be set jns FAIL_1A_2 ; If not set, then fail clc mov cx,03322 ; Test sign flag sbb ch,cl ; sign should NOT be set js FAIL_1A_2 ; If set then we fail clc mov cx,05555 ; Test zero flag sbb ch,cl ; zero should be set jne FAIL_1A_2 ; If not set then we fail clc mov cx,09988 ; Test zero flag sbb ch,cl ; zero should NOT be set je FAIL_1A_2 ; If set then we fail clc mov ax,01235 ; Test parity flag sbb ah,al ; parity should be set jnp FAIL_1A_2 ; If not set then we fail clc mov cx,01233 ; Test parity flag sbb ch,cl ; parity should NOT be set jp FAIL_1A_2 ; If set then we fail clc mov ax,0FCFF ; Test carry flag sbb ah,al ; carry should be set jnc FAIL_1A_2 ; If not set then we fail clc mov cx,04321 ; Test carry flag sbb ch,cl ; carry should NOT be set jc FAIL_1A_2 ; If set then we fail jmp TEST_1A_3 FAIL_1A_2: mov dx,00041 ; Print a A mov ax,00202 int 021 ; Tests with Carry Bit SET ; ------------------------ TEST_1A_3: stc mov ax,08111 ; Test overflow flag sbb ah,al ; Overflow should be set jno FAIL_1A_3 ; If not set, then fail stc mov ax,01234 ; Test overflow flag sbb ah,al ; Overflow should NOT be set jno PASS_1A_3 ; If not set, then we passed jmp FAIL_1A_3 ; If set then we fail PASS_1A_3: stc mov dx,0FFFF ; Test sign flag sbb dl,dh ; sign should be set jns FAIL_1A_3 ; If not set, then fail stc mov cx,04321 ; Test sign flag sbb ch,cl ; sign should NOT be set js FAIL_1A_3 ; If set then we fail stc mov cx,00100 ; Test zero flag sbb ch,cl ; zero should be set jne FAIL_1A_3 ; If not set then we fail stc mov cx,04321 ; Test zero flag sbb ch,cl ; zero should NOT be set je FAIL_1A_3 ; If set then we fail stc mov ax,01234 ; Test parity flag sbb ah,al ; parity should be set jnp FAIL_1A_3 ; If not set then we fail stc mov cx,01237 ; Test parity flag sbb ch,cl ; parity should NOT be set jp FAIL_1A_3 ; If set then we fail stc mov ax,0FFFF ; Test carry flag sbb ah,al ; carry should be set jnc FAIL_1A_3 ; If not set then we fail stc mov cx,08765 ; Test carry flag sbb ch,cl ; carry should NOT be set jc FAIL_1A_3 ; If set then we fail jmp TEST_1B_0 FAIL_1A_3: mov dx,00041 ; Print a A mov ax,00202 int 021 ; 0x1B - SBB REG16,MEM16/REG16 ; ############################################################ TEST_1B_0: ; SBB MEM16,REG16 - Test data values from memory ; Tests with Carry Bit CLEARED ; ---------------------------- clc mov word [00055],00000 mov ax,0FFFF sbb ax,[00055] cmp ax,0FFFF jne FAIL_1B_0 clc mov word [00057],00000 mov ax,00000 sbb ax,[00057] cmp ax,00000 jne FAIL_1B_0 clc mov word es:[00059],06666 mov ax,01111 sbb ax,es:[00059] cmp ax,0AAAB jne FAIL_1B_0 jmp TEST_1B_B FAIL_1B_0: mov dx,00042 ; Print a B mov ax,00202 int 021 TEST_1B_B: clc mov word [00060],0FFFF mov ax,00001 sbb ax,[00060] cmp ax,00002 jne FAIL_1B_B ; Tests with Carry Bit SET ; ------------------------ stc mov word [00055],00000 mov ax,0FFFF sbb ax,[00055] cmp ax,0FFFE jne FAIL_1B_B stc mov word [00057],00000 mov ax,00000 sbb ax,[00057] cmp ax,0FFFF jne FAIL_1B_B stc mov word es:[00059],06666 mov ax,01111 sbb ax,es:[00059] cmp ax,0AAAA jne FAIL_1B_B stc mov word [00060],0FFFF mov ax,0FFFF sbb ax,[00060] cmp ax,0FFFF jne FAIL_1B_B jmp TEST_1B_1 FAIL_1B_B: mov dx,00042 ; Print a B mov ax,00202 int 021 ; ################## TEST_1B_1: ; SBB REG16,MEM16 - Test flags ; Overflow, Sign, Zero, Parity, AUX, Carry ; Tests with Carry Bit CLEARED ; ---------------------------- clc mov word [00070],05678 ; Test overflow flag mov ax,08000 sbb ax,word [00070] ; Overflow should be set jno FAIL_1B_1 ; If not set, then fail clc mov word [00070],05678 ; Test overflow flag mov ax,01234 sbb ax,word [00070] ; Overflow should NOT be set jno PASS_1B_1 ; If not set, then we passed jmp FAIL_1B_1 ; If set then we fail PASS_1B_1: clc mov word [00070],00001 ; Test sign flag mov ax,0FFFF sbb ax,word [00070] ; Sign should be set jns FAIL_1B_1 ; If not set, then fail clc mov word [00070],01234 ; Test sign flag mov ax,04321 sbb ax,word [00070] ; Sign should NOT be set js FAIL_1B_1 ; If set, then fail clc mov word [00070],00034 ; Test zero flag mov ax,00034 sbb ax,word [00070] ; Zero should be set jne FAIL_1B_1 ; If not set, then fail clc mov word [00070],00123 ; Test zero flag mov ax,00000 sbb ax,word [00070] ; Zero should NOT be set je FAIL_1B_1 ; If set, then fail jmp TEST_1B_2 FAIL_1B_1: mov dx,00042 ; Print a B mov ax,00202 int 021 TEST_1B_2: clc mov word [00070],01111 ; Test parity flag mov ax,04444 sbb ax,word [00070] ; Parity should be set jnp FAIL_1B_2 ; If not set, then fail clc mov word [00070],01110 ; Test parity flag mov ax,04444 sbb ax,word [00070] ; Parity should NOT be set jp FAIL_1B_2 ; If set, then fail clc mov word [00070],0FFFF ; Test carry flag mov ax,00001 sbb ax,word [00070] ; Carry should be set jnc FAIL_1B_2 ; If not set, then fail clc mov word [00070],01234 ; Test carry flag mov ax,05678 sbb ax,word [00070] ; Carry should NOT be set jc FAIL_1B_2 ; If set, then fail ; Tests with Carry Bit SET ; ------------------------ stc mov word [00070],05678 ; Test overflow flag mov ax,08000 sbb ax,word [00070] ; Overflow should be set jno FAIL_1B_2 ; If not set, then fail stc mov word [00070],05678 ; Test overflow flag mov ax,01234 sbb ax,word [00070] ; Overflow should NOT be set jno PASS_1B_2 ; If not set, then we passed jmp FAIL_1B_2 ; If set then we fail PASS_1B_2: stc mov word [00070],00000 ; Test sign flag mov ax,00000 sbb ax,word [00070] ; Sign should be set jns FAIL_1B_2 ; If not set, then fail stc mov word [00070],00001 ; Test sign flag mov ax,08001 sbb ax,word [00070] ; Sign should NOT be set js FAIL_1B_2 ; If set, then fail jmp TEST_1B_C FAIL_1B_2: mov dx,00042 ; Print a B mov ax,00202 int 021 jmp TEST_1C_0 TEST_1B_C: stc mov word [00070],00000 ; Test zero flag mov ax,00001 sbb ax,word [00070] ; Zero should be set jne FAIL_1B_2 ; If not set, then fail stc mov word [00070],00007 ; Test zero flag mov ax,00007 sbb ax,word [00070] ; Zero should NOT be set je FAIL_1B_2 ; If set, then fail jmp TEST_1B_3 TEST_1B_3: stc mov word [00070],01113 ; Test parity flag mov ax,04444 sbb ax,word [00070] ; Parity should be set jnp FAIL_1B_2 ; If not set, then fail stc mov word [00070],01111 ; Test parity flag mov ax,04444 sbb ax,word [00070] ; Parity should NOT be set jp FAIL_1B_2 ; If set, then fail stc mov word [00070],00001 ; Test carry flag mov ax,00001 sbb ax,word [00070] ; Carry should be set jnc FAIL_1B_2 ; If not set, then fail stc mov word [00070],01234 ; Test carry flag mov ax,05678 sbb ax,word [00070] ; Carry should NOT be set jc FAIL_1B_2 ; If set, then fail ; 0x1C - SBB AL,IMMED8 ; ############################################################ TEST_1C_0: ; SBB AL,IMMED8 - Test data values from registers ; Tests with Carry Bit CLEARED ; ---------------------------- clc mov ax,000FF lock sbb al,000 cmp ax,000FF jne FAIL_1C_0 clc mov ax,00000 sbb al,000 cmp ax,00000 jne FAIL_1C_0 clc mov ax,01234 sbb al,089 cmp ax , 012AB jne FAIL_1C_0 ; Tests with Carry Bit SET ; ------------------------ stc mov ax,000FF lock sbb al,000 cmp ax,000FE jne FAIL_1C_0 stc mov ax,01200 sbb al,000 cmp ax,012FF jne FAIL_1C_0 stc mov ax,03477 sbb al,011 cmp ax,03465 jne FAIL_1C_0 jmp TEST_1C_1 FAIL_1C_0: mov dx,00043 ; Print a C mov ax,00202 int 021 ; ################## TEST_1C_1: ; SBB AL,IMMED8 - Test flags ; Overflow, Sign, Zero, Parity, AUX, Carry ; Tests with Carry Bit CLEARED ; ---------------------------- clc mov ax,01234 ; Test overflow flag sbb al,080 ; Overflow should be set jno FAIL_1C_1 ; If not set, then fail clc mov ax,03711 ; Test overflow flag sbb al,011 ; Overflow should NOT be set jno PASS_1C_1 ; If not set, then we passed jmp FAIL_1C_1 PASS_1C_1: clc mov ax,01200 ; Test sign flag sbb al,001 ; sign should be set jns FAIL_1C_1 ; If not set, then fail clc mov ax,09980 ; Test sign flag sbb al,001 ; sign should NOT be set js FAIL_1C_1 ; If set then we fail clc mov ax,00056 ; Test zero flag sbb al,056 ; zero should be set jne FAIL_1C_1 ; If not set then we fail clc mov ax,00099 ; Test zero flag sbb al,088 ; zero should NOT be set je FAIL_1C_1 ; If set then we fail clc mov ax,01233 ; Test parity flag sbb al,000 ; parity should be set jnp FAIL_1C_1 ; If not set then we fail clc mov ax,01233 ; Test parity flag sbb al,001 ; parity should NOT be set jp FAIL_1C_1 ; If set then we fail clc mov ax,00000 ; Test carry flag sbb al,001 ; carry should be set jnc FAIL_1C_1 ; If not set then we fail clc mov ax,01234 ; Test carry flag sbb al,012 ; carry should NOT be set jc FAIL_1C_1 ; If set then we fail jmp TEST_1C_B FAIL_1C_1: mov dx,00043 ; Print a C mov ax,00202 int 021 TEST_1C_B: ; Tests with Carry Bit SET ; ------------------------ stc mov ax,00080 ; Test overflow flag sbb al,000 ; Overflow should be set jno FAIL_1C_2 ; If not set, then fail stc mov ax,03733 ; Test overflow flag sbb al,011 ; Overflow should NOT be set jno PASS_1C_2 ; If not set, then we passed jmp FAIL_1C_2 PASS_1C_2: stc mov ax,00000 ; Test sign flag sbb al,000 ; sign should be set jns FAIL_1C_2 ; If not set, then fail stc mov ax,09980 ; Test sign flag sbb al,000 ; sign should NOT be set js FAIL_1C_2 ; If set then we fail stc mov ax,00001 ; Test zero flag sbb al,000 ; zero should be set jne FAIL_1C_2 ; If not set then we fail stc mov ax,00034 ; Test zero flag sbb al,034 ; zero should NOT be set je FAIL_1C_2 ; If set then we fail stc mov ax,01244 ; Test parity flag sbb al,010 ; parity should be set jnp FAIL_1C_2 ; If not set then we fail stc mov ax,01244 ; Test parity flag sbb al,011 ; parity should NOT be set jp FAIL_1C_2 ; If set then we fail stc mov ax,00000 ; Test carry flag sbb al,000 ; carry should be set jnc FAIL_1C_2 ; If not set then we fail stc mov ax,05555 ; Test carry flag sbb al,022 ; carry should NOT be set jc FAIL_1C_2 ; If set then we fail jmp TEST_1D_0 FAIL_1C_2: mov dx,00043 ; Print a C mov ax,00202 int 021 ; 0x1D - SBB AX,IMMED16 ; TEST_1D_0: ; SBB AX,IMMED16 - Test data values from registers ; Tests with Carry Bit CLEARED ; ---------------------------- clc mov ax,0FFFF lock sbb ax,00000 cmp ax,0FFFF jne FAIL_1D_0 clc mov ax,00000 sbb ax,00000 cmp ax,00000 jne FAIL_1D_0 clc mov ax,06666 sbb ax,01111 cmp ax,05555 jne FAIL_1D_0 jmp TEST_1D_A FAIL_1D_0: mov dx,00044 ; Print a D mov ax,00202 int 021 jmp TEST_1D_1 TEST_1D_A: ; Tests with Carry Bit SET ; ------------------------ stc mov ax,06666 lock sbb ax,01111 cmp ax,05554 jne FAIL_1D_A stc mov ax,00000 sbb ax,00000 cmp ax,0FFFF jne FAIL_1D_A stc mov ax,0FFFF sbb ax,0FFFF cmp ax,0FFFF jne FAIL_1D_A jmp TEST_1D_1 FAIL_1D_A: mov dx,00044 ; Print a D mov ax,00202 int 021 ; ################## TEST_1D_1: ; SBB AX,IMMED16 - Test flags ; Overflow, Sign, Zero, Parity, AUX, Carry ; Tests with Carry Bit CLEARED ; ---------------------------- clc mov ax,08000 ; Test overflow flag sbb ax,00001 ; Overflow should be set jno FAIL_1D_1 ; If not set, then fail clc mov ax,04444 ; Test overflow flag sbb ax,03333 ; Overflow should NOT be set jno PASS_1D_1 ; If not set, then we passed jmp FAIL_1D_1 PASS_1D_1: clc mov ax,00000 ; Test sign flag sbb ax,00001 ; sign should be set jns FAIL_1D_1 ; If not set, then fail clc mov ax,01234 ; Test sign flag sbb ax,00002 ; sign should NOT be set js FAIL_1D_1 ; If set then we fail clc mov ax,01234 ; Test zero flag sbb ax,01234 ; zero should be set jne FAIL_1D_1 ; If not set then we fail clc mov ax,01234 ; Test zero flag sbb ax,00011 ; zero should NOT be set je FAIL_1D_1 ; If set then we fail clc mov ax,04444 ; Test parity flag sbb ax,01111 ; parity should be set jnp FAIL_1D_1 ; If not set then we fail clc mov ax,04444 ; Test parity flag sbb ax,01110 ; parity should NOT be set jp FAIL_1D_1 ; If set then we fail clc mov ax,00000 ; Test carry flag sbb ax,00001 ; carry should be set jnc FAIL_1D_1 ; If not set then we fail clc mov ax,01234 ; Test carry flag sbb ax,00000 ; carry should NOT be set jc FAIL_1D_1 ; If set then we fail jmp TEST_1D_2 FAIL_1D_1: mov dx,00044 ; Print a D mov ax,00202 int 021 TEST_1D_2: ; Tests with Carry Bit SET ; ------------------------ stc mov ax,08000 ; Test overflow flag sbb ax,00000 ; Overflow should be set jno FAIL_1D_2 ; If not set, then fail stc mov ax,01212 ; Test overflow flag sbb ax,03434 ; Overflow should NOT be set jno PASS_1D_2 ; If not set, then we passed jmp FAIL_1D_2 PASS_1D_2: stc mov ax,08002 ; Test sign flag sbb ax,00001 ; sign should be set jns FAIL_1D_2 ; If not set, then fail stc mov ax,08000 ; Test sign flag sbb ax,00000 ; sign should NOT be set js FAIL_1D_2 ; If set then we fail stc mov ax,00002 ; Test zero flag sbb ax,00001 ; zero should be set jne FAIL_1D_2 ; If not set then we fail stc mov ax,00008 ; Test zero flag sbb ax,00005 ; zero should NOT be set je FAIL_1D_2 ; If set then we fail stc mov ax,04444 ; Test parity flag sbb ax,01110 ; parity should be set jnp FAIL_1D_2 ; If not set then we fail stc mov ax,04444 ; Test parity flag sbb ax,01111 ; parity should NOT be set jp FAIL_1D_2 ; If set then we fail stc mov ax,00000 ; Test carry flag sbb ax,00000 ; carry should be set jnc FAIL_1D_2 ; If not set then we fail stc mov ax,05555 ; Test carry flag sbb ax,01111 ; carry should NOT be set jc FAIL_1D_2 ; If set then we fail jmp TEST_1E_0 FAIL_1D_2: mov dx,00044 ; Print a D mov ax,00202 int 021 ; 0x1E - PUSH DS ; ############################################################ TEST_1E_0: mov ax,01234 mov ds,ax lock push ds pop bx cmp ax,bx jne FAIL_1E_0 jmp TEST_1F_0 FAIL_1E_0: mov dx,00045 ; Print a E mov ax,00202 int 021 ; 0x1F - POP DS ; ############################################################ TEST_1F_0: mov ax,01234 push ax lock pop ds mov bx,ds cmp ax,bx jne FAIL_1F_0 jmp Z_END FAIL_1F_0: mov dx,00046 ; Print a F mov ax,00202 int 021 ; xxxxxxxxxxxxxxxxxxxxxxx ; End ; xxxxxxxxxxxxxxxxxxxxxxx Z_END: mov ax,00000 ; DOS Command=Exit int 021