在以下NASM任务中需要帮助

时间:2013-02-14 11:53:15

标签: c linux assembly x86 nasm

我在Ubuntu11.04中编写了一个NASM程序,该程序将输入2个输入数字并产生一个总和。该计划如下:

    section .data
       msg1:    db "the numbers are:%d%d",0
       msg3:    db "REsult= %d",10,0
    section .bss
       a resd 1
       b resd 1
       sum resd 1
    section .text
      global main
      extern printf,scanf
    main:
;; push ebp
;; mov ebp,esp
;; sub esp,10

      push a
      push b
      push msg1
      call scanf
      add esp,12

      mov eax,DWORD[a]
      add eax,DWORD[b]
      mov DWORD[sum],eax

      push DWORD[sum]
      push msg3
      call printf
      add esp,8

;; mov esp,ebp
;; pop ebp
       ret

请问我帮助我找出我在这里犯过的错误吗?如果您在NASM中向我推荐任何教程,无论是Vedio还是文本,我也将不胜感激。我已经获得汇编语言或NASM手册的艺术。但第一个不是基于NASM而第二个很难像我这样的初学者。

感谢名单

1 个答案:

答案 0 :(得分:0)

这应该让你前进:

global main
extern printf, scanf, exit

section .data 
scanf_fmt       db  "%d %d", 0
printf1_fmt     db  "The numbers entered are: %d and %d,", " The result = %d", 10, 0

main:
    push    ebp
    mov     ebp, esp
    sub     esp, 8                          ; make room for 2 dwords

    lea     eax, [ebp - 4]                  ; get pointers to our locals
    lea     ecx, [ebp - 8]                  ;
    push    eax                             ; give pointers to scanf
    push    ecx                             ;
    push    scanf_fmt                       ;
    call    scanf                           ; read in 2 dwords
    add     esp, 12

    mov     eax, dword [ebp - 4]            ; add em together
    add     eax, dword [ebp - 8]            ;

    push    eax                             ; total
    push    dword [ebp - 4]                 ; second num
    push    dword [ebp - 8]                 ; first num
    push    printf1_fmt                     ; format string
    call    printf                          ; show it
    add     esp, 16                         

    add     esp, 8                          ; restore stack pointers
    mov     esp, ebp
    pop     ebp
    call    exit                            ; linking agaist the c libs, must use exit.

输出: enter image description here