assembly - 汇编语言 x86 - 在 Linux 上使用 NASM。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 如果等于,但其余的有点超出我的舒适区。
我的教授已经把我们推到了这里,想知道谁能先弄清楚,所以我们总是感谢任何帮助。
解决方案
首先你应该看看 x86 system_call。然后你就可以理解主函数了。第一行中的“Hello world”设置为字符串值。第二行计算变量的长度,然后使用系统调用将消息打印到屏幕上。如果操作失败,程序跳转到“go”并使用“mov eax,1”调用system_exit。最后“int 80h”表示调用内核
推荐阅读
- r - R 建模包是否将字符变量视为无序因子?
- common-lisp - Common Lisp 中是否有任何线程安全的哈希表实现?
- python - 我的代码没有在 IntelliJ python 中返回。为什么不回来?我知道有一个基本原因
- android - ios中的标签栏位于屏幕顶部
- python - Python从复杂字典创建子字典
- django - 在Django中选择文件后预览照片
- git - 修改先前提交的实际代码文件(c#、java 等)(使用 git)?
- ruby - cancancan的多级授权
- javascript - 棋盘Java脚本建议需要
- serialization - 使用协议缓冲区序列化/反序列化对象