;Input AX PRINT_16_HEX: PUSH DX TEST AH,#0xF0 jz NOT_FIRST_NIBBLE MOV DL,AH CALL PRINT_HIGH JMP SKIP1 NOT_FIRST_NIBBLE: TEST AH,#0x0F jz NOT_SECOND_NIBBLE SKIP1: MOV DL,AH CALL PRINT_LOW JMP SKIP2 NOT_SECOND_NIBBLE: TEST AL,#0xF0 jz NOT_THIRD_NIBBLE SKIP2: MOV DL,AL CALL PRINT_HIGH NOT_THIRD_NIBBLE: MOV DL,AL CALL PRINT_LOW PUSH AX MOV AH,#0x02 MOV DL,#0x20 INT #0x21 POP AX POP DX RET PRINT_HIGH: AND DL,#0xF0 TEST DL,#0x80 jz NOT1 OR DL,#0x08 NOT1: TEST DL,#0x40 jz NOT2 OR DL,#0x04 NOT2: TEST DL,#0x20 jz NOT3 OR DL,#0x02 NOT3: TEST DL,#0x10 jz DONE OR DL,#0x01 DONE: PRINT_LOW: PUSH AX AND DL,#0x0F CMP DL,#0x0A JNS LETTERS ADD DL,#0x30 MOV AH,#0x02 INT #0x21 POP AX RET LETTERS: ADD DL,#0x37 MOV AH,#0x02 INT #0x21 POP AX RET PRINT_0_8_HEX: MOV DL,AL PUSH AX CALL PRINT_HIGH POP AX MOV DL,AL CALL PRINT_LOW PUSH AX MOV AH,#0x02 MOV DL,#0x20 INT #0x21 POP AX RET