汇编十进制到十六进制数代码
时间: 2023-09-16 12:07:59 浏览: 83
假设我们要将十进制数 123 转换成十六进制数,以下是汇编代码:
```
MOV AX, 123 ; 将十进制数 123 存入 AX 寄存器中
MOV BX, 16 ; 将 16 存入 BX 寄存器中,用于后面的除法运算
MOV CX, 0 ; CX 寄存器用于存放余数
MOV DX, 0 ; DX 寄存器用于存放商
DIV BX ; 进行除法运算,商存入 DX,余数存入 CX
CMP DX, 10 ; 若商为 10 及以上,则需要转换成 A-F 的十六进制字符
JAE HEX_CHAR ; 跳转到 HEX_CHAR 处
ADD DL, 30H ; 将商加上 30H 得到十六进制字符
JMP PRINT_HEX ; 直接输出十六进制字符
HEX_CHAR:
ADD DL, 37H ; 将商加上 37H 得到十六进制字符
PRINT_HEX:
MOV AH, 2 ; AH 寄存器用于输出字符
INT 21H ; 调用 DOS 中断 21H 进行字符输出
MOV AL, DH ; 将余数存入 AL 寄存器中,重复上述步骤
DIV BX
CMP DL, 10
JAE HEX_CHAR
ADD DL, 30H
JMP PRINT_HEX
HEX_CHAR:
ADD DL, 37H
PRINT_HEX:
MOV AH, 2
INT 21H
```
执行完上述代码后,将输出十六进制数 7B。
相关问题
8086十进制到十六进制数代码
以下是将8086的十进制数转换为十六进制数的汇编代码:
```
MOV AX, 8086 ; 将十进制数8086存储在寄存器AX中
MOV CX, 0 ; 初始化计数器为0
MOV BX, 10 ; 将除数设置为10
DIV BX ; 将AX中的数值除以10,商存在AL中,余数存在AH中
ADD AH, 30H ; 将余数转换为十六进制的ASCII码
CMP AH, 39H ; 如果余数小于等于'9' (39H),跳转到十六进制转换代码
JLE HEX_CONV
ADD AH, 7H ; 否则,将余数转换为十六进制的ASCII码
HEX_CONV:
MOV DL, AH ; 将转换后的ASCII码存储在DL中
PUSH DX ; 将DL压入堆栈中
INC CX ; 计数器加1
CMP AL, 0 ; 如果商为0,跳转到输出代码
JZ OUTPUT
XOR AH, AH ; 否则,将AH清零
DIV BX ; 继续将商除以10,余数存储在AH中
ADD AH, 30H ; 将余数转换为十六进制的ASCII码
CMP AH, 39H ; 如果余数小于等于'9' (39H),跳转到十六进制转换代码
JLE HEX_CONV
ADD AH, 7H ; 否则,将余数转换为十六进制的ASCII码
JMP HEX_CONV ; 跳转到十六进制转换代码
OUTPUT:
MOV AH, 9 ; 设置输出字符串的功能码
MOV DX, OFFSET HEX_STRING ; 将输出字符串的地址存储在DX中
DEC CX ; 将计数器减1
PRINT_LOOP:
POP DX ; 将堆栈中的字符弹出到DL中
INT 21H ; 输出DL中的字符
LOOP PRINT_LOOP ; 循环输出字符,直到计数器为0
HLT ; 停止程序
HEX_STRING DB '0x', 0 ; 定义输出字符串,以0x开头,以0结束
```
这段代码将8086十进制数转换为16进制数,并以字符串形式输出,例如,将8086转换为16进制数输出为0x1F4A。
汇编实现十进制转十六进制
下面是汇编实现十进制转十六进制的代码,假设十进制数存储在 AX 中,十六进制数存储在 BX 中:
```
MOV BX, 0 ; 初始化十六进制数为 0
MOV CX, 0 ; 初始化计数器为 0
LoopStart:
MOV DX, 0 ; 初始化余数为 0
DIV BYTE [Decimal] ; 除以 16,余数存储在 DX 中
ADD DL, 30H ; 将余数转换为 ASCII 码
CMP DL, 3AH ; 如果余数大于等于 10,则需要加上 7
JAE AddSeven
JMP NotAddSeven
AddSeven:
ADD DL, 7
NotAddSeven:
MOV [Hex], DL ; 将余数存储到十六进制数中
INC CX ; 计数器加 1
CMP AX, 0 ; 如果 AX 中的数已经被转换完了,就跳出循环
JE LoopEnd
MOV AL, AH ; 将商存储到 AL 中,继续循环
JMP LoopStart
LoopEnd:
MOV AH, 02H ; 调用 DOS 中断 21H 输出十六进制数
MOV DL, '0'
INT 21H
MOV DL, 'X'
INT 21H
DEC CX
LoopPrint:
MOV DL, [Hex + CX - 1] ; 从高位到低位输出十六进制数
INT 21H
DEC CX
CMP CX, 0
JNE LoopPrint
```
其中,[Decimal] 和 [Hex] 是存储十进制数和十六进制数的内存地址。