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

4位ASCII十进制数转整数:汇编代码逻辑验证与错误修复求助

4位ASCII十进制数转整数汇编代码问题修复

逻辑分析

你的核心逻辑是正确的:通过num = num*10 + 下一位数字的方式,从高位到低位逐步构建整数。对于1234,先转首位1为整数,再通过三次乘10+后续数位得到1000+200+30+4=1234,这个思路没问题。

代码错误点

你遇到的问题根源在于仅更新了AX的低8位(AL),未正确处理高8位(AH)的数值:

  • mul bl执行后,AX存储的是当前值×10的完整16位结果(AH为高8位,AL为低8位)
  • 后续用adc al, dl仅将digit加到AL中,AH保持不变;若mul后AH不为0(比如处理较大数时,567×10=5670的十六进制为1626,AH=0x16),直接修改AL会导致AH的高位值丢失,最终结果错误。
  • 另外,你只给DL赋值,DH未清零,若DH存在随机值,后续操作可能引入额外错误(虽然处理1234时DH恰好为0,所以结果正常)。

修复后的代码

修改代码,确保每次将digit加到完整的AX中,同时清零DH避免垃圾值干扰:

; ASCII -> Integer

mov al, [operand1 + 2] ; Load the first digit
sub al, 30h            ; Convert ASCII to integer
mov ah, 0              ; Clear AH to initialize AX
mov cx, 3              ; Loop 3 times for remaining 3 digits
lea si, [operand1 + 2] ; Point to first digit's address

@loop:
mov bl, 10             ; Load multiplier 10
mul bl                 ; AX = AX * 10 (full 16-bit result)
inc si                 ; Move to next digit
mov dl, [si]           ; Load next digit's ASCII
sub dl, 30h            ; Convert to integer
mov dh, 0              ; Clear DH to make DX = digit (0-9)
add ax, dx             ; Add digit to full AX value
loop @loop             ; Repeat until CX=0

; Final integer result is stored in AX

更简洁的实现方案

你也可以改用更通用的逐位累加逻辑,无需单独处理首位,代码可读性更强:

; ASCII -> Integer (4-digit number)
xor ax, ax              ; Initialize result to 0
mov cx, 4               ; Process all 4 digits
lea si, [operand1 + 2]  ; Point to first digit's ASCII

@convert_loop:
mov bl, [si]            ; Load ASCII digit
sub bl, 30h             ; Convert to integer
mov dx, 10              ; Multiplier
mul dx                  ; AX = AX * 10
add ax, bx              ; Add current digit to result
inc si                  ; Move to next digit
loop @convert_loop      ; Repeat for all digits

; Result is in AX

内容的提问来源于stack exchange,提问作者MUHAMMAD AWAIS

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 00:44:52