使用Nasm的汇编语言

时间:2014-10-03 18:21:32

标签: assembly x86 nasm

我是汇编语言的新手。 我试图使用此代码添加两个数字;这些值是硬编码的。 我正在使用“nasm”,我正在成功构建可执行文件。 当我运行它时,它没有输出。 我开始知道如果值是一个整数,就像在这种情况下两个数字的总和,我们需要将它转换为字符串以使用sys_write写入它。 如果这是唯一需要照顾的事情,我该怎么办呢?如果没有,为什么即使我可以使用gdb在寄存器中看到输出,我也无法在stdout上看到输出?

global _start
section .text
_start:

mov eax,0x3
mov ebx,0x5
add eax,ebx
mov ecx,eax
mov eax,0x4
mov ebx,0x1
mov edx,0x1
int 0x80

mov eax,0x1
mov ebx,0x0
int 0x80

segment .data
sum db 0x00

1 个答案:

答案 0 :(得分:2)

您正在调用write系统调用,如下所示:

ssize_t write(int fd, const void *buf, size_t count);

不是指向包含要打印的内容的缓冲区,而是传递结果数字。那不会奏效。此外,您的号码是二进制,而不是文本。作为单位数字的快速修复,您可以添加0的ascii代码,并将生成的字符放入内存中进行打印。您可以使用堆栈。

global _start
section .text
_start:

mov eax,0x3
mov ebx,0x5
add eax,ebx
add al, '0'  ; convert to text
push eax     ; store on stack
mov ecx,esp  ; pass its address for printing
mov eax,0x4
mov ebx,0x1
mov edx,0x1
int 0x80
add esp, 4   ; free stack space

mov eax,0x1
mov ebx,0x0
int 0x80

segment .data
sum db 0x00