匯編指令二進(jìn)制代碼手冊(cè)_第1頁(yè)
匯編指令二進(jìn)制代碼手冊(cè)_第2頁(yè)
匯編指令二進(jìn)制代碼手冊(cè)_第3頁(yè)
匯編指令二進(jìn)制代碼手冊(cè)_第4頁(yè)
匯編指令二進(jìn)制代碼手冊(cè)_第5頁(yè)
已閱讀5頁(yè),還剩52頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、匯編指令與二進(jìn)制代碼對(duì)應(yīng)手冊(cè)匯編指令與二進(jìn)制代碼具有一一對(duì)應(yīng)關(guān)系,也就是說(shuō),一條匯編指令必將唯一對(duì)應(yīng)一條二進(jìn)制代碼指令,而一條二進(jìn)制代碼指令也唯一對(duì)應(yīng)一條匯編指令,這就為寫一個(gè)匯編語(yǔ)言與二進(jìn)制指令相互對(duì)應(yīng)的參考表成為可能。手冊(cè)的使用范圍本手冊(cè)的讀者需要據(jù)有一定的計(jì)算機(jī)專業(yè)知識(shí),了解CPU的工作原理及內(nèi)部的體系結(jié)構(gòu),熟悉IBM匯編、NASM或其它匯編語(yǔ)言,并且對(duì)匯編語(yǔ)言指令的二進(jìn)制代碼有足夠的興趣。本手冊(cè)列出了絕大部分的中文匯編指令與二進(jìn)制指令的對(duì)應(yīng)關(guān)系,及相應(yīng)的英文匯編指令名稱。由于作者水平有限,而且本手冊(cè)主要是對(duì)照NASM匯編語(yǔ)言指令集、Intel 微處理器結(jié)構(gòu)、編程與接口中文第六版及其In

2、tel公司公布的IA-32 Intel Architecture Software Developers Manual2001年版的PDF格式文檔指令集而生成的,或許有一些比較新的指令或者其他CPU特有的指令,并未收集在本手冊(cè)中。匯編指令解析一、操作碼 匯編指令按其功能可分為:一般指令、浮點(diǎn)指令、多媒體指令和SIMD流式擴(kuò)展(SSE)指令。匯編指令因其繁多且對(duì)應(yīng)的二進(jìn)制代碼有多種變化而變得異常復(fù)雜,二進(jìn)制代碼的指令都是由操作碼與操作數(shù)構(gòu)成,就指令與操作數(shù)的關(guān)系而言,指令無(wú)非是無(wú)操作數(shù)、單操作數(shù)、雙操作數(shù)和三操作數(shù)。所謂的操作碼就是唯一代表著指令的意義的一段二進(jìn)制碼,操作碼可以是單字節(jié)或者是雙字

3、節(jié)。有一種特殊的操作碼,它與操作數(shù)合起來(lái)共用一個(gè)字節(jié)或者兩個(gè)字節(jié),這種操作碼的操作數(shù)都是寄存器,而且寄存器的二進(jìn)制代碼都為這操作碼字節(jié)的最后三位,在參照表中用“操作數(shù)指令”字段表示,如果這個(gè)段中的數(shù)據(jù)為“是”就表示這個(gè)操作碼是與寄存器操作數(shù)共用一個(gè)字節(jié)或兩個(gè)字節(jié),否則就不是。從對(duì)照表中,我們可以看出,實(shí)事上二進(jìn)制操作碼與匯編指令名稱并非一一對(duì)應(yīng),一條匯編指令的名稱如:轉(zhuǎn)移指令,它可以對(duì)應(yīng)多個(gè)操作碼,只有當(dāng)指令名稱與指令操作數(shù)合在一起,才與操作碼和操作數(shù)有一一對(duì)應(yīng)的關(guān)系。也就是說(shuō)同一個(gè)指令名稱,指令操作數(shù)類型不同,對(duì)應(yīng)的二進(jìn)制操作碼也可能不同。操作碼在對(duì)照表是用“操作碼”字段表示。在操作碼字節(jié)中

4、通常又有方向位、符號(hào)位、操作數(shù)大小修飾位值得注意,它們都用一個(gè)二進(jìn)制位來(lái)表示,方向位與符號(hào)位通常都在操作碼的倒數(shù)第二位,而操作數(shù)修飾位通常在操作碼的最后一位。舉例說(shuō)明:如果倒數(shù)第二位是方向位,那么如果這一位值為0,那么表示操作數(shù)是從左到右,如果是1表示操作數(shù)從右到左;如果倒數(shù)第二位是表示符號(hào)位,那么如果這一位值為0表示操作數(shù)是無(wú)符號(hào)操作數(shù),如果值為1表示操作數(shù)為有符號(hào)操作數(shù);如果最后一位是修飾操作數(shù)位,那么最后一位為0表示操作數(shù)是八位操作數(shù),就是字節(jié)操作數(shù),最后一位為1表示操作數(shù)大小由匯編模式?jīng)Q定,如果是16位匯編就表示是16位操作數(shù),即字操作數(shù),如果是32位匯編就表示是32位操作數(shù),即雙字操

