无法在程序集中扫描 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.