亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? gcc中的內嵌匯編語言 (轉)(增加點知識).txt

?? LINUX下的安裝聲卡等操作和技巧介紹
?? TXT
字號:
作者:dio
email: hao@peng.com.cn
日期:8/21/2001 2:56:38 PM
gcc采用的是AT&T的匯編格式,MS采用Intel的格式. 

一 基本語法 

語法上主要有以下幾個不同. 

★ 寄存器命名原則 
AT&T: %eax Intel: eax 

★源/目的操作數順序 
AT&T: movl %eax,%ebx Intel: mov ebx,eax 

★常數/立即數的格式 
AT&T: movl $_value,%ebx Intel: mov eax,_value 
把_value的地址放入eax寄存器 

AT&T: movl $0xd00d,%ebx Intel: mov ebx,0xd00d 

★ 操作數長度標識 
AT&T: movw %ax,%bx Intel: mov bx,ax 

★尋址方式 
AT&T: immed32(basepointer,indexpointer,indexscale) 
Intel: [basepointer + indexpointer*indexscale + imm32) 
Linux工作于保護模式下,用的是32位線性地址,所以在計算地址時 
不用考慮segment:offset的問題.上式中的地址應為: 
imm32 + basepointer + indexpointer*indexscale 

下面是一些例子: 
★直接尋址 
AT&T: _booga ; _booga是一個全局的C變量 
注意加上$是表示地址引用,不加是表示值引用. 
注:對于局部變量,可以通過堆棧指針引用. 

Intel: [_booga] 

★寄存器間接尋址 
AT&T: (%eax) 
Intel: [eax] 

★變址尋址 
AT&T: _variable(%eax) 
Intel: [eax + _variable] 

AT&T: _array(,%eax,4) 
Intel: [eax*4 + _array] 
AT&T: _array(%ebx,%eax,8) 
Intel: [ebx + eax*8 + _array] 


二 基本的行內匯編 

基本的行內匯編很簡單,一般是按照下面的格式 
asm("statements"); 
例如:asm("nop"); asm("cli"); 
asm 和 __asm__是完全一樣的. 
如果有多行匯編,則每一行都要加上 "nt" 
例如: 
asm( "pushl %eaxnt" 
"movl $0,%eaxnt" 
"popl %eax"); 
實際上gcc在處理匯編時,是要把asm(...)的內容"打印"到匯編 
文件中,所以格式控制字符是必要的. 

