freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

匯編指令二進(jìn)制代碼手冊(已修改)

2025-04-21 01:54 本頁面
 

【正文】 匯編指令與二進(jìn)制代碼對應(yīng)手冊匯編指令與二進(jìn)制代碼具有一一對應(yīng)關(guān)系,也就是說,一條匯編指令必將唯一對應(yīng)一條二進(jìn)制代碼指令,而一條二進(jìn)制代碼指令也唯一對應(yīng)一條匯編指令,這就為寫一個(gè)匯編語言與二進(jìn)制指令相互對應(yīng)的參考表成為可能。手冊的使用范圍本手冊的讀者需要據(jù)有一定的計(jì)算機(jī)專業(yè)知識,了解CPU的工作原理及內(nèi)部的體系結(jié)構(gòu),熟悉IBM匯編、NASM或其它匯編語言,并且對匯編語言指令的二進(jìn)制代碼有足夠的興趣。本手冊列出了絕大部分的中文匯編指令與二進(jìn)制指令的對應(yīng)關(guān)系,及相應(yīng)的英文匯編指令名稱。由于作者水平有限,而且本手冊主要是對照NASM匯編語言指令集、《Intel 微處理器結(jié)構(gòu)、編程與接口》中文第六版及其Intel公司公布的《IA32 Intel Architecture Software Developer’s Manual》2001年版的PDF格式文檔指令集而生成的,或許有一些比較新的指令或者其他CPU特有的指令,并未收集在本手冊中。匯編指令解析一、操作碼 匯編指令按其功能可分為:一般指令、浮點(diǎn)指令、多媒體指令和SIMD流式擴(kuò)展(SSE)指令。匯編指令因其繁多且對應(yīng)的二進(jìn)制代碼有多種變化而變得異常復(fù)雜,二進(jìn)制代碼的指令都是由操作碼與操作數(shù)構(gòu)成,就指令與操作數(shù)的關(guān)系而言,指令無非是無操作數(shù)、單操作數(shù)、雙操作數(shù)和三操作數(shù)。所謂的操作碼就是唯一代表著指令的意義的一段二進(jìn)制碼,操作碼可以是單字節(jié)或者是雙字節(jié)。有一種特殊的操作碼,它與操作數(shù)合起來共用一個(gè)字節(jié)或者兩個(gè)字節(jié),這種操作碼的操作數(shù)都是寄存器,而且寄存器的二進(jìn)制代碼都為這操作碼字節(jié)的最后三位,在參照表中用“操作數(shù)指令”字段表示,如果這個(gè)段中的數(shù)據(jù)為“是”就表示這個(gè)操作碼是與寄存器操作數(shù)共用一個(gè)字節(jié)或兩個(gè)字節(jié),否則就不是。從對照表中,我們可以看出,實(shí)事上二進(jìn)制操作碼與匯編指令名稱并非一一對應(yīng),一條匯編指令的名稱如:轉(zhuǎn)移指令,它可以對應(yīng)多個(gè)操作碼,只有當(dāng)指令名稱與指令操作數(shù)合在一起,才與操作碼和操作數(shù)有一一對應(yīng)的關(guān)系。也就是說同一個(gè)指令名稱,指令操作數(shù)類型不同,對應(yīng)的二進(jìn)制操作碼也可能不同。操作碼在對照表是用“操作碼”字段表示。在操作碼字節(jié)中通常又有方向位、符號位、操作數(shù)大小修飾位值得注意,它們都用一個(gè)二進(jìn)制位來表示,方向位與符號位通常都在操作碼的倒數(shù)第二位,而操作數(shù)修飾位通常在操作碼的最后一位。舉例說明:如果倒數(shù)第二位是方向位,那么如果這一位值為0,那么表示操作數(shù)是從左到右,如果是1表示操作數(shù)從右到左;如果倒數(shù)第二位是表示符號位,那么如果這一位值為0表示操作數(shù)是無符號操作數(shù),如果值為1表示操作數(shù)為有符號操作數(shù);如果最后一位是修飾操作數(shù)位,那么最后一位為0表示操作數(shù)是八位操作數(shù),就是字節(jié)操作數(shù),最后一位為1表示操作數(shù)大小由匯編模式?jīng)Q定,如果是16位匯編就表示是16位操作數(shù),即字操作數(shù),如果是32位匯編就表示是32位操作數(shù),即雙字操作數(shù)。匯編模式是16位還是32位,由匯編代碼決定,在NASM匯編中默認(rèn)為32位模式,如果代碼顯示地給出BIT16就表示匯編成16位模式,如果代碼顯示地給出BIT32就表示匯編成32位模式。匯編模式不同,操作數(shù)也不相同,具體請看操作數(shù)節(jié)中介紹。二、操作數(shù) 計(jì)算機(jī)指令之所以復(fù)雜的一個(gè)主要原因就是操作數(shù)有多種變化,最為簡單的指令就是無操作數(shù)指令。其中操作數(shù)可以是立即數(shù)、寄存器和內(nèi)存地址。通常情況下,操作數(shù)含有立即數(shù)的指令與不含立即數(shù)的指令,指令操作碼不同;操作數(shù)都為寄存器的,通用寄存器、段寄存器、控制寄存器、調(diào)試寄存器和任務(wù)寄存器的指令操作碼不同;多媒體指令、浮點(diǎn)指令和SIMD指令都有各自的指令系統(tǒng)。最為復(fù)雜的變化是當(dāng)操作數(shù)為寄存器或內(nèi)存的時(shí)候,之所以把它們放在一起,是因?yàn)樗鼈兌加梢粋€(gè)叫做模數(shù)(MOD)的兩位二進(jìn)制數(shù)來決定。計(jì)算機(jī)指令是如何分辨多變的操作數(shù)的呢?前面提到,如果操作數(shù)是立即數(shù),那么就用操作碼來區(qū)分。當(dāng)操作數(shù)是寄存器或是內(nèi)存地址時(shí),主要是用一個(gè)字節(jié)來區(qū)分,這個(gè)字節(jié)的前兩位就是模數(shù)(MOD),后三位是寄存器的二進(jìn)制代碼,最后三位的值由開始兩位的模數(shù)來決定具體的類型,如果模數(shù)為11那么最后三位就用來表示寄存器。內(nèi)存地址是用寄存器的值來表示的,有的內(nèi)存地址帶有位移量,于是,當(dāng)模數(shù)為00時(shí)字節(jié)的最后三位就表示寄存器內(nèi)的數(shù)據(jù)是內(nèi)存地址,并且沒有位移量,當(dāng)模數(shù)為01時(shí),字節(jié)最后三位表示寄存器內(nèi)的數(shù)據(jù)是內(nèi)存地址,并且在這一字節(jié)之后有8位數(shù)的位移量,當(dāng)模數(shù)為10時(shí)字節(jié)后面有16位或32位,是16位還是32位由匯編模式來決定。16位模式常用于實(shí)模式,可使用16位寄存器,如AX、BX等,32位常用于保護(hù)模式,可使用32位寄存器,如EAX、EBX等。然而,只用一個(gè)字節(jié)的最后三位來表示內(nèi)存地址,不可能用來表示眾多的寄存器組合,于是模數(shù)為00時(shí)(沒有位移量),就有在16位匯編模式,當(dāng)nnn=000(nnn表示是用來表示內(nèi)存的三位二進(jìn)制數(shù))時(shí),內(nèi)存地址為DS:[BX+SI],在32位匯編模式時(shí)nnn=000,內(nèi)存地址為DS:[EAX],其它的值請參照后面的對應(yīng)表。于是,我們知道了,計(jì)算機(jī)指令是通過模數(shù)、寄存器和寄/內(nèi)三個(gè)域來決定操作數(shù)的,其實(shí)除此之外,還有一種特殊的情況,就是操作數(shù)并沒有都用到這三個(gè)域,而是把第二個(gè)域的值設(shè)為一個(gè)預(yù)設(shè)值,也就是說,第二個(gè)用來表示寄存器的域設(shè)成了固定值,而不是可變的寄存器,那么這就出現(xiàn)了只有一個(gè)寄存器或是內(nèi)存地址操作數(shù)的變型,其實(shí)它是由前一種類型變化得來的。有三個(gè)操作數(shù)的指令又是如何的呢?實(shí)事上搞明白了上一種變化,三個(gè)操作數(shù)就很容易了,它只不過是在兩個(gè)寄存器或內(nèi)存地址操作數(shù)之后再加一個(gè)立即數(shù),這種情況同樣有一種特例,那就是有兩個(gè)相同寄存器操作數(shù),和一個(gè)立即數(shù),那么在寫匯編代碼的時(shí)候就把這種情況認(rèn)為是一個(gè)寄存器和一個(gè)立即數(shù),而實(shí)際翻譯成二進(jìn)制代碼時(shí)要翻譯成兩個(gè)相同的寄存器和一個(gè)立即數(shù),它同樣是屬于三個(gè)操作數(shù)的情況,IMUL指令就屬于這一種特例。在具體的指令中還有一些例外,比如,一個(gè)看上去只有一個(gè)操作碼,不含操作數(shù)的指令,而實(shí)際上它有隱含的寄存器作為它的操作數(shù)如計(jì)數(shù)寄存器,或者它的寄存器操作數(shù)被指令指定了,而不是可變的,如只使用累加寄存器,這也是比較常見的,這些在對照表中有詳細(xì)的注明。三、指令前綴 有些指令通過添加前綴來改變默認(rèn)段或超越指令模式。所謂超越指令模式是指在16位匯編模式時(shí)使用了32位的寄存器或者由32位寄存器組成的內(nèi)存地址,或者在32位匯編模式時(shí)使用了16位寄存器或者由16位寄存器組成的內(nèi)存地址。當(dāng)使用超越前綴時(shí),應(yīng)把前綴字節(jié)放在指令的面前,有多個(gè)前綴時(shí)前綴字節(jié)沒有順序地排列。超越前綴表前綴字節(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 對操作數(shù)長度的指令模式超越67H 對內(nèi)存地址長度的指令模式超越F0H 鎖(LOCK)指令前綴F2H 不相等重復(fù)/不為零重復(fù)前綴(REPNE/REPNZ)指令前綴(只適用于字符串操作指令)F3H 重復(fù)(REP)指令前綴(只適用于字符串操作指令)F3H 相等重復(fù)/為零重復(fù)前綴(REP/REP)指令前綴(只適用于字符串操作指令)四、總結(jié) 通過以上的分析,我們可以總結(jié)出計(jì)算機(jī)指令的結(jié)構(gòu),由于286以前(含286)的處理器只能識別16位地址指令,且不能識別超越前綴字節(jié),因此,這種16位地址指令的格式又與32位地址,即386以后(含386)的處理器的指令格式有所不同,如下表: 16位計(jì)算機(jī)指令格式(適用于286以前的處理器) 操作碼操作數(shù)0x…帶模數(shù)的寄存器和寄/內(nèi)操作數(shù)內(nèi)存位移量立即數(shù)12字節(jié)01字節(jié)02字節(jié)02字節(jié)32位計(jì)算機(jī)指令格式(適用于386以后的處理器)指令超越前綴操作碼操作數(shù)0x66/0x67…0x…帶模數(shù)的寄存器和寄/內(nèi)操作數(shù)比例變址*內(nèi)存位移量立即數(shù)由前綴個(gè)數(shù)而定12字節(jié)01字節(jié)01字節(jié)04字節(jié)04字節(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ù) jjj是三位表示的寄存器 nnn是三位用寄存器的值來表示的內(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)存位移量”域不取值,沒有位移量當(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ù)操作數(shù)則由操作碼來決定。如果匯編代碼指定為16位匯編模式,但指令的操作數(shù)中使用了32位的寄存器,則就需要在指令前加0x66的超越前綴,如果是使用了32位寄存器的值來表示內(nèi)存地址,則需要在指令前加0x67的超越前綴,同理,匯編代碼指定為32位匯編模式時(shí),在指令的操作數(shù)中使用了16位的寄存器,也需要在指令前加0x66的超越前綴,如果是使用了16位寄存器的值來表示內(nèi)存地址,則需要在指令前加0x67的超越前綴。其每條指令的這兩種超越前綴已經(jīng)在指令對照表中完整給出。 寄存器中文英文命名對照表 類型中文名稱英文名稱二進(jìn)制碼寄存器說明多 功 能 寄 存 器累加低八AL000累加寄存器低八位累加高八AH100累加寄存器低八位累加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)制碼寄存器說明指針寄存器堆棧指針16SP10016位堆棧指針寄存器堆棧指針32ESP10032位堆棧指針寄存器基址指針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)志段寄存器全局段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任務(wù)寄存器一任務(wù)二TR2010任務(wù)寄存器二任務(wù)三TR3011任務(wù)寄存器三任務(wù)四TR4100任務(wù)寄存器四任務(wù)五TR5101任務(wù)寄存器五任務(wù)六TR6110任務(wù)寄存器六任務(wù)七TR7111任務(wù)寄存器七浮點(diǎn)寄存器浮點(diǎn)零ST
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
公安備案圖鄂ICP備17016276號-1