亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: 請教幾句匯編語言是什么意思 [打印本頁]

作者: nathan10    時(shí)間: 2010-08-13 10:13
標(biāo)題: 請教幾句匯編語言是什么意思
0. long __res;\
1. __asm__ volatile ("int $0x80" \
2.         : "=a" (__res) \
3.         : "0" (__NR_##name)); \

本人匯編學(xué)習(xí)的不深,求教上述匯編語言第二行與第三行是什么意思。謝謝
作者: Godbach    時(shí)間: 2010-08-13 10:24
int $0x80

產(chǎn)生0x80中斷,這個(gè)中斷是做什么用的,查一下。剩下的估計(jì)就容易明白了
作者: liying_gg    時(shí)間: 2010-08-13 10:33
a Use the %eax, %ax, or %al registers.

= The operand can only be written to.

0 signals the compiler to use the same register with output
作者: liying_gg    時(shí)間: 2010-08-13 10:37
int80是陷入系統(tǒng)調(diào)用的軟中段,但是你程序中沒有設(shè)置寄存器,不知道陷入那個(gè)系統(tǒng)調(diào)用
作者: nathan10    時(shí)間: 2010-08-13 10:55
回復(fù) 4# liying_gg

這里name的值是fork
作者: nathan10    時(shí)間: 2010-08-13 11:00
上面的代碼就是頭文件unistd.h中的一部分
#define __NR_fork        2
....
#define _syscall0(type,name) \
type name(void) \
{ \
long __res; \
__asm__ volatile ("int $0x80" \
        : "=a" (__res) \
        : "0" (__NR_##name)); \
if (__res >= 0) \
        return (type) __res; \
errno = -__res; \
return -1; \
}

而init文件中的main.c中調(diào)用語句是static inline _syscall0(int,fork)
作者: kgn28    時(shí)間: 2010-08-13 11:12
內(nèi)聯(lián)匯編的知識(shí)點(diǎn)
作者: 帥絕人寰    時(shí)間: 2010-08-13 11:13
第2行的意思是, 執(zhí)行完匯編后, 把__res的值送給eax;
第3行的意思是,執(zhí)行匯編之前, 把NR—XXX的值送給eax
作者: zd零    時(shí)間: 2010-08-13 11:44
AT_T匯編語言格式uploadby_weball.pdf (89.38 KB, 下載次數(shù): 285)
看看這個(gè)吧!
作者: nathan10    時(shí)間: 2010-08-13 11:45
回復(fù) 8# 帥絕人寰


還是不明白。。。
1.那代碼所示long __res;根本沒有初始化,這種情況下,將其值給寄存器eax有意義嗎?
2.在已經(jīng)把__res的值給eax的情況下,你再將NR_##NAME的值給eax,不是就覆蓋掉了原有的內(nèi)部值?
作者: nathan10    時(shí)間: 2010-08-13 11:47
回復(fù) 9# zd零

謝謝你,很有用的資料。我先看看
作者: etoux    時(shí)間: 2010-08-13 14:50
0. long __res;\
1. __asm__ volatile ("int $0x80" \
2.         : "=a" (__res) \
3.         : "0" (__NR_##name)); \

注意兩個(gè)“ : ”
一個(gè)指輸出參數(shù)  一個(gè)指輸入?yún)?shù)

表示__res放在eax中作為輸出參數(shù),而"0"是什么不知道。。
作者: nathan10    時(shí)間: 2010-08-13 15:08
0. long __res;\
1. __asm__ volatile ("int $0x80" \
2.         : "=a" (__res) \
3.         : "0" ( ...
etoux 發(fā)表于 2010-08-13 14:50



呵呵,上述代碼我已經(jīng)搞清楚意思了。這里的0是通用限制。從第二行開始已經(jīng)是表達(dá)式了。這些表達(dá)式是有計(jì)數(shù)的。例如這里第二行代表了第0個(gè)表達(dá)式。第三行代表了第1個(gè)表達(dá)式。可支持最多10個(gè)表達(dá)式(即到數(shù)字9)。
而第三行的“0”是說。我這一行的(第三行,第1個(gè)表達(dá)式)表達(dá)式所用的寄存器是與第0行的寄存器相同的。。

這里的“0”一般的寫成“n”,那么就是說,這一行使用的寄存器與第n行的寄存器是一樣的。
作者: etoux    時(shí)間: 2010-08-13 15:09
回復(fù) 13# nathan10


    呵呵 學(xué)習(xí)了!
作者: 帥絕人寰    時(shí)間: 2010-08-13 17:18
8樓同學(xué)看貼不認(rèn)真, 早知道我不回了。
作者: brynx    時(shí)間: 2010-08-18 10:54
不懂




歡迎光臨 Chinaunix (http://www.72891.cn/) Powered by Discuz! X3.2