5、作數(shù)。匯編模式是16位還是32位,由匯編代碼決定,在NASM匯編中默認(rèn)為32位模式,如果代碼顯示地給出BIT16就表示匯編成16位模式,如果代碼顯示地給出BIT32就表示匯編成32位模式。匯編模式不同,操作數(shù)也不相同,具體請(qǐng)看操作數(shù)節(jié)中介紹。二、操作數(shù) 計(jì)算機(jī)指令之所以復(fù)雜的一個(gè)主要原因就是操作數(shù)有多種變化,最為簡(jiǎn)單的指令就是無(wú)操作數(shù)指令。其中操作數(shù)可以是立即數(shù)、寄存器和內(nèi)存地址。通常情況下,操作數(shù)含有立即數(shù)的指令與不含立即數(shù)的指令,指令操作碼不同;操作數(shù)都為寄存器的,通用寄存器、段寄存器、控制寄存器、調(diào)試寄存器和任務(wù)寄存器的指令操作碼不同;多媒體指令、浮點(diǎn)指令和SIMD指令都有各自的指令系統(tǒng)

6、。最為復(fù)雜的變化是當(dāng)操作數(shù)為寄存器或內(nèi)存的時(shí)候,之所以把它們放在一起,是因?yàn)樗鼈兌加梢粋€(gè)叫做模數(shù)(MOD)的兩位二進(jìn)制數(shù)來(lái)決定。計(jì)算機(jī)指令是如何分辨多變的操作數(shù)的呢?前面提到,如果操作數(shù)是立即數(shù),那么就用操作碼來(lái)區(qū)分。當(dāng)操作數(shù)是寄存器或是內(nèi)存地址時(shí),主要是用一個(gè)字節(jié)來(lái)區(qū)分,這個(gè)字節(jié)的前兩位就是模數(shù)(MOD),后三位是寄存器的二進(jìn)制代碼,最后三位的值由開(kāi)始兩位的模數(shù)來(lái)決定具體的類型,如果模數(shù)為11那么最后三位就用來(lái)表示寄存器。內(nèi)存地址是用寄存器的值來(lái)表示的,有的內(nèi)存地址帶有位移量,于是,當(dāng)模數(shù)為00時(shí)字節(jié)的最后三位就表示寄存器內(nèi)的數(shù)據(jù)是內(nèi)存地址,并且沒(méi)有位移量,當(dāng)模數(shù)為01時(shí),字節(jié)最后三位表示寄

7、存器內(nèi)的數(shù)據(jù)是內(nèi)存地址,并且在這一字節(jié)之后有8位數(shù)的位移量,當(dāng)模數(shù)為10時(shí)字節(jié)后面有16位或32位,是16位還是32位由匯編模式來(lái)決定。16位模式常用于實(shí)模式,可使用16位寄存器,如AX、BX等,32位常用于保護(hù)模式,可使用32位寄存器,如EAX、EBX等。然而,只用一個(gè)字節(jié)的最后三位來(lái)表示內(nèi)存地址,不可能用來(lái)表示眾多的寄存器組合,于是模數(shù)為00時(shí)(沒(méi)有位移量),就有在16位匯編模式,當(dāng)nnn=000(nnn表示是用來(lái)表示內(nèi)存的三位二進(jìn)制數(shù))時(shí),內(nèi)存地址為DS:BX+SI,在32位匯編模式時(shí)nnn=000,內(nèi)存地址為DS:EAX,其它的值請(qǐng)參照后面的對(duì)應(yīng)表。于是,我們知道了,計(jì)算機(jī)指令是通過(guò)模

8、數(shù)、寄存器和寄/內(nèi)三個(gè)域來(lái)決定操作數(shù)的,其實(shí)除此之外,還有一種特殊的情況,就是操作數(shù)并沒(méi)有都用到這三個(gè)域,而是把第二個(gè)域的值設(shè)為一個(gè)預(yù)設(shè)值,也就是說(shuō),第二個(gè)用來(lái)表示寄存器的域設(shè)成了固定值,而不是可變的寄存器,那么這就出現(xiàn)了只有一個(gè)寄存器或是內(nèi)存地址操作數(shù)的變型,其實(shí)它是由前一種類型變化得來(lái)的。有三個(gè)操作數(shù)的指令又是如何的呢?實(shí)事上搞明白了上一種變化,三個(gè)操作數(shù)就很容易了,它只不過(guò)是在兩個(gè)寄存器或內(nèi)存地址操作數(shù)之后再加一個(gè)立即數(shù),這種情況同樣有一種特例,那就是有兩個(gè)相同寄存器操作數(shù),和一個(gè)立即數(shù),那么在寫匯編代碼的時(shí)候就把這種情況認(rèn)為是一個(gè)寄存器和一個(gè)立即數(shù),而實(shí)際翻譯成二進(jìn)制代碼時(shí)要翻譯成兩個(gè)

