Math 在GAS中添加两个数字

Math 在GAS中添加两个数字,math,assembly,type-conversion,gnu-assembler,Math,Assembly,Type Conversion,Gnu Assembler,我不熟悉gassembly,我的目标是显示用户输入的两个数字的总和。我使用字符到数字的转换,反之亦然,结果总是错误的(非数字)。谁能告诉我哪里错了?提前谢谢 .section .data prompt_str1: .ascii "Enter first number: " str1_end: .set STR1_SIZE, str1_end-prompt_str1 prompt_str2: .ascii "Enter second number: " str2_end:

我不熟悉gassembly,我的目标是显示用户输入的两个数字的总和。我使用字符到数字的转换,反之亦然,结果总是错误的(非数字)。谁能告诉我哪里错了?提前谢谢

.section .data
prompt_str1:
    .ascii "Enter first number: "
str1_end:
    .set STR1_SIZE, str1_end-prompt_str1
prompt_str2:
    .ascii "Enter second number: "
str2_end:
    .set STR2_SIZE, str2_end-prompt_str2

.section .bss 
.lcomm      input1  2
.lcomm      input2  2
.lcomm      ans     1

.macro write str,str_size
    movl $4, %eax
    movl $1, %ebx
    movl \str, %ecx
    movl \str_size, %edx
    int $0x80
.endm

.macro writenum str
    movl $4, %eax
    movl $1, %ebx
    movl \str, %ecx
    int $0x80
.endm

.macro read buff, buff_size
    movl  $3, %eax
    movl  $0, %ebx
    movl  \buff, %ecx
    movl  \buff_size, %edx
    int   $0x80
.endm

.section .text
.globl _start

_start:
write $prompt_str1, $STR1_SIZE
read $input1, $2

write $prompt_str2, $STR2_SIZE
read $input2, $2

subl $0x30, input1
subl $0x30, input2
movl $input1, %eax
addl $input2, %eax
movl %eax, ans
addl $0x30, ans
writenum $ans

exit:
movl $1, %eax
movl $0, %ebx
int $0x80

您正在将input1的地址移动到%eax并添加input2的地址。丢失
$

这个代码可能有更多的错误。由于您只能处理单个数字(包括总和!),因此您可能应该在此处使用字节,而不是“long”,但转储
$
至少会得到一个数字结果


地址和“该地址的内容”之间的区别非常重要!不幸的是,每个汇编程序都有不同的做法。。。唉…

你试过用gdb调试你的代码吗?如果你不知道为什么?
movl $input1, %eax
addl $input2, %eax