我對彙編語言使用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