9、相同的寄存器和一個(gè)立即數(shù),它同樣是屬于三個(gè)操作數(shù)的情況,IMUL指令就屬于這一種特例。在具體的指令中還有一些例外,比如,一個(gè)看上去只有一個(gè)操作碼,不含操作數(shù)的指令,而實(shí)際上它有隱含的寄存器作為它的操作數(shù)如計(jì)數(shù)寄存器,或者它的寄存器操作數(shù)被指令指定了,而不是可變的,如只使用累加寄存器,這也是比較常見(jiàn)的,這些在對(duì)照表中有詳細(xì)的注明。三、指令前綴 有些指令通過(guò)添加前綴來(lái)改變默認(rèn)段或超越指令模式。所謂超越指令模式是指在16位匯編模式時(shí)使用了32位的寄存器或者由32位寄存器組成的內(nèi)存地址,或者在32位匯編模式時(shí)使用了16位寄存器或者由16位寄存器組成的內(nèi)存地址。當(dāng)使用超越前綴時(shí),應(yīng)把前綴字節(jié)放在指令的面

10、前,有多個(gè)前綴時(shí)前綴字節(jié)沒(méi)有順序地排列。超越前綴表前綴字節(jié) 作用26H ES:段超越前綴2EH CS:段超越前綴36H SS:段超越前綴3EH DS:段超越前綴64H FS:段超越前綴65H GS:段超越前綴2EH 分支未獲取前綴(原英文是:Branch not taken,分支暗示前綴-僅用于條件跳轉(zhuǎn)(Jcc)指令)3EH 分支被獲取前綴(原英文是:Branch taken,分支暗示前綴-僅用于條件跳轉(zhuǎn)(Jcc)指令)66H 對(duì)操作數(shù)長(zhǎng)度的指令模式超越67H 對(duì)內(nèi)存地址長(zhǎng)度的指令模式超越F0H 鎖(LOCK)指令前綴F2H 不相等重復(fù)/不為零重復(fù)前綴(REPNE/REPNZ)指令前綴(只適用

11、于字符串操作指令)F3H 重復(fù)(REP)指令前綴(只適用于字符串操作指令)F3H 相等重復(fù)/為零重復(fù)前綴(REP/REP)指令前綴(只適用于字符串操作指令)四、總結(jié) 通過(guò)以上的分析,我們可以總結(jié)出計(jì)算機(jī)指令的結(jié)構(gòu),由于286以前(含286)的處理器只能識(shí)別16位地址指令,且不能識(shí)別超越前綴字節(jié),因此,這種16位地址指令的格式又與32位地址,即386以后(含386)的處理器的指令格式有所不同,如下表: 16位計(jì)算機(jī)指令格式(適用于286以前的處理器) 操作碼操作數(shù)0x帶模數(shù)的寄存器和寄/內(nèi)操作數(shù)內(nèi)存位移量立即數(shù)1-2字節(jié)0-1字節(jié)0-2字節(jié)0-2字節(jié)32位計(jì)算機(jī)指令格式(適用于386以后的處理器

12、)指令超越前綴操作碼操作數(shù)0x66/0x670x帶模數(shù)的寄存器和寄/內(nèi)操作數(shù)比例變址*內(nèi)存位移量立即數(shù)由前綴個(gè)數(shù)而定1-2字節(jié)0-1字節(jié)0-1字節(jié)0-4字節(jié)0-4字節(jié)*值得注意的是,操作數(shù)域中的比例變址只適用于32位尋址方式,且此時(shí)jjj/nnn=100 比例變址字節(jié)的前兩位表示比例因子,后三位表示變址寄存器,最后三位表示基地寄存器,最終得到的地址值是:比例因子*變址+基址,當(dāng)比例因子為00時(shí)乘以1,當(dāng)比例因子為01是乘以2,當(dāng)比例因子為10時(shí)乘以4,當(dāng)比例因子為11時(shí)乘以8。其中“帶模數(shù)的寄存器和寄/內(nèi)操作數(shù)”這一操作數(shù)域僅占一個(gè)字節(jié),如下表示:mm jjj jjj/nnn mm是兩位模數(shù)

13、jjj是三位表示的寄存器 nnn是三位用寄存器的值來(lái)表示的內(nèi)地地址當(dāng)mm=11時(shí) jjj/nnn的值就表示為寄存器,即:11 jjj jjj當(dāng)mm=00時(shí) jjj/nnn的值就表示為內(nèi)存地址,即:00 jjj nnn 且此時(shí)“內(nèi)存位移量”域不取值,沒(méi)有位移量當(dāng)mm=01時(shí) jjj/nnn的值就表示為內(nèi)存地址,即:01 jjj nnn 且此時(shí)“內(nèi)存位移量”域取8位的位移量當(dāng)mm=10時(shí) jjj/nnn的值就表示為內(nèi)存地址,即:10 jjj nnn 且此時(shí)“內(nèi)存位移量”域取16位或32位的位移量,如果是16位匯編模式則取16位的位移量,如果是32位匯編模式則取32位的位移量。是否有最后面的立即數(shù)操

