Linux下的匯編語言之系統(tǒng)調(diào)用
作為最基本的編程語言之一,匯編語言雖然應(yīng)用的范圍不算很廣,但重要性卻勿庸置疑,因?yàn)樗軌蛲瓿稍S多其它語言所無法完成的功能。就拿 Linux 內(nèi)核來講,雖然絕大部分代碼是用 C 語言編寫的,但仍然不可避免地在某些關(guān)鍵地方使用了匯編代碼,其中主要是在 Linux 的啟動(dòng)部分。由于這部分代碼與硬件的關(guān)系非常密切,即使是 C 語言也會(huì)有些力不從心,而匯編語言則能夠很好揚(yáng)長(zhǎng)避短,最大限度地發(fā)揮硬件的性能。
第四課時(shí):Linux 命令行參數(shù)
在 Linux 操作系統(tǒng)中,當(dāng)一個(gè)可執(zhí)行程序通過命令行啟動(dòng)時(shí),其所需的參數(shù)將被保存到棧中:首先是 argc,然后是指向各個(gè)命令行參數(shù)的指針數(shù)組 argv,最后是指向環(huán)境變量的指針數(shù)據(jù) envp。在編寫匯編語言程序時(shí),很多時(shí)候需要對(duì)這些參數(shù)進(jìn)行處理,下面的代碼示范了如何在匯編代碼中進(jìn)行命令行參數(shù)的處理:
例3. 處理命令行參數(shù)
- # args.s
 - .text
 - .globl _start
 - _start:
 - popl %ecx # argc
 - vnext:
 - popl %ecx # argv
 - test %ecx, %ecx # 空指針表明結(jié)束
 - jz exit
 - movl %ecx, %ebx
 - xorl %edx, %edx
 - strlen:
 - movb (%ebx), %al
 - inc %edx
 - inc %ebx
 - test %al, %al
 - jnz strlen
 - movb $10, -1(%ebx)
 - movl $4, %eax # 系統(tǒng)調(diào)用號(hào)(sys_write)
 - movl $1, %ebx # 文件描述符(stdout)
 - int $0x80
 - jmp vnext
 - exit:
 - movl $1,%eax # 系統(tǒng)調(diào)用號(hào)(sys_exit)
 - xorl %ebx, %ebx # 退出代碼
 - int $0x80
 - ret
 
【編輯推薦】















 
 
 






 
 
 
 