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

x86汇编读取两数求和问题:movzx等方法无效,sum无输出

问题分析与解决方案

你的代码核心问题有两个:一是未实现从ASCII字符到数值的转换与求和逻辑,二是sum变量未被赋值,所以输出为空。以下是具体修正步骤和完整代码:

关键修正点

  • 读取的输入是ASCII字符(比如输入5,内存中存的是0x35),必须先转换为十进制数值再相加
  • 相加后的数值要转回ASCII字符才能正确显示
  • 补充求和逻辑,将结果写入sum变量

完整修正代码

section .data
   msg db 'Introduceti primul numar: '
   lenMsg equ $ -msg
   newline db 10
   MSG db 'Introduceti al doilea numar: '
   LENMSG equ $ -MSG
   result db 'Suma este: '
   lenResult equ $ -result

section .bss
   num1 resb 1
   num2 resb 1
   sum resb 1

section .text
   global _start

_start: 
   ; Afisare mesaj 1
   mov eax, 4
   mov ebx, 1
   mov ecx, msg
   mov edx, lenMsg
   int 0x80

   ; Citire numar 1
   mov eax, 3
   mov ebx, 0
   mov ecx, num1
   mov edx, 1
   int 0x80

   ; 跳过输入后的换行符(避免第二个read读取换行)
   mov eax, 3
   mov ebx, 0
   mov ecx, num1  ; 临时存储换行,不影响后续使用
   mov edx, 1
   int 0x80

   ; Afisare mesaj 2
   mov eax, 4
   mov ebx, 1
   mov ecx, MSG
   mov edx, LENMSG
   int 0x80

   ; Citire numar 2
   mov eax, 3
   mov ebx, 0
   mov ecx, num2
   mov edx, 1
   int 0x80

   ; 跳过输入后的换行符
   mov eax, 3
   mov ebx, 0
   mov ecx, num2
   mov edx, 1
   int 0x80

   ; --- 新增求和逻辑 ---
   ; 将ASCII字符转为十进制数值
   sub byte [num1], '0'
   sub byte [num2], '0'

   ; 两数相加
   mov al, [num1]
   add al, [num2]

   ; 将结果转回ASCII字符
   add al, '0'
   mov [sum], al
   ; --- 求和逻辑结束 ---

   ; Afisare ultim mesaj
   mov eax, 4
   mov ebx, 1
   mov ecx, result
   mov edx, lenResult
   int 0x80

   ;afisare suma
   mov eax, 4
   mov ebx, 1
   mov ecx, sum
   mov edx, 1
   int 0x80

   ; Afisare newline
   mov eax, 4
   mov ebx, 1
   mov ecx, newline
   mov edx, 1
   int 0x80

   ; Iesire din program
   mov eax, 1
   xor ebx, ebx
   int 0x80

额外说明

  • 加入了跳过换行符的代码:因为用户输入数字后按回车,read系统调用会把回车(ASCII 0x0A)也读入缓冲区,如果不跳过,第二个read可能直接读取回车符,导致后续计算错误。
  • 这段代码仅支持0-9的单个数字相加,若需要处理多位数或进位(比如和超过9),需要额外实现进位处理和多字节输出逻辑。

内容的提问来源于stack exchange,提问作者Alex Bivol

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 16:25:13