14、作數(shù)則由操作碼來(lái)決定。如果匯編代碼指定為16位匯編模式,但指令的操作數(shù)中使用了32位的寄存器,則就需要在指令前加0x66的超越前綴,如果是使用了32位寄存器的值來(lái)表示內(nèi)存地址,則需要在指令前加0x67的超越前綴,同理,匯編代碼指定為32位匯編模式時(shí),在指令的操作數(shù)中使用了16位的寄存器,也需要在指令前加0x66的超越前綴,如果是使用了16位寄存器的值來(lái)表示內(nèi)存地址,則需要在指令前加0x67的超越前綴。其每條指令的這兩種超越前綴已經(jīng)在指令對(duì)照表中完整給出。寄存器中文-英文命名對(duì)照表類型中文名稱英文名稱二進(jìn)制碼寄存器說(shuō)明多 功 能 寄 存 器累加低八AL000累加寄存器低八位累加高八AH100累加

15、寄存器低八位累加16AX00016位累加寄存器累加32EAX00032位累加寄存器基址低八BL011基址寄存器低八位基址高八BH111基址寄存器低八位基址16BX01116位基址寄存器基址32EBX01132位基址寄存器計(jì)數(shù)低八CL001計(jì)數(shù)寄存器低八位計(jì)數(shù)高八CH101計(jì)數(shù)寄存器低八位計(jì)數(shù)16CX00116位計(jì)數(shù)寄存器計(jì)數(shù)32ECX00132位計(jì)數(shù)寄存器數(shù)據(jù)低八DL010數(shù)據(jù)寄存器低八位數(shù)據(jù)高八DH110數(shù)據(jù)寄存器低八位數(shù)據(jù)16DX01016位數(shù)據(jù)寄存器數(shù)據(jù)32EDX01032位數(shù)據(jù)寄存器類型中文名稱英文名稱二進(jìn)制碼寄存器說(shuō)明指針寄存器堆棧指針16SP10016位堆棧指針寄存器堆棧指針32E

16、SP10032位堆棧指針寄存器基址指針16BP10116位基址指針寄存器基址指針32EBP10132位基址指針寄存器變址寄存器目標(biāo)變址16DI11116位目標(biāo)變址寄存器目標(biāo)變址32EDI11132位目標(biāo)變址寄存器源變址16SI11016位源變址寄存器源變址32ESI11032位源變址寄存器專用寄存器指令指針16IP*16位指令指針寄存器指令指針32EIP*32位指令指針寄存器標(biāo)志16FLAGS*16位標(biāo)志寄存器標(biāo)志32EFLAGS*32位標(biāo)志寄存器段寄存器代碼段CS001代碼段寄存器數(shù)據(jù)段DS011數(shù)據(jù)段寄存器附加段ES000附加段寄存器堆棧段SS010堆棧段寄存器標(biāo)志段FS100標(biāo)志段寄存器

17、全局段GS101全局段寄存器控制寄存器控制零CR0000控制寄存器零控制一CR1*001控制寄存器一控制二CR2010控制寄存器二控制三CR3011控制寄存器三控制四CR4100控制寄存器四控制五CR5*101控制寄存器五控制六CR6*110控制寄存器六控制七CR7*111控制寄存器七調(diào)試寄存器調(diào)試零DR0000調(diào)試寄存器零調(diào)試一DR1001調(diào)試寄存器一調(diào)試二DR2010調(diào)試寄存器二調(diào)試三DR3011調(diào)試寄存器三調(diào)試四DR4*100調(diào)試寄存器四調(diào)試五DR5*101調(diào)試寄存器五調(diào)試六DR6110調(diào)試寄存器六調(diào)試七DR7111調(diào)試寄存器七任務(wù)寄存器任務(wù)零TR0000任務(wù)寄存器零任務(wù)一TR1001任

18、務(wù)寄存器一任務(wù)二TR2010任務(wù)寄存器二任務(wù)三TR3011任務(wù)寄存器三任務(wù)四TR4100任務(wù)寄存器四任務(wù)五TR5101任務(wù)寄存器五任務(wù)六TR6110任務(wù)寄存器六任務(wù)七TR7111任務(wù)寄存器七浮點(diǎn)寄存器浮點(diǎn)零ST0000浮點(diǎn)寄存器零浮點(diǎn)一ST1001浮點(diǎn)寄存器一浮點(diǎn)二ST2010浮點(diǎn)寄存器二浮點(diǎn)三ST3011浮點(diǎn)寄存器三浮點(diǎn)四ST4100浮點(diǎn)寄存器四浮點(diǎn)五ST5101浮點(diǎn)寄存器五浮點(diǎn)六ST6110浮點(diǎn)寄存器六浮點(diǎn)七ST7111浮點(diǎn)寄存器七多媒體寄存器媒體零MM0000媒體寄存器零媒體一MM1001媒體寄存器一媒體二MM2010媒體寄存器二媒體三MM3011媒體寄存器三媒體四MM4100媒體寄存器

