我目前正在学习汇编,但我似乎无法理解如何将值存储到寄存器中并操作它们会产生一个工作程序。
我想知道你们是否可以提供一个非常容易理解的解释,说明为什么在汇编代码中完成某些事情。
以汇编代码中的 Hello World 程序为例:
section .text
global _start ;must be declared for linker (ld)
_start: ;tell linker entry point
为什么需要将消息长度放入EDX寄存器?为什么选择 EDX 寄存器而不是 DX 寄存器或 EAX 寄存器?
mov edx,len ;message length mov ecx,msg ;message to write我也不明白为什么我们要将 1 移入 EBX 寄存器?就此而言,将 4 移入 EAX 寄存器?
mov ebx,1 ;file descriptor (stdout) mov eax,4 ;system call number (sys_write) int 0x80 ;call kernel为什么我们将 1 移到 EAX 中?与其他寄存器相比,EAX 有什么重要意义?之前存储在 EAX 中的 4 发生了什么?
mov eax,1 ;system call number (sys_exit) int 0x80 ;call kernel section .data msg db 'Hello, world!',0xa ;string len equ $ - msg ;length of string个人寄存器中的数据如何相互交互?他们如何知道数据存储在其中?
TL DR:如何将 Helloworld 合并到屏幕上?