8086汇编语言将十进制数转化为十六进制的代码实现
时间: 2023-10-22 19:09:51 浏览: 132
汇编语言 十进制转换为十六进制数
5星 · 资源好评率100%
以下是将十进制数转化为十六进制的8086汇编代码实现:
```
MOV AX, [DECIMAL_NUM] ; 将十进制数的值存入 AX 寄存器
MOV BL, 10 ; 将 BL 寄存器值设为 10,用于取模运算
MOV CX, 0 ; 将 CX 寄存器值设为 0,用于记录十六进制数的位数
MOV BX, 0 ; 将 BX 寄存器值设为 0,用于记录每一位的值
HEX_LOOP:
DIV BL ; 将 AX 寄存器值除以 BL 寄存器值,商存入 AL,余数存入 AH
ADD AH, 30H ; 将 AH 寄存器的值加上 30H,使其变为 ASCII 码对应的数字字符
CMP AH, 3AH ; 比较 AH 寄存器的值是否大于等于 3AH
JNC HEX_LETTER ; 若大于等于 3AH,跳转至 HEX_LETTER 标志
MOV DL, AH ; 若小于 3AH,将 AH 寄存器的值存入 DL 寄存器中
JMP HEX_PRINT ; 跳转至 HEX_PRINT 标志
HEX_LETTER:
SUB AH, 7H ; 若大于等于 3AH,将 AH 寄存器的值减去 7H,即将数字转为字母
MOV DL, AH ; 将 AH 寄存器的值存入 DL 寄存器中
HEX_PRINT:
PUSH DX ; 将 DL 寄存器的值存入堆栈中
INC CX ; CX 寄存器加 1
MOV DX, 0 ; 将 DX 寄存器的值设为 0,用于准备下一次取模运算
CMP AX, 0 ; 比较 AX 寄存器的值是否为 0
JNZ HEX_LOOP ; 若不为 0,跳转至 HEX_LOOP 标志
MOV AH, 02H ; 设置 AH 寄存器值为 02H,用于调用 DOS 中断打印字符
PRINT_LOOP:
POP DX ; 弹出堆栈中的 DL 寄存器的值
INT 21H ; 调用 DOS 中断输出字符
DEC CX ; CX 寄存器减 1
CMP CX, 0 ; 比较 CX 寄存器的值是否为 0
JNZ PRINT_LOOP ; 若不为 0,跳转至 PRINT_LOOP 标志
```
其中,[DECIMAL_NUM] 表示十进制数的值,需在代码中赋值。该代码将十进制数转化为以 ASCII 码形式存储的十六进制数,需要通过 DOS 中断 21H 调用来输出。
阅读全文