19、四媒體五MM5101媒體寄存器五媒體六MM6110媒體寄存器六媒體七M(jìn)M7111媒體寄存器七單指令流、多數(shù)據(jù)流寄存器單流零XMM0000單指令流、多數(shù)據(jù)流寄存器零單流一XMM1001單指令流、多數(shù)據(jù)流寄存器一單流二XMM2010單指令流、多數(shù)據(jù)流寄存器二單流三XMM3011單指令流、多數(shù)據(jù)流寄存器三單流四XMM4100單指令流、多數(shù)據(jù)流寄存器四單流五XMM5101單指令流、多數(shù)據(jù)流寄存器五單流六XMM6110單指令流、多數(shù)據(jù)流寄存器六單流七XMM7111單指令流、多數(shù)據(jù)流寄存器七注:英文名稱有星號(hào)“*”的表示作為保留域,實(shí)際并沒(méi)有使用,二進(jìn)制碼有星號(hào)“*”表示無(wú)需二進(jìn)制數(shù)表示尋址方式16位尋址

20、方式時(shí)模數(shù)mm與內(nèi)存尋址nnn可能的組合mm nnn 尋址方式中文表示 尋址方式英文表示00 000 數(shù)據(jù)段:基址16+源變址16 DS:BX+SI00 001 數(shù)據(jù)段:基址16+目標(biāo)變址16 DS:BX+DI00 010 堆棧段:基址指針16+源變址16 SS:BP+SI00 011 堆棧段:基址指針16+目標(biāo)變址16 SS:BP+DI00 100 數(shù)據(jù)段:源變址16 DS:SI00 101 數(shù)據(jù)段:目標(biāo)變址16 DS:DI00 110 堆棧段:基址指針16 SS:BP00 111 數(shù)據(jù)段:基址16 DS:BX01 000 數(shù)據(jù)段:基址16+源變址16+8位符號(hào)位移 DS:BX+SI+sig

21、n_disp801 001 數(shù)據(jù)段:基址16+目標(biāo)變址16+8位符號(hào)位移 DS:BX+DI+sign_disp801 010 堆棧段:基址指針16+源變址16+8位符號(hào)位移 SS:BP+SI+sign_disp801 011 堆棧段:基址指針16+目標(biāo)變址16+8位符號(hào)位移 SS:BP+DI+sign_disp801 100 數(shù)據(jù)段:源變址16+8位符號(hào)位移 DS:SI+sign_disp801 101 數(shù)據(jù)段:目標(biāo)變址16+8位符號(hào)位移 DS:DI+sign_disp801 110 堆棧段:基址指針16+8位符號(hào)位移 SS:BP+sign_disp801 111 數(shù)據(jù)段:基址16+8位符號(hào)位

22、移 DS:BX+sign_disp810 000 數(shù)據(jù)段:基址16+源變址16+16位符號(hào)位移 DS:BX+SI+disp1610 001 數(shù)據(jù)段:基址16+目標(biāo)變址16+16位符號(hào)位移 DS:BX+DI+disp1610 010 堆棧段:基址指針16+源變址16+16位符號(hào)位移 SS:BP+SI+disp1610 011 堆棧段:基址指針16+目標(biāo)變址16+16位符號(hào)位移 SS:BP+DI+disp1610 100 數(shù)據(jù)段:源變址16+16位符號(hào)位移 DS:SI+disp1610 101 數(shù)據(jù)段:目標(biāo)變址16+16位符號(hào)位移 DS:DI+disp1610 110 堆棧段:基址指針16+16位

23、符號(hào)位移 SS:BP+disp1610 111 數(shù)據(jù)段:基址16+16位符號(hào)位移 DS:BX+disp16注意:當(dāng)處理器執(zhí)行時(shí),將所有8位符號(hào)位移量符號(hào)擴(kuò)展成16位的位移量,如果8位的位移量是00H-7FH(正的),則在位移地址之前擴(kuò)展成0000H-007FH,如果8位的位移量是80H-FFH(負(fù)的),則在位移地址之前擴(kuò)展成FF80H-FFFFH,因此,這個(gè)工作也可由匯編器來(lái)完成,在編譯時(shí)將模數(shù)設(shè)為10,地址擴(kuò)展成16的位移量,所以有些匯編程序不使用8位的位移量。32位尋址方式時(shí)模數(shù)mm與內(nèi)存尋址nnn及比例因子字節(jié)基址域jjj可能的組合mm nnn jjj 尋址方式中文表示 尋址方式英文表示

