汇编程序求助:5字节十六进制数相加后无法输出十六进制结果
解决汇编程序无法输出十六进制结果的问题
你的代码已经正确完成了5个字节的求和计算,但输出部分存在核心问题——使用int 21h的AH=2功能时,会把SUM的字节值当作ASCII码输出,而非十六进制数字。比如本次求和结果为96H(十进制150),对应的ASCII是不可见字符,因此你看不到正确的十六进制输出。
修改后的完整代码
.model small .stack 100h .data data_in db 25H, 12H, 15H, 1FH, 2BH sum db ? msg1 db 'The result is : $' .code mov ax,@data mov ds,ax ; 求和逻辑(原代码正确,保留) lea si,data_in mov al,[si] mov cx, 4 again: inc si add al, [si] loop again mov sum,al ; 输出提示信息 lea dx, msg1 mov ah,09h int 21h ; 转换并输出十六进制结果 mov al, sum ; 处理高4位 mov cl, 4 shr al, cl call to_ascii mov ah, 02h int 21h ; 处理低4位 mov al, sum and al, 0Fh call to_ascii mov ah, 02h int 21h ; 程序退出 mov ah,4ch int 21h ; 十六进制转ASCII子程序 to_ascii: cmp al, 9 jbe add_30h add al, 7h add_30h: add al, 30h mov dl, al ret end
关键修改说明
- 新增
to_ascii子程序:将4位十六进制数值(0-F)转换为对应ASCII码:- 数值≤9时,直接加
30H得到'0'-'9'的ASCII - 数值≥10(A-F)时,先加
7H再加30H得到'A'-'F'的ASCII
- 数值≤9时,直接加
- 拆分求和结果的高低4位:
- 通过右移4位提取高4位,用
AND 0Fh保留低4位 - 分别转换后用
AH=2功能输出每个字符
- 通过右移4位提取高4位,用
运行结果
程序运行后会输出:The result is : 96,对应5个字节相加的十六进制结果96H。
内容的提问来源于stack exchange,提问作者kishan raj
相关产品推荐
相关产品推荐

