无法在程序集中扫描整数



我已经尝试扫描字符串并且工作正常。现在我正在尝试扫描 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

最新更新