24、00 000 - 數(shù)據(jù)段:累加32 DS:EAX00 001 - 數(shù)據(jù)段:計(jì)數(shù)32 DS:ECX00 010 - 數(shù)據(jù)段:數(shù)據(jù)32 DS:EDX00 011 - 數(shù)據(jù)段:基址32 DS:EBX00 100 000 數(shù)據(jù)段:累加32+比例變址 DS:EAX+比例變址00 100 001 數(shù)據(jù)段:計(jì)數(shù)32+比例變址 DS:ECX+比例變址00 100 010 數(shù)據(jù)段:數(shù)據(jù)32+比例變址 DS:EDX+比例變址00 100 011 數(shù)據(jù)段:基址32+比例變址 DS:EBX+比例變址00 100 100 數(shù)據(jù)段:堆棧指針32+比例變址 DS:ESP+比例變址00 100 101 數(shù)據(jù)段:32位位移量+

25、比例變址 DS:32位位移量+比例變址00 100 110 數(shù)據(jù)段:源變址32+比例變址 DS:源變址32+比例變址00 100 111 數(shù)據(jù)段:目標(biāo)變址32+比例變址 DS:目標(biāo)變址32+比例變址00 101 - 數(shù)據(jù)段:32位位移量 DS:32位位移量00 110 - 數(shù)據(jù)段:源變址32 DS:ESI00 111 - 數(shù)據(jù)段:目標(biāo)變址32 DS:EDI01 000 - 數(shù)據(jù)段:累加32+8位位移量 DS:EAX+8位位移量01 001 - 數(shù)據(jù)段:計(jì)數(shù)32+8位位移量 DS:ECX+8位位移量01 010 - 數(shù)據(jù)段:數(shù)據(jù)32+8位位移量 DS:EDX+8位位移量01 011 - 數(shù)據(jù)段:

26、基址32+8位位移量 DS:EBX+8位位移量01 100 000 數(shù)據(jù)段:累加32+比例變址+8位位移量 DS:EAX+比例變址+8位位移量01 100 001 數(shù)據(jù)段:計(jì)數(shù)32+比例變址+8位位移量 DS:ECX+比例變址+8位位移量01 100 010 數(shù)據(jù)段:數(shù)據(jù)32+比例變址+8位位移量 DS:EDX+比例變址+8位位移量01 100 011 數(shù)據(jù)段:基址32+比例變址+8位位移量 DS:EBX+比例變址+8位位移量01 100 100 堆棧段:堆棧指針32+比例變址+8位位移量 SS:ESP+比例變址+8位位移量01 100 101 堆棧段:基址指針32+比例變址+8位位移量 SS

27、:EBP+比例變址+8位位移量01 100 110 數(shù)據(jù)段:源變址32+比例變址+8位位移量 DS:ESI+比例變址+8位位移量01 100 111 數(shù)據(jù)段:目標(biāo)變址32+比例變址+8位位移量 DS:EDI+比例變址+8位位移量01 101 - 堆棧段:基址指針32+8位位移量 SS:EBP+8位位移量01 110 - 數(shù)據(jù)段:源變址32+8位位移量 DS:ESI+8位位移量01 111 - 數(shù)據(jù)段:目標(biāo)變址32+8位位移量 DS:EDI+8位位移量10 000 - 數(shù)據(jù)段:累加32+32位位移量 DS:EAX+32位位移量10 001 - 數(shù)據(jù)段:計(jì)數(shù)32+32位位移量 DS:ECX+32位

28、位移量10 010 - 數(shù)據(jù)段:數(shù)據(jù)32+32位位移量 DS:EDX+32位位移量10 011 - 數(shù)據(jù)段:基址32+32位位移量 DS:EBX+32位位移量10 100 000 數(shù)據(jù)段:累加32+比例變址+32位位移量 DS:EAX+比例變址+32位位移量10 100 001 數(shù)據(jù)段:計(jì)數(shù)32+比例變址+32位位移量 DS:ECX+比例變址+32位位移量10 100 010 數(shù)據(jù)段:數(shù)據(jù)32+比例變址+32位位移量 DS:EDX+比例變址+32位位移量10 100 011 數(shù)據(jù)段:基址32+比例變址+32位位移量 DS:EBX+比例變址+32位位移量10 100 100 堆棧段:堆棧指針32

29、+比例變址+32位位移量 SS:ESP+比例變址+32位位移量10 100 101 堆棧段:基址指針32+比例變址+32位位移量 SS:EBP+比例變址+32位位移量10 100 110 數(shù)據(jù)段:源變址32+比例變址+32位位移量 DS:ESI+比例變址+32位位移量10 100 111 數(shù)據(jù)段:目標(biāo)變址32+比例變址+32位位移量 DS:EDI+比例變址+32位位移量10 101 - 堆棧段:基址指針32+32位位移量 SS:EBP+32位位移量10 110 - 數(shù)據(jù)段:源變址32+32位位移量 DS:ESI+32位位移量10 111 - 數(shù)據(jù)段:目標(biāo)變址32+32位位移量 DS:EDI+3

30、2位位移量指令代碼對(duì)照表說(shuō)明一、字段說(shuō)明 指令內(nèi)碼是中文匯編語(yǔ)言程序使用的指令內(nèi)部代碼,它是一個(gè)以數(shù)字編號(hào)為主體的字符串。中文名稱是中文匯編程序使用的指令名稱。英文名稱是對(duì)應(yīng)指令的英文名稱。操作數(shù)類型是指令操作數(shù)的種類,它包括:無(wú)操作數(shù);單操作數(shù)中的單寄存器、單內(nèi)存和單立即數(shù);雙操作數(shù)中的寄存器到寄存器、內(nèi)存到寄存器、立即數(shù)到寄存器、寄存器到內(nèi)存,立即數(shù)到內(nèi)存;三操作數(shù)中的寄存器到寄存器到寄存器、立即數(shù)到寄存器到寄存器、立即數(shù)到內(nèi)存到寄存器、立即數(shù)到寄存器到內(nèi)存。還有幾種特例種類,是寄存器被指定為累加器或是計(jì)數(shù)器寄存器。操作碼是唯一代表本指令意義的二進(jìn)制代碼,表中用十六進(jìn)制數(shù)表示。模數(shù)是“帶模

31、數(shù)的寄存器和寄/內(nèi)操作數(shù)”字節(jié)的最前兩位數(shù),用來(lái)指定“寄/內(nèi)”位是寄存器還是內(nèi)存地址及內(nèi)存位移量。操作數(shù)是指令的操作數(shù)具體表現(xiàn)形式,比如操作數(shù)類型是寄存器到寄存器,那么就可能是8位寄存器到8位寄存器或者16位寄存器到16寄存器等,具體請(qǐng)參照對(duì)應(yīng)表。操作數(shù)大小是操作數(shù)的長(zhǎng)度,通常是字節(jié)(Byte)、字(Word)或雙字(Dword),也有一些特有的指令的操作數(shù)大小為四字或更長(zhǎng)的操作數(shù)。符號(hào)是指指令的操作數(shù)是否有正負(fù)符號(hào)之分,如果有則指令操作碼的倒數(shù)第二位表示符號(hào)位。方向是指指令的源操作數(shù)與目標(biāo)操作數(shù)是從左到右還是從右到左的關(guān)系,0表示從左到右,1表示從右到左。芯片型號(hào)是指令適用的芯片類型,有80

32、86、386、Pentium 、AMD等值。操作數(shù)指令表示此指令的操作碼中是否含有操作數(shù),此類操作數(shù)通常為寄存器,且在占操作碼的最后三位。操作數(shù)預(yù)設(shè)值是表示有些指令的“帶模數(shù)的寄存器和寄/內(nèi)操作數(shù)”的字節(jié)中,第一個(gè)寄存器(從左到右兩位模數(shù)之后的三位)被預(yù)設(shè)為的定值。16位和32位字段是指令在匯編16位匯編模式下和在32匯編模式下對(duì)應(yīng)的前綴,用十六進(jìn)制數(shù)表示。二、簡(jiǎn)稱說(shuō)明 為了使表不至于過(guò)份冗長(zhǎng),使用下例簡(jiǎn)稱來(lái)表示內(nèi)容:寄-寄存器、內(nèi)-內(nèi)存、寄:XXX-指定的寄存器、數(shù)-立即數(shù)、數(shù):X-定值立即數(shù)、11-8位寄存器、12-16位寄存器、13-32位寄存器、41-8位立即數(shù)、數(shù)16-16位立即數(shù)、

33、數(shù)32-32位立即數(shù)、31-8位位移量、32-16位位移量、33-32位位移量。三、其它說(shuō)明 表中表示內(nèi)存的方式就是使用了NASM匯編風(fēng)格,所有的內(nèi)存地址都用中括號(hào)“”括起來(lái),所有沒(méi)有用中括號(hào)括起來(lái)的值(除在中括號(hào)之前用來(lái)修飾操作數(shù)大小的數(shù))都表示立即數(shù)或者寄存器。由于對(duì)內(nèi)存地址操作時(shí),并不知道操作數(shù)的大小,根據(jù)源操作數(shù)與目地操作數(shù)大小匹配的原則(除某些特例指令外),如果未能識(shí)別操作數(shù)大小的對(duì)內(nèi)存操作都有必要在內(nèi)存前面加操作數(shù)大小修飾,因此,在中括號(hào)前面有8、16或32數(shù)值是有來(lái)修飾操作數(shù)大小的,在匯編語(yǔ)言中常用byte、word或dword來(lái)修飾操作數(shù)的大小。在操作數(shù)字段中還有“=>”

34、和“<=”兩組符號(hào),它表示源操作數(shù)與目的操作數(shù)的關(guān)系,在操作數(shù)字段中,操作數(shù)的順序是按真實(shí)的指令操作數(shù)排列,對(duì)于許多有方向性指令的,通常操作碼的倒數(shù)第二位為方向位,“=>”這個(gè)符號(hào)的左邊為源操作數(shù),右邊為目的操作數(shù),“<=”符號(hào)與“=>”符號(hào)操作數(shù)相反。這樣看起來(lái)比較直觀,并且反映指令操作數(shù)的真實(shí)形式。對(duì)于有方向性的指令可解釋為“從源操作數(shù)到目的操作數(shù)”,而對(duì)于沒(méi)有方向性的指令可解釋為“源操作數(shù)作用于目的操作數(shù)”。這一點(diǎn)有別于所有當(dāng)前的匯編程序,當(dāng)前的匯編程序都是以逗號(hào)“,”隔開(kāi)操作數(shù),并默認(rèn)從左到右或從右到左為源操作數(shù)到目的操作數(shù)的順序。指令代碼對(duì)照表中文名稱英文名稱

35、操作數(shù)操作碼模數(shù)寄存器1寄內(nèi)器位移量立即數(shù)符號(hào)方向芯片型號(hào)16位32位調(diào)整加AAA0x378086調(diào)整除AAD0xD50A8086調(diào)整除AAD數(shù)80xD5110Pentium調(diào)整乘AAM0xD40A8086調(diào)整乘AAM數(shù)80xD410Pentium調(diào)整減AAS0x3F8086進(jìn)位加ADC寄:累加08<=數(shù)80x141038086進(jìn)位加ADC寄:累加16<=數(shù)160x1510380860x66進(jìn)位加ADC寄:累加32<=數(shù)320x151033860x66進(jìn)位加ADC寄8=>寄80x10111338086進(jìn)位加ADC寄16=>寄160x111113380860x66進(jìn)

36、位加ADC寄32=>寄320x11111333860x66進(jìn)位加ADC寄8<=寄80x12111338086進(jìn)位加ADC寄16<=寄160x131113380860x66進(jìn)位加ADC寄32<=寄32066進(jìn)位加ADC寄8<= 寄160x120015380860x67進(jìn)位加ADC寄8<=寄320x12001533860x67進(jìn)位加ADC寄16<=寄160x130015380860x6667進(jìn)位加ADC寄16<=寄320670x66進(jìn)位加ADC寄32<= 寄16066

37、0x67進(jìn)位加ADC寄32<=寄3206667進(jìn)位加ADC寄8<= 寄16+位移80x1201159380860x67進(jìn)位加ADC寄8<=寄32+位移80x120115933860x67進(jìn)位加ADC寄16<=寄16+位移80x1301159380860x6667進(jìn)位加ADC寄16<=寄32+位移80x130115933860x670x66進(jìn)位加ADC寄32<= 寄16+位移80x130115933860x660x67進(jìn)位加ADC寄32<=寄32+位移80x130115933860x6667進(jìn)位加ADC寄8<= 寄16+位

38、移160x1210159380860x67進(jìn)位加ADC寄8<=寄32+位移320x121015933860x67進(jìn)位加ADC寄16<=寄16+位移160x1310159380860x6667進(jìn)位加ADC寄16<=寄32+位移320x131015933860x670x66進(jìn)位加ADC寄32<= 寄16+位移160x131015933860x660x67進(jìn)位加ADC寄32<=寄32+位移320x131015933860x6667進(jìn)位加ADC寄16<=數(shù)80x8311010310有380860x66進(jìn)位加ADC寄32<=數(shù)80x8311010310有3386

39、0x66進(jìn)位加ADC寄8<=數(shù)80x801101031038086進(jìn)位加ADC寄16<=數(shù)160x8111010310380860x66進(jìn)位加ADC寄32<=數(shù)320x811101031033860x66進(jìn)位加ADC寄8=>寄160x100015380860x67進(jìn)位加ADC寄8=>寄320x10001533860x67進(jìn)位加ADC寄16=>寄160x110015380860x6667進(jìn)位加ADC寄16=> 寄320x11001533860x670x66進(jìn)位加ADC寄32=> 寄160x11001533860x660x67進(jìn)位加ADC寄32=&g

40、t; 寄320x11001533860x6667進(jìn)位加ADC寄8=>寄16+位移80x1001159380860x67進(jìn)位加ADC寄8=>寄32+位移80x100115933860x67進(jìn)位加ADC寄16=>寄16+位移80x1101159380860x6667進(jìn)位加ADC寄16=> 寄32+位移80x110115933860x670x66進(jìn)位加ADC寄32=> 寄16+位移80x110115933860x660x67進(jìn)位加ADC寄32=> 寄32+位移80x110115933860x6667進(jìn)位加ADC寄8=>寄16+位移160x1010159380860x67進(jìn)位加ADC寄8=>寄32+位移320x101015933860x67進(jìn)位加ADC寄16=>寄16+位移160x1110159380860x6667進(jìn)位加ADC寄16=> 寄32+位移320x111015933860x670x66進(jìn)位加ADC寄32=&

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論