You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

汇编程序求助: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
  • 拆分求和结果的高低4位:
    • 通过右移4位提取高4位,用AND 0Fh保留低4位
    • 分别转换后用AH=2功能输出每个字符

运行结果

程序运行后会输出:The result is : 96,对应5个字节相加的十六进制结果96H。

内容的提问来源于stack exchange,提问作者kishan raj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 17:25:25