无法在程序集中扫描 int
Can't scanf int in assembly
我已经尝试扫描字符串并且运行良好。现在我正在尝试 scanf 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 [=10=]
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 [=11=]
call exit
我还尝试将 int 设置为 %d。它不起作用。
scanf ("%s",stringBuffer);这是扫描功能。所以在汇编中我将参数从右向左推。首先是 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
.
我已经尝试扫描字符串并且运行良好。现在我正在尝试 scanf 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 [=10=]
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 [=11=]
call exit
我还尝试将 int 设置为 %d。它不起作用。 scanf ("%s",stringBuffer);这是扫描功能。所以在汇编中我将参数从右向左推。首先是 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
.