我正在尝试在x86程序集中编写一个简单的sum
函数 - 我将3
和8
作为参数传递给它。但是,代码不会打印总和。发现错误的任何帮助。我正在使用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
答案 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)您必须将每个数字存储在字符串中而不是打印它,并将其终止。然后你可以打印字符串。
对不起,我已经没有多年的汇编程序,所以我不能给你一个更详细的答案,但希望这足以指出你正确的方向。