如何创建一个基本的NASM程序集(Linux)计算器来添加两个整数?

时间:2013-01-21 16:58:47

标签: linux assembly x86 nasm

我去了,并尝试了:

section .data
promptmsg: db 'Enter integer: '
msgsize: equ $-promptmsg

section .bss       ;creating variables to store input
firstnum: resb 6
secondnum: resb 6

section .text
global _start

_start:

xor eax, eax
xor ebx, ebx
xor ecx, ecx
xor edx, edx

mov eax, 4          ;system call to write
mov ebx, 1
mov ecx, promptmsg
mov edx, msgsize
int 80h

xor eax, eax
xor ebx, ebx
xor ecx, ecx
xor edx, edx

mov eax, 3               ;system call to read
mov ebx, 0
mov ecx, firstnum
mov edx, 6
int 80h

push firstnum

xor eax, eax
xor ebx, ebx
xor ecx, ecx
xor edx, edx

mov eax, 4              ;system call to write
mov ebx, 1
mov ecx, promptmsg
mov edx, msgsize
int 80h

xor eax, eax
xor ebx, ebx
xor ecx, ecx
xor edx, edx

mov eax, 3                ;system call to read
mov ebx, 0
mov ecx, secondnum
mov edx, 6
int 80h

push secondnum

xor eax, eax
xor ebx, ebx
xor ecx, ecx
xor edx, edx

pop eax
pop ebx
add eax, ebx         ;attempt to add firstnum and secondnum and store in EAX

push eax

xor eax, eax
xor ebx, ebx
xor ecx, ecx
xor edx, edx

mov eax, 4          ;once again a system call to write
mov ebx, 1
pop ecx
mov edx, 7
int 80h

xor eax, eax
xor ebx, ebx
xor ecx, ecx
xor edx, edx

mov eax, 1             ;exit safely and return 0
mov ebx, 0
int 80h

对于所有XOR指令感到抱歉,我只是想确保寄存器在用于系统调用之前已被清除,我还在学习汇编并且不确定哪些指令会使寄存器变空。

当我编译,链接并运行它时,只有在包含ENTER字符(即换行符)时才能输入两个整数。无法添加整数,因此已经导致问题。因此,当我输入它们时,我在程序的屏幕上没有得到进一步的输出,它就结束了。

我该如何纠正?

(在这种情况下,使用带有ASM的C或C ++不是一种选择。)

1 个答案:

答案 0 :(得分:0)

这不是关于“纠正”你的代码,因为它是关于编写它的缺失部分。

你必须解析整数,忽略分隔空格。添加它们,然后将结果转换为字符串。然后输出这个字符串。调用scanfstrtolprintf可能是您无法接受的,因为它使用的是标准C库。