再例如: 
asm("movl %eax,%ebx"); 
asm("xorl %ebx,%edx"); 
asm("movl $0,_booga); 

在上面的例子中,由于我們在行內匯編中改變了edx和ebx的值,但是 
由于gcc的特殊的處理方法,即先形成匯編文件,再交給GAS去匯編, 
所以GAS并不知道我們已經改變了edx和ebx的值,如果程序的上下文 
需要edx或ebx作暫存,這樣就會引起嚴重的后果.對于變量_booga也 
存在一樣的問題.為了解決這個問題,就要用到擴展的行內匯編語法. 
三 擴展的行內匯編 

擴展的行內匯編類似于Watcom. 

基本的格式是: 
asm ( "statements" : output_regs : input_regs : clobbered_regs); 

clobbered_regs指的是被改變的寄存器. 
下面是一個例子(為方便起見,我使用全局變量): 
int count=1; 
int value=1; 
int buf[10]; 
void main() 
{ 
asm( 
"cld nt" 
"rep nt" 
"stosl" 
: 
: "c" (count), "a" (value) , "D" (buf[0]) 
: "%ecx","%edi" ); 
} 
得到的主要匯編代碼為: 
movl count,%ecx 
movl value,%eax 
movl buf,%edi 
#APP 
cld 
rep 
stosl 
#NO_APP 
cld,rep,stos就不用多解釋了. 
這幾條語句的功能是向buf中寫上count個value值. 
冒號后的語句指明輸入,輸出和被改變的寄存器. 
通過冒號以后的語句,編譯器就知道你的指令需要和改變哪些寄存器, 
從而可以優化寄存器的分配. 

其中符號"c"(count)指示要把count的值放入ecx寄存器 
類似的還有: 
a eax 
b ebx 
c ecx 
d edx 
S esi 
D edi 
I 常數值,(0 - 31) 
q,r 動態分配的寄存器 
g eax,ebx,ecx,edx或內存變量 
A 把eax和edx合成一個64位的寄存器(use long longs) 

我們也可以讓gcc自己選擇合適的寄存器. 
如下面的例子: 
asm("leal (%1,%1,4),%0" 
: "=r" (x) 
: "0" (x) ); 
這段代碼實現5*x的快速乘法. 
得到的主要匯編代碼為: 
movl x,%eax 
#APP 
leal (%eax,%eax,4),%eax 
#NO_APP 
movl %eax,x 
幾點說明: 
1.使用q指示編譯器從eax,ebx,ecx,edx分配寄存器. 
使用r指示編譯器從eax,ebx,ecx,edx,esi,edi分配寄存器. 
2.我們不必把編譯器分配的寄存器放入改變的寄存器列表,因為寄存器 
已經記住了它們. 
3."="是標示輸出寄存器,必須這樣用. 
4.數字%n的用法: 
數字表示的寄存器是按照出現和從左到右的順序映射到用"r"或"q"請求 
的寄存器.如果我們要重用"r"或"q"請求的寄存器的話,就可以使用它們. 
5.如果強制使用固定的寄存器的話,如不用%1,而用ebx,則 
asm("leal (%%ebx,%%ebx,4),%0" 
: "=r" (x) 
: "0" (x) ); 
注意要使用兩個%,因為一個%的語法已經被%n用掉了. 

 

來源:操作系統開發者  


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区三区成人| 亚洲精品乱码久久久久久久久| 国产精品九色蝌蚪自拍| 亚洲国产日韩在线一区模特| 国产在线不卡一区| 欧美午夜精品电影| 国产精品短视频| 看电影不卡的网站| 一本久久综合亚洲鲁鲁五月天 | 国产农村妇女精品| 中文字幕制服丝袜一区二区三区| 麻豆精品久久久| 在线观看www91| 国产精品另类一区| 国产精品69毛片高清亚洲| 91精品国产色综合久久ai换脸| 亚洲欧美日韩国产综合| 国产精一区二区三区| 精品国产91九色蝌蚪| 麻豆极品一区二区三区| 欧美一区二区三区在| 婷婷丁香久久五月婷婷| 欧美午夜在线一二页| 亚洲综合丁香婷婷六月香| 99久久久精品| 中文字幕一区在线| 最新不卡av在线| 亚洲乱码国产乱码精品精的特点| 亚洲综合久久久| 在线亚洲+欧美+日本专区| 亚洲精品高清在线观看| 日本韩国欧美在线| 亚洲精品中文在线观看| 色视频欧美一区二区三区| 亚洲精品免费播放| 欧美亚洲综合一区| 天天做天天摸天天爽国产一区| 欧美日韩一区二区三区四区五区| 亚洲电影在线免费观看| 9191成人精品久久| 麻豆精品视频在线观看免费| 久久亚洲春色中文字幕久久久| 激情综合色综合久久综合| 久久精品人人做人人爽人人| 国产精品一区专区| 日韩理论片网站| 欧美调教femdomvk| 免费国产亚洲视频| 国产日韩亚洲欧美综合| av在线一区二区三区| 亚洲五月六月丁香激情| 欧美一级午夜免费电影| 国产一区 二区 三区一级| 国产精品剧情在线亚洲| 欧美日本在线播放| 国产美女一区二区| 日韩美女视频一区| 在线播放欧美女士性生活| 国产一区二区在线观看免费| 中文字幕在线不卡国产视频| 欧美人xxxx| 国产精品白丝av| 亚洲一区二区三区四区五区中文 | 成人精品电影在线观看| 亚洲妇女屁股眼交7| 精品国产乱码久久久久久免费| 丁香啪啪综合成人亚洲小说 | 欧美精品v日韩精品v韩国精品v| 久久精品国产在热久久| 国产精品成人网| 欧美一区二区三区性视频| k8久久久一区二区三区| 日韩av在线播放中文字幕| 国产精品卡一卡二卡三| 日韩欧美亚洲另类制服综合在线| 成人99免费视频| 久久精品国产秦先生| 一区二区在线观看不卡| 久久综合久色欧美综合狠狠| 欧美亚洲动漫另类| 风间由美一区二区av101| 日本午夜精品视频在线观看| 国产精品国产成人国产三级 | 夜夜嗨av一区二区三区中文字幕| 精品美女在线观看| 欧美日韩亚洲丝袜制服| 成人avav影音| 国产精品伊人色| 久久91精品国产91久久小草| 亚洲高清久久久| 亚洲男同性视频| 欧美国产视频在线| 久久在线观看免费| 91精品国产美女浴室洗澡无遮挡| 91网上在线视频| 99在线视频精品| 成人aaaa免费全部观看| 国产精品18久久久久久久久久久久| 日韩精品五月天| 亚洲一区二区成人在线观看| 亚洲欧美电影一区二区| 国产精品日韩精品欧美在线| 久久精品夜色噜噜亚洲a∨| 日韩一区二区在线观看视频播放| 欧美三级韩国三级日本一级| 在线观看国产日韩| 色综合久久久久网| 91偷拍与自偷拍精品| 成人国产精品视频| 9人人澡人人爽人人精品| 懂色av一区二区夜夜嗨| 国产999精品久久久久久绿帽| 国产乱对白刺激视频不卡| 国产一区二区三区电影在线观看 | 亚洲无线码一区二区三区| 一区二区三区在线观看欧美 | 国产盗摄精品一区二区三区在线| 美女一区二区三区| 精品一区二区三区免费视频| 久久国产精品免费| 国产一区二区精品久久99| 国产成人在线电影| 成人夜色视频网站在线观看| 日本韩国精品在线| 欧美性视频一区二区三区| 日韩欧美色电影| 中文字幕一区二区三中文字幕| 丝袜亚洲精品中文字幕一区| 天天av天天翘天天综合网色鬼国产| 亚洲一区二区在线观看视频 | av午夜精品一区二区三区| 国产91丝袜在线播放九色| av在线一区二区三区| 欧美午夜片在线看| 日韩免费一区二区三区在线播放| 2020国产精品自拍| 国产精品福利av| 日本三级亚洲精品| 成人一区二区视频| 色婷婷精品久久二区二区蜜臂av | 欧美精品一区二区三区在线播放| 国产欧美一区二区精品婷婷| 成人免费毛片a| 日韩欧美综合在线| 色噜噜狠狠成人中文综合| 欧美在线免费播放| 久久亚洲私人国产精品va媚药| 国产精品久久久久久久久晋中| 一二三区精品福利视频| 日本视频一区二区三区| 成人免费毛片片v| 亚洲欧美日韩系列| 全国精品久久少妇| 成人免费毛片嘿嘿连载视频| 制服.丝袜.亚洲.另类.中文| 亚洲国产精品精华液2区45| 香港成人在线视频| 成人黄动漫网站免费app| 91精品国产麻豆国产自产在线| 国产精品色在线观看| 美女任你摸久久| 色噜噜狠狠色综合中国| 久久久久九九视频| 日韩成人精品在线| 色综合中文字幕国产| 日韩一区二区在线看| 亚洲综合精品久久| 成人小视频免费观看| 精品盗摄一区二区三区| 亚洲国产va精品久久久不卡综合| 国产电影一区在线| 日韩三级视频中文字幕| 一区二区三区欧美激情| 99久久久国产精品免费蜜臀| wwww国产精品欧美| 美女视频黄频大全不卡视频在线播放| 99精品国产99久久久久久白柏| 2021久久国产精品不只是精品| 五月激情综合婷婷| 欧美亚洲图片小说| 1024成人网色www| eeuss影院一区二区三区| 精品电影一区二区| 美国十次了思思久久精品导航| 欧美图区在线视频| 亚洲一区在线观看视频| 色94色欧美sute亚洲线路一久 | 一级中文字幕一区二区| 成人黄色在线看| 亚洲国产经典视频| 国产一区二区不卡| 久久精品在线观看| 国产a区久久久| 亚洲国产成人午夜在线一区| 国产99久久久精品| 中文字幕电影一区| 成人性生交大片免费| 国产精品久久看| 色综合久久天天| 色一情一伦一子一伦一区|