【发布时间】:2014-12-21 19:29:45
【问题描述】:
我正在浏览一些组装演示(在 Mac 上使用 NASM,我是组装新手)并看到如下内容:
; read a byte from stdin
mov eax, 3 ; 3 is recognized by the system as meaning "read"
mov ebx, 0 ; read from standard input
mov ecx, variable ; address to pass to
mov edx, 1 ; input length (one byte)
int 0x80 ; call the kernel
我开始明白eax、ebx等是“通用寄存器”,就是你存放常用东西的地方。那里还有更多要学的东西,但我明白了它的要点。
但我对3(系统识别为“读取”)和0(从标准输入读取等值的位置感到困惑) 来自。你怎么知道0 的意思是“标准输入”?是否有此类整数值的列表,或一些书籍或标准参考资料?
【问题讨论】:
-
秘密在下一条指令中:
int 0x80。这是对系统例程的调用,该例程检查其他寄存器中的值以查看它应该做什么。 -
这其实和汇编无关,它就像操作系统定义的契约——当你调用中断0x80时,这些值表示你想让它做什么。