繁体   English   中英

x86 汇编中的求和函数 - 无输出

[英]Sum function in x86 assembly - no output

我正在尝试在 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

对我来说,这看起来像 Linux 汇编程序。 这个页面,在示例部分,子部分 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

因此,您必须获得一块备用内存,将结果转换为字符串,可能以空值终止该字符串,然后使用 ecx 中的字符串地址调用 write。

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

抱歉,我已经多年没有在汇编中编程,所以我不能给你更详细的答案,但希望这足以为你指明正确的方向。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM