在nasm汇编程序上扫描

时间:2014-11-03 19:02:00

标签: gcc assembly nasm

我正在尝试使用scanfprintf编写一个简单的程序,但它没有正确存储我的值。

        extern printf
        extern scanf

        SECTION .data
  str1: db "Enter a number: ",0,10
  str2: db "your value is %d, squared = %d",0,10
  fmt1: db "%d",0
  location: dw 0h


        SECTION .bss
  input1: resw 1 

        SECTION .text
        global main

   main:
        push ebp
        mov ebp, esp

        push str1
        call printf 
        add esp, 4

        push location
        push fmt1 
        call scanf
        mov ebx, eax            ;ebx holds input

        mul eax                 ;eax holds input*input

        push eax
        push ebx
        push dword str2
        call printf
        add esp, 12

        mov esp, ebp
        pop ebp
        mov eax,0
        ret

由于某些原因,当我运行程序时,无论我输入什么号码,程序都会为两个输入打印1。

我正在使用nasm,与gcc链接

1 个答案:

答案 0 :(得分:3)

你在这里做了一个不正确的假设:

call scanf
mov ebx, eax            ;ebx holds input

scanf实际上返回“成功填充的参数列表的项目数”source)。您的整数位于location 顺便说一下,您应该使location至少4个字节(即使用dd而不是dw)。