我对汇编语言使用those video tutorials。 我基本上试图解决“hello world”asm例子。 以下是我有:简单的汇编系统调用不起作用
.data
str:
.ascii "Hello World"
.text
.globl _start
_start:
movl $4, %eax
movl $1, %ebx
movl $str, %ecx
movl $11, %edx
int $0x80
movl $1, %eax
movl $0, %ebx
int $0x80
这编译就好了,但是当我运行它,没有文本打印到终端。我不知道我在做什么错。无论什么价值,我进入ecx寄存器没有任何区别,没有任何反应。
另外,还有其他问题,系统调用在调用int 0x80指令时如何工作? 有些数据已被移动到寄存器,但是当我们到达系统调用时,它不会“使用”任何这些值。它是否会得到什么已被移动到它自己的寄存器?
一些系统信息可能会有所帮助:
[email protected] ~/dev/asm/tutorial > uname -a
FreeBSD freebsd-9 5.5-RELEASE FreeBSD 5.5-RELEASE #0: Tue May 23 14:58:27 UTC 2006 [email protected]:/usr/obj/usr/src/sys/GENERIC i386
我个人认为,通过学习系统调用,“hello world”,调用约定和其他依赖于OS的功能来启动程序集是一个坏主意。我通常建议学习使用调试器并编写一些可以单步执行的自包含asm程序,例如总结一个小阵列。一旦您对基本说明感到满意并获得程序集的窍门,您就可以轻松地学习各种其他事情,从而了解系统调用甚至可能无用。但这只是我疯狂的看法:) – Jester 2011-01-29 02:11:45