Function x86程序集中的Sum函数-无输出
我试图在x86汇编中编写一个简单的Function x86程序集中的Sum函数-无输出,function,assembly,x86,nasm,procedure,Function,Assembly,X86,Nasm,Procedure,我试图在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
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
对我来说,这看起来像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
因此,您必须获得一个备用内存块,将结果转换为字符串,可能以null终止该字符串,然后使用ecx中字符串的地址调用write
有关如何将整数转换为字符串的示例,请参见,您必须将每个数字存储在字符串中,而不是打印它,并使用null终止它。然后可以打印字符串
很抱歉,我已经多年没有在assembly中编程了,因此我无法给您提供更详细的答案,但希望这足以为您指明正确的方向。您会期待什么?stdout上的字符串“11”?我已经很久没有在汇编程序中编写任何东西了,但对我来说,您试图写入标准输出的是ASCII字符11(不是字符串“11”)或位于内存偏移量11(0xb)中的字符串。也许我错了,但这是我的猜测。顺便说一句,是Windows还是Linux?@XavierRubioJansana Linux。我尝试过添加eax,'0',以防它表示ascii 11,但没有用。不,您必须转换为字符串。我已更新了答案。谢谢您的帮助。我将该值转换为ascii,将其放入.bss中的内存位置,并将其地址作为第三个参数。非常适合打印1位数字。我想,对于两个或更多的数字,必须使用循环。