x86汇编中的Sum函数 - 无输出

时间:2014-03-30 11:12:27

标签: function assembly x86 nasm procedure

我正在尝试在x86程序集中编写一个简单的sum函数 - 我将38作为参数传递给它。但是,代码不会打印总和。发现错误的任何帮助。我正在使用NASM

section .text
global _start

_sum:
    push ebp
    mov ebp, esp
    push edi
    push esi           ;prologue ends
    mov eax, [ebp+8]
    add eax, [ebp+12]
    pop esi            ;epilogue begins
    pop edi
    mov esp, ebp
    pop ebp
    ret 8

_start:
    push 8
    push 3
    call _sum
    mov edx, 1
    mov ecx, eax
    mov ebx, 1      ;stdout
    mov eax, 4      ;write
    int 0x80
    mov ebx, 0
    mov eax, 1      ;exit
    int 0x80

1 个答案:

答案 0 :(得分:1)

对我来说,这看起来像Linux汇编程序。从this页面,在示例部分的子部分int 0x80中,看起来ecx需要字符串的地址:

_start:
    movl $4, %eax   ; use the write syscall
    movl $1, %ebx   ; write to stdout
    movl $msg, %ecx ; use string "Hello World"
    movl $12, %edx  ; write 12 characters
    int $0x80       ; make syscall

所以,你必须获得一个备用内存块,将结果转换为字符串,可能是null-terminate该字符串,然后用ecx中字符串的地址调用write。

有关如何将整数转换为字符串的示例,请参阅Printing an Int (or Int to String)您必须将每个数字存储在字符串中而不是打印它,并将其终止。然后你可以打印字符串。

对不起,我已经没有多年的汇编程序,所以我不能给你一个更详细的答案,但希望这足以指出你正确的方向。