Qwe*_*rty 4 linux assembly nasm
我想在 NASM(Linux) 中添加两位数。要添加两个简单的数字,我使用以下代码:
section .text
global _start ;must be declared for using gcc
_start: ;tell linker entry point
mov eax,'3'
sub eax, '0'
mov ebx, '4'
sub ebx, '0'
add eax, ebx
add eax, '0'
mov [sum], eax
mov ecx,msg
mov edx, len
mov ebx,1 ;file descriptor (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel
mov ecx,sum
mov edx, 1
mov ebx,1 ;file descriptor (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel
mov eax,1 ;system call number (sys_exit)
int 0x80 ;call kernel
section .data
msg db "The sum is:", 0xA,0xD
len equ $ - msg
segment .bss
sum resb 1
Run Code Online (Sandbox Code Playgroud)
代码的结果是7.但是当我在寄存器eax中携带数字17时,结果不正确。在这种情况下 5.请告诉我是什么问题?谢谢!
这是您的示例,其中进行了一些清理以帮助使其更易于阅读。
建议:这种一致性会大大提升你的公众形象。
但是,嘿;很好的评论,我可以阅读您的代码并理解它(这就是我决定回答您的原因)
section .text
global _start ;must be declared for using gcc
_start: ;tell linker entry point
mov eax, '3'
sub eax, '0'
mov ebx, '4'
sub ebx, '0'
add eax, ebx
add eax, '0'
mov [sum], eax
mov ecx, msg
mov edx, len
mov ebx, 1 ;file descriptor (stdout)
mov eax, 4 ;system call number (sys_write)
int 0x80 ;call kernel
mov ecx, sum
mov edx, 1
mov ebx, 1 ;file descriptor (stdout)
mov eax, 4 ;system call number (sys_write)
int 0x80 ;call kernel
mov eax, 1 ;system call number (sys_exit)
int 0x80 ;call kernel
section .data
msg db "The sum is:", 0xA,0xD
len equ $ - msg
segment .bss
sum resb 1
Run Code Online (Sandbox Code Playgroud)
好的,至于你的评论,“......但是当我在寄存器 eax 中携带数字 17 时,例如结果是不正确的。 ”
我能想象 !
问题,当你“......在寄存器 eax 中携带数字 17 ......”时,你是这样做的吗?......
Mov Eax,"17"
Run Code Online (Sandbox Code Playgroud)
如果是这样,请放慢速度并通过调试一次一步地查看您的代码。
我相信你会看到的是你实际上正在这样做......
Mov Eax, 3137h
Run Code Online (Sandbox Code Playgroud)
虽然它可能是
Mov Eax, 3731h
Run Code Online (Sandbox Code Playgroud)
有趣的概念。我从来没有做过那样的事情。任何。
更重要的是,如果你使用这个地方来存储相同的数字......
sum resb 1
Run Code Online (Sandbox Code Playgroud)
你只有一个字节。
我能说的最好,您的示例代码仅限于个位数。
现在,由于您的标签sum只保留了一个字节;8 位,您可以看到问题,因为您在那里存储 32 位。(好吧,您正在尝试;它行不通。)不知道这样做时会发生什么。您可能想重新考虑该结构。
至于为什么17变成5,这里没有线索。
如果其中任何一项对您有帮助,请告诉我们。组装是个好东西。正如您亲身经历的那样,最初的思维调整对大脑来说可能很奇怪,不是吗!