0

我在 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 中的任何教程,无论是视频还是文本,我也将不胜感激。我已经获得了汇编语言艺术或 NASM 手册。但是第一个不是基于 NASM 的,第二个对于像我这样的初学者来说很难获得。

谢谢

4

1 回答 1

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.

输出: 在此处输入图像描述

于 2013-02-23T18:22:42.193 回答