汇编语言 x86 - 在 Linux 上使用 NASM。 EDX、ECX、EBX。 EAX 整数 80h
Assembly language x86 - using NASM on Linux. EDX, ECX, EBX. EAX int 80h
这是我教授给的一段汇编语言代码
我。你能告诉我它是如何工作的吗?特别是 "int 80h" 部分。我在网上寻找答案,但对我来说并没有什么意义。
section .data string: db "Hello World", 0x0a
len: equ $ - string
section .text
global main
main:
mov edx, len
mov ecx, string
mov ebx, 1
mov eax, 4
int 80h
cmp eax, 0
je go
go:
xor ebx, ebx
mov eax, 1
int 80h
我知道 edx、ecx 等是寄存器位置,但是,我不明白它是如何替代的。
我知道 mov 是 move 的助记符,je 是 jump if equal to 但其余的有点超出我的舒适范围。
我的教授把我们扔进了深渊,想知道谁能先解决这个问题,我们将不胜感激。
首先你应该看看 x86 system_call。然后你就可以理解main func了。
"Hello world" 第一行设置为字符串 value.The 第二行计算变量的长度,然后使用系统调用在屏幕上打印消息。如果操作失败,程序跳转到"go"并用"mov eax ,1"调用system_exit。最后"int 80h"表示调用kernel
这是我教授给的一段汇编语言代码 我。你能告诉我它是如何工作的吗?特别是 "int 80h" 部分。我在网上寻找答案,但对我来说并没有什么意义。
section .data string: db "Hello World", 0x0a
len: equ $ - string
section .text
global main
main:
mov edx, len
mov ecx, string
mov ebx, 1
mov eax, 4
int 80h
cmp eax, 0
je go
go:
xor ebx, ebx
mov eax, 1
int 80h
我知道 edx、ecx 等是寄存器位置,但是,我不明白它是如何替代的。
我知道 mov 是 move 的助记符,je 是 jump if equal to 但其余的有点超出我的舒适范围。
我的教授把我们扔进了深渊,想知道谁能先解决这个问题,我们将不胜感激。
首先你应该看看 x86 system_call。然后你就可以理解main func了。 "Hello world" 第一行设置为字符串 value.The 第二行计算变量的长度,然后使用系统调用在屏幕上打印消息。如果操作失败,程序跳转到"go"并用"mov eax ,1"调用system_exit。最后"int 80h"表示调用kernel