我是GAS程序集的新手,我的目标是显示用户输入的两个数字的总和。我使用char来进行数字转换,反之亦然,结果总是错误的(非数字)。谁能告诉我哪里出错了?提前谢谢。
.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
答案 0 :(得分:1)
movl $input1, %eax
addl $input2, %eax
movl $input1, %eax
addl $input2, %eax
您正在将input1的地址移动到%eax并添加input2的地址。失去!
这段代码可能有更多错误。由于你只能处理单个数字(包括sum!),你应该在这里使用字节,而不是“longs”,但只是转储$
至少会得到一个数字结果。
地址与“该地址的内容”之间的区别非常重要!不幸的是,每个汇编程序的表现都不一样......叹息......