我已经尝试扫描字符串并且工作正常。现在我正在尝试扫描 int,但它不起作用。
.data
intFormat: .string "%i"
.bss
intBuffer: .space 10
.text
.globl main
main:
#Get answers
push $intBuffer #2nd argument for scanf
push $intFormat #1st argument of scanf
call scanf #scanf ("%s",intBuffer);
#Show answers
push $intBuffer
push $intFormat
call printf
#Exiting
pushl $0
call exit
但是当我尝试扫描字符串时,它可以正常工作这是字符串代码
.data
intFormat: .string "%s"
.bss
stringBuffer: .space 10
.text
.globl main
main:
#Get answers
push $intBuffer #2nd argument for scanf
push $intFormat #1st argument of scanf
call scanf #scanf ("%s",stringBuffer);
#Show answers
push $intBuffer
push $intFormat
call printf
#Exiting
pushl $0
call exit
我还尝试将 int 设为 %d。它不起作用。scanf ("%s",stringBuffer(;这是scanf功能。所以在汇编中,我从右到左推动参数。首先是 stringbuffer/intbuffer,然后是 %s/%i。它适用于字符串,但对于 int 输出是这样的:134520872
我试图推 400美元作为论据,它打印了我 400。
使用 gcc -m32 lab3scanf.s -g -o exe1 进行编译
工作正常(您可以使用调试器检查它是否正常(。错的是你打电话给printf
. 记住,你用 C 写
scanf("%i", &buffer);
扫描整数和
printf("%i", buffer);
来打印它。 您的代码有效地执行
printf("%i", &buffer);
这是未定义的行为,错误,在您的情况下打印buffer
地址。 要修复此代码,您需要将intBuffer
的内容(而不是其地址(传递给printf
。