中南大學(xué)微機(jī)原理與接口技術(shù)課件3_第1頁(yè)
中南大學(xué)微機(jī)原理與接口技術(shù)課件3_第2頁(yè)
中南大學(xué)微機(jī)原理與接口技術(shù)課件3_第3頁(yè)
中南大學(xué)微機(jī)原理與接口技術(shù)課件3_第4頁(yè)
中南大學(xué)微機(jī)原理與接口技術(shù)課件3_第5頁(yè)
已閱讀5頁(yè),還剩90頁(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)介

3.1基本數(shù)據(jù)類型3.2IA-32的指令格式3.3IA-32指令的操作數(shù)尋址方式3.4IA-32的通用指令退出第3章IA-32指令系統(tǒng)3.1基本數(shù)據(jù)類型 IA-32結(jié)構(gòu)的基本數(shù)據(jù)類型是字節(jié)、字、雙字、四字和雙四字,如圖3-1所示。

一個(gè)字節(jié)是8位,一個(gè)字是兩個(gè)字節(jié)(16位),雙字是4字節(jié)(32位),四字是8字節(jié)(64位),雙四字是16字節(jié)(128位)。3.1.1字、雙字、四字和雙四字的對(duì)齊 字、雙字和四字在內(nèi)存中并不需要對(duì)齊至自然邊界(字、雙字和四字的自然邊界是偶數(shù)編號(hào)的地址,對(duì)于雙字和四字來(lái)說(shuō),地址要分別能被4和8整除)。 然而,為改進(jìn)程序的性能,數(shù)據(jù)結(jié)構(gòu)(特別是堆棧)只要可能應(yīng)對(duì)齊在自然邊界上。這樣做的理由是:對(duì)于不對(duì)齊的存儲(chǔ)訪問(wèn),處理器要求做兩次存儲(chǔ)訪問(wèn)操作;而對(duì)于對(duì)齊的訪問(wèn)只要做一次存儲(chǔ)訪問(wèn)操作。3.1.2數(shù)字?jǐn)?shù)據(jù)類型1.整數(shù) IA-32結(jié)構(gòu)定義兩種類型整數(shù):無(wú)符號(hào)整數(shù)和符號(hào)整數(shù)。無(wú)符號(hào)整數(shù)是原始二進(jìn)制值,范圍從0到所選擇的操作數(shù)尺寸能編碼的最大正數(shù)。符號(hào)整數(shù)是2的補(bǔ)碼二進(jìn)制值,能用于表示正的和負(fù)的整數(shù)值。(一些指令只能在一種整數(shù)類型上使用,如MIUL、MUL、IDIV、DIV、FIADD、FISUB等) (1)無(wú)符號(hào)整數(shù) 無(wú)符號(hào)整數(shù)是包含字節(jié)、字、雙字和四字中的無(wú)符號(hào)的二進(jìn)制數(shù)。它們的值的范圍,對(duì)于字節(jié)是從0到255;對(duì)于字,從0到65535;對(duì)于雙字,從0到232–1;對(duì)于四字,從0到264–1。

(2)符號(hào)整數(shù) 符號(hào)整數(shù)是保存在字節(jié)、字、雙字或四字中的帶符號(hào)的二進(jìn)制數(shù)。對(duì)于符號(hào)整數(shù)的所有操作都假定用2的補(bǔ)碼表示。 整數(shù)值的范圍,對(duì)于字節(jié),從–128到+127;對(duì)于字從–32768到+32767;對(duì)于雙字,從–231到+231–1;對(duì)于四字,從–263到+263–1。2.浮點(diǎn)數(shù)據(jù)類型 IA-32結(jié)構(gòu)定義和操作三種浮點(diǎn)數(shù)據(jù)類型:?jiǎn)尉雀↑c(diǎn)、雙精度浮點(diǎn)和雙擴(kuò)展的精度浮點(diǎn)。 這些數(shù)據(jù)類型的數(shù)據(jù)格式與IEEE標(biāo)準(zhǔn)754二進(jìn)制浮點(diǎn)算術(shù)所規(guī)定的格式直接相對(duì)應(yīng)。3.1.3指針數(shù)據(jù)類型 指針是內(nèi)存單元的地址(見(jiàn)圖3-4)。IA-32結(jié)構(gòu)定義兩種類型的指針:近(Near)指針(32位)和遠(yuǎn)(Far)指針(48位)。Near指針是段內(nèi)的32位偏移量(也稱為有效地址)。Near指針在平面存儲(chǔ)模式中用于所有存儲(chǔ)器引用;或在分段存儲(chǔ)模式中用于同一段內(nèi)的存儲(chǔ)器引用。Far指針是一個(gè)48位的邏輯地址,包含16位段選擇子和32位的偏移。Far指針用于在分段存儲(chǔ)模式中的跨段存儲(chǔ)引用。對(duì)8086而言,分別為16位?3.1.4位字段數(shù)據(jù)類型 一位字段是連續(xù)的位序列。它能在內(nèi)存中任何字節(jié)的任一位位置開(kāi)始,并能包含多至32位。3.1.5串?dāng)?shù)據(jù)類型 串是位、字節(jié)、字或雙字的連續(xù)序列。位串能從任一字節(jié)的任一位開(kāi)始并能包含多至232–1位。字節(jié)串能包含字節(jié)、字或雙字,其范圍能從0至232–1字節(jié)(4G字節(jié))。3.2IA-32的指令格式指令有以下格式:label(標(biāo)號(hào)):mnemonic(助記符)argument1(參數(shù)1),argument2(參數(shù)2),argument3(參數(shù)3)其中:

標(biāo)號(hào)(label)是一標(biāo)識(shí)符后面跟有冒號(hào)(∶)。

助記符(mnemonic)是一類具有相同功能的指令操作碼的保留名。

操作數(shù)參數(shù)1(argument1)、參數(shù)2(argument2)和參數(shù)3(argument3)是任選的。可以有零至三個(gè)操作數(shù),取決于操作碼。若存在,它們可能是文字或數(shù)據(jù)項(xiàng)的標(biāo)識(shí)符、操作數(shù)標(biāo)識(shí)符,或者是寄存器的保留名,或者是在程序的另一部分中聲明的賦予數(shù)據(jù)項(xiàng)的標(biāo)識(shí)符。例如:LOADREG:MOVEAX,SUBTOTALLOADREG:MOVAX,SUBTOTAL補(bǔ)充8086的尋址方式

操作數(shù)的尋址方式1.立即數(shù)尋址

在這種尋址方式中,操作數(shù)直接跟在操作碼的后面,參加指令所規(guī)定的操作,并且操作數(shù)與操作碼一起放在代碼段中。這種方式叫立即數(shù)尋址方式。

例:MOVAX,1234H這條指令的功能是:把立即數(shù)1234H送入AX中。

圖3-1立即尋址示意圖2.寄存器尋址如果操作數(shù)就在CPU的內(nèi)部寄存器中,那么寄存器名在指令中給出。這種尋址方式就叫寄存器尋址方式。例:MOVDS,AX圖3-2寄存器尋址示意圖

對(duì)16位操作數(shù)來(lái)說(shuō),寄存器可以為AX、BX,CX,DX、SI、DI、SP或者BP,對(duì)于8位操作數(shù)來(lái)說(shuō),寄存器可為AH,AL、BH,BL,CH,CL、DH,DL。

采用寄存器尋址方式的指令在執(zhí)行時(shí),操作就在CPU內(nèi)部進(jìn)行,不需要使用總線周期,因此,執(zhí)行速度快。

3.直接尋址使用直接尋址方式時(shí),數(shù)據(jù)總是在存儲(chǔ)器中,存儲(chǔ)單元的有效地址由指令直接指出,所以直接尋址是對(duì)存儲(chǔ)器進(jìn)行訪問(wèn)時(shí)可采用的最簡(jiǎn)單的方式。假如DS=3000H

例:MOVAX,DS:[2010H]物理地址=DS×16+2010H=3000H×16+2010H=32010H指令功能是將32010H和32011H兩單元的內(nèi)容送到AX中。要注意的是采用直接尋址方式時(shí),如果指令前面沒(méi)有用前綴指明操作數(shù)在哪一段,則默認(rèn)為段寄存器是數(shù)據(jù)段寄存器DS。

4.寄存器間接尋址采用寄存器間接尋址方式時(shí),操作數(shù)一定在存儲(chǔ)器中,存儲(chǔ)單元的有效地址由寄存器指出,這些寄存器可以為BX、BP,SI和DI之一,由于上述4個(gè)寄存器所黙認(rèn)的段寄存器不同,這樣又可以分兩種情況:

以SI、DI、BX進(jìn)行間接尋址,則操作數(shù)通常存放在現(xiàn)行數(shù)據(jù)段中。此時(shí)數(shù)據(jù)段寄存器內(nèi)容加上SI、DI、BX中的16位段內(nèi)偏移地址,即得操作數(shù)的地址

例:MOVAX,[SI]和直接尋址的情況—樣,如果指令前面沒(méi)有用前綴指明具體的段寄存器,則尋址時(shí)默認(rèn)的段寄存器通常為DS。如寄存器為BP時(shí),則對(duì)應(yīng)的段寄存器為SS。

②寄存器BP間接尋址,則操作數(shù)存放在堆棧段區(qū)域中。此時(shí)堆棧段寄存器內(nèi)容加上BP中的16位段內(nèi)偏移地址,即得操作數(shù)的地址。假如SS=3000H例:MOVAX,[BP]物理地址=SS×16+BP=30000H+2000H=32000H指令功能是將32000H和32001H兩單元的內(nèi)容送到AX中。

5.寄存器相對(duì)尋址在這種尋址方式中,操作數(shù)存放在存貯器中。操作數(shù)的地址是由段寄存器內(nèi)容加上SI、DI、BX、BP之一的內(nèi)容,再加上由指令所指出的8位或16位相對(duì)地址偏移量而得到的

例:MOVAX,DISP[SI]物理地址=DS×16+SI+DISP=30000H+1000H+0300H=31300H指令功能是將31300H和31301H兩單元的內(nèi)容送到AX中。

6.基址、變址尋址在8086中,通常把BX和BP作為基址寄存器,而把SI、DI作為變址寄存器。將這兩種寄存器聯(lián)合起來(lái)進(jìn)行的尋址就稱為基址、變址尋址。這時(shí),操作數(shù)的地址應(yīng)該是段寄存器內(nèi)容×16加上基址寄存器內(nèi)容(BX或BP內(nèi)容),再加上變址寄存器內(nèi)容(SI或DI內(nèi)容)而得到的.例:MOVAX,[BX][SI]物理地址=DS×16+SI+BX=30000H+1000H+3000H=34000H指令功能是將34000H和34001H兩單元的內(nèi)容送到AX中。

例:MOVAX,[BP][SI]物理地址=SS×16+BP+SI=30000H+3000H+1000H=34000H指令功能是將340000H和34001H兩單元的內(nèi)容送到AX中。

例:MOVAX,DISP[BX][SI]物理地址=DS×16+SI+BX+DISP=30000H+1000H+3000H+0300H=34300H指令功能是將34300H和34301H兩單元的內(nèi)容送到AX中。

7.基址、變址相對(duì)尋址這種尋址實(shí)際上是基址、變址尋址的擴(kuò)充。即操作數(shù)的地址是由基址、變址方式得到的地址再加上由指令指明的8位或16位的相對(duì)偏移地址而得到的

3.1.2轉(zhuǎn)移地址的尋址方式1.段內(nèi)直接尋址段內(nèi)直接尋址方式也稱為相對(duì)尋址方式,轉(zhuǎn)移的目標(biāo)地址是當(dāng)前IP內(nèi)容和一個(gè)8位或16位的位移量DISP之和。即物理地址=CS×16+I(xiàn)P+DISP例:JMPDISP圖3-10中,1000H是CPU讀取這條指令的位移量50H后IP的內(nèi)容。所以,該指令使CPU轉(zhuǎn)向31050H去執(zhí)行。

2.段內(nèi)間接尋址這種尋址方式在段內(nèi)進(jìn)行,其轉(zhuǎn)移的目標(biāo)地址是16位寄存器或兩個(gè)相鄰的存儲(chǔ)單元的內(nèi)容,即以寄存器或存儲(chǔ)器單元內(nèi)容來(lái)更新IP的內(nèi)容。如圖3-11所示。例:JMPCXJMPWORDPTR[BX]3.段間直接尋址在這種尋址方式中,指令碼中將直接給出16位的段地址和16位的段內(nèi)偏移地址。例:JMPFARPTRDADD14.段間間接尋址這種尋址方式和段內(nèi)間接尋址相似。但是,由于確定轉(zhuǎn)移地址需要32位信息,因此只適用于存貯器尋址方式。用這種尋址方式可計(jì)算出存放轉(zhuǎn)移地址的存貯單元的首地址,與此相鄰的4個(gè)單元中,前兩個(gè)單元存放16位的段內(nèi)偏移地址;而后兩單元存放的是16位的段地址,如圖3-13所示。例:JMPDWORDPTR[BP][DI]3.3IA-32指令的操作數(shù)尋址方式3.3.1立即數(shù) 某些指令用包含在指令中的數(shù)據(jù)作為源操作數(shù)。這些操作數(shù)稱為立即操作數(shù)(或簡(jiǎn)單稱為立即數(shù))。在這種尋址方式中,操作數(shù)直接跟在操作碼的后面,參加指令所規(guī)定的操作,且操作數(shù)與操作碼一起放在代碼段中指令可以有0個(gè)或多個(gè)操作數(shù),一些是顯式的、一些是隱含的。操作數(shù)可以在以下幾個(gè)地方存放:指令本身、寄存器、存儲(chǔ)單元、I/O端口例:MOVAX,1234H這條指令的功能是:把立即數(shù)1234H送入AX中。

指令DIV、IDIV不容許遠(yuǎn)操作數(shù)是立即數(shù)3.3.2寄存器操作數(shù) 源和目的操作數(shù)能在寄存器中。含下列寄存器:32位通用寄存器、16位通用寄存器、8位通用寄存器、段寄存器、標(biāo)志寄存器、系統(tǒng)寄存器。其他寄存器不能作為操作數(shù)的存儲(chǔ)地址。當(dāng)含有一對(duì)32位為寄存器/16位寄存器時(shí),用冒號(hào)間隔,如:EDX:EAX(操作數(shù)為64位)如果操作數(shù)就在CPU的內(nèi)部寄存器中,那么寄存器名在指令中給出。這種尋址方式就叫寄存器尋址方式。3.3.3存儲(chǔ)器操作數(shù) 在內(nèi)存中的源和目的操作數(shù)由段選擇子和偏移量引用。8086中是采用段寄存器中段基址和偏移量引用。1.規(guī)定段選擇子(段基址) 段選擇子/段基址能隱含或顯式規(guī)定。規(guī)定段選擇子/段基址的最簡(jiǎn)單的方法是把它加載至段寄存器,然后允許處理器根據(jù)正在執(zhí)行的操作類型,隱含地選擇相應(yīng)的段寄存器。在從內(nèi)存中存/取數(shù)據(jù)時(shí),DS段默認(rèn)能被超越以容許訪問(wèn)其他段。,段超越用“:”處理。MOVES:[EBX],EAX:將EAX中數(shù)據(jù)傳送到以ES指向的段(偏移量在EBX中)。不能被超越的有:1)指令必須在代碼段;2)串操作中的目的串必須存儲(chǔ)在ES指向的數(shù)據(jù)段;3)堆棧操作必須引用堆棧段SS;一些指令要求顯式的規(guī)定一段選擇子/段基址。2.規(guī)定偏移量 內(nèi)存地址的偏移量部分或者直接作為一個(gè)靜態(tài)值(稱為位移量)規(guī)定或者由以下一個(gè)或多個(gè)成員通過(guò)計(jì)算得到地址:

位移量——一個(gè)8位、16位或32位值。

基地址——在通用寄存器中的值。

索引——在通用寄存器中的值。

比例系數(shù)——值2、4或8,用于與索引值相乘。 由這些成員相加的結(jié)果稱為有效地址。這些成員中,除比例系數(shù)外其它的每一個(gè)都能為正或負(fù)(2的補(bǔ)碼)。圖3-9顯示了這些成員能組合成在所選擇的段中的有效地址的所有可能的方法。3.3.4I/O端口尋址 處理器支持多至包含65536個(gè)8位I/O端口的I/O地址空間。在I/O地址空間中也可以定義16位和32位的端口。I/O端口可以用立即操作數(shù)或在DX寄存器中的值尋址。用立即數(shù)尋址,只能用8位立即數(shù),可尋址I/O地址空間的前256個(gè)端口;用DX寄存器間接尋址,可尋址全部I/O地址空間。3.4IA-32的通用指令3.4.1數(shù)據(jù)傳送指令 數(shù)據(jù)傳送指令在內(nèi)存和通用寄存器和段寄存器之間傳送數(shù)據(jù)。它們也執(zhí)行特殊的操作,例如條件傳送、堆棧訪問(wèn)和數(shù)據(jù)轉(zhuǎn)換。1.MOV指令 MOV指令是最常用的數(shù)據(jù)傳送指令。它的格式是: MOV DOPD,SOPD 它有兩個(gè)操作數(shù),左邊的是目標(biāo)操作數(shù)(DOPD),右邊的是源操作數(shù)(SOPD)。它把8位、16位或32位源操作數(shù)傳送至目的地。它在通用寄存器之間、存儲(chǔ)器和通用寄存器或段寄存器之間傳送數(shù)據(jù),或把立即數(shù)傳送至通用寄存器。2.條件傳送指令 CMOVccDOPD,SOPD 這是由PentiumPRO(即第六代處理器結(jié)構(gòu))引入的條件傳送指令。在傳送前,先檢查由EFLAGS的狀態(tài)位(主要是進(jìn)位標(biāo)志CF、符號(hào)標(biāo)志SF、零標(biāo)志ZF和溢出標(biāo)志OF)構(gòu)成的條件是否符合指定的條件,若符合指定的條件,則源操作數(shù)(SOPD)傳送至目標(biāo)操作數(shù)(DOPD);否則,目標(biāo)操作數(shù)不變。3.交換指令 (1)XCHG指令 XCHG DOPD,SOPD 這是一條交換指令,它有兩個(gè)操作數(shù):DOPD和SOPD,指令的功能是使兩個(gè)操作數(shù)交換。這條指令的操作數(shù)可以是一個(gè)字節(jié)或一個(gè)字。 (2)BSWAP指令 這是一條字節(jié)對(duì)換指令。它的格式為: BSWAPDOPD 它只有一個(gè)操作數(shù),它使32位(目標(biāo))寄存器的字節(jié)順序反向,即使位0到7與位24到31對(duì)換,位8到15與位16到23對(duì)換。此指令用于小數(shù)在前的值與大數(shù)在前的值相互轉(zhuǎn)換。(3)XADD交換并相加指令指令的格式為:XADD DOPD,SOPD 它用第二個(gè)操作數(shù)(源操作數(shù))與第一個(gè)操作數(shù)(目的操作數(shù))交換,然后把兩個(gè)值的和裝入目的操作數(shù)。目的操作數(shù)可以是寄存器或內(nèi)存單元,源操作數(shù)是一寄存器。(4)CMPXCHG比較和交換指令指令的格式為:CMPXCHG DOPD,SOPD 此指令有兩個(gè)操作數(shù),它把累加器AL、AX或EAX寄存器的值(取決于操作數(shù)的尺寸)與目標(biāo)操作數(shù)相比較。若兩值相等,則把源操作數(shù)(SOPD)的值加載至目標(biāo)操作數(shù)(DOPD);否則,目標(biāo)操作數(shù)加載至累加器(AL、AX或EAX)。 (5)CMPXCHG8B比較和交換8字節(jié)指令 此指令的格式為: CMPXCHG8B DOPD(64位內(nèi)存操作數(shù)) 此指令把64位在內(nèi)存中的目標(biāo)操作數(shù)與EDX:EAX中的64位值相比較,若相等,則把包含在ECX:EBX中的64位值存儲(chǔ)至目標(biāo)操作數(shù);否則,把目標(biāo)操作數(shù)中的值存入EDX:EAX寄存器對(duì)。目標(biāo)操作數(shù)是8字節(jié)的內(nèi)存單元。對(duì)于EDX:EAX和ECX:EBX寄存器對(duì),EDX和ECX包含64位值的高32位,而EAX和EBX包含64位值的低32位。4.堆棧操作指令 (1)入棧指令 PUSHDOPD 操作數(shù)的長(zhǎng)度為字或雙字,在入棧操作時(shí),把一個(gè)字(或雙字)從源操作數(shù)傳送至由SP(ESP)所指向的堆棧的頂部。 每一個(gè)指令分兩步執(zhí)行: 先SP-1→SP,然后把AH(寄存器中的高位字節(jié))送至SP所指的單元;再次使SP-1→SP,把AL(寄存器中的低位字節(jié))送至SP所指的單元。 (2)出棧指令 POPDOPD 把現(xiàn)行SP所指向的堆棧頂部的一個(gè)字(或雙字),送至指定的目的操作數(shù);同時(shí)進(jìn)行修改堆棧指針的操作,即SP+2→SP。 (3)PUSHA/PUSHAD推入通用寄存器至堆棧 PUSHA(PushAll)推入所有的16位(即8086)的通用寄存器至堆棧。 PUSHAD(PushAllDouble)推入所有32位的通用寄存器至堆棧。 (4)POPA/POPAD自堆棧彈出至通用寄存器 POPA(PopAll)自堆棧彈出至16位通用寄存器。 POPAD(PopAllDouble)自堆棧彈出至32位通用寄存器。5.輸入輸出指令 (1)IN 輸入指令。允許把一個(gè)字節(jié)或一個(gè)字由一個(gè)輸入端口(port),傳送至AL(若是一個(gè)字節(jié))、AX(若是一個(gè)字)或EAX(雙字)。 (2)OUT 輸出指令。允許把在AL中的一個(gè)字節(jié)、在AX中的一個(gè)字或在EAX中的一個(gè)雙字,傳送至一個(gè)輸出端口。6.?dāng)U展指令 (1)CWD/CDQ CWD能把在AX中的字的符號(hào)擴(kuò)展至DX中(形成32位操作數(shù))。若AX<8000,則0→DX;否則FFFFH→DX。 CDQ把在EAX中的雙字的符號(hào)擴(kuò)展送至EDX中(形成64位操作數(shù))。若EAX<80000000H,則0→EDX;否則,F(xiàn)FFFFFFFH→EDX。

(2)CBW/CWDE CBW把在寄存器AL中的字節(jié)的符號(hào)送至AH中(形成16位操作數(shù))。若AL<80H,則擴(kuò)展后0→AH;若AL>=80H,則擴(kuò)展以后FFH→AH。 CWDE把在寄存器AX中的字的符號(hào)送至EAX的高16位中(形成32位操作數(shù))。若AX<8000H,則把0→EAX的高16位;否則,把FFFFH送至EAX的高16位。(3)MOVSX傳送并符號(hào)擴(kuò)展。此指令的格式為:MOVSXDOPD,SOPD 其中,目標(biāo)操作數(shù)DOPD是寄存器操作數(shù)(某一通用寄存器)。源操作數(shù)SOPD可以是寄存器或內(nèi)存操作數(shù),源操作數(shù)可以是字節(jié)或字。此指令是把一字節(jié)源操作數(shù)按符號(hào)擴(kuò)展為字或雙字傳送至目標(biāo)寄存器中;或把字操作數(shù)按符號(hào)擴(kuò)展為雙字傳送至目標(biāo)寄存器中。(4)MOVZX傳送且零擴(kuò)展此指令的格式為:MOVZX DOPD,SOPD 其中,目標(biāo)操作數(shù)DOPD是寄存器操作數(shù)(某一通用寄存器)。源操作數(shù)SOPD可以是寄存器或內(nèi)存操作數(shù),源操作數(shù)可以是字節(jié)或字。此指令是把一字節(jié)源操作數(shù)按零擴(kuò)展為字或雙字傳送至目標(biāo)寄存器中;或把字操作數(shù)按零擴(kuò)展為雙字傳送至目標(biāo)寄存器中。3.4.2二進(jìn)制算術(shù)指令1.加法指令 (1)ADDDOPD,SOPD 這條指令完成兩個(gè)操作數(shù)相加,結(jié)果送至目標(biāo)操作數(shù),即DOPD←DOPD+SOPD 目的操作數(shù)可以是累加器、任一通用寄存器以及存儲(chǔ)器。(2)ADC(AddwithCarry)此指令的格式為:ADCDOPD,SOPD 這條指令與上一條類似,只是在兩個(gè)操作數(shù)相加時(shí),要把進(jìn)位標(biāo)志C的現(xiàn)行值加上去,結(jié)果送至一個(gè)目標(biāo)操作數(shù)(DOPD)。2.減法指令(1)SUB指令此指令的格式為:SUBDOPD,SOPD 這條指令完成兩個(gè)操作數(shù)相減,也即從DOPD中減去SOPD,結(jié)果放在DOPD中。具體地說(shuō),可以從累加器中減去立即數(shù);或從寄存器或內(nèi)存操作數(shù)中減去立即數(shù);或從寄存器中減去寄存器或內(nèi)存操作數(shù);或從寄存器或內(nèi)存操作數(shù)中減去寄存器操作數(shù)等。 (2)SBB(SubtractwithBorrow)指令此指令的格式為: SBB DOPD,SOPD 這條指令與SUB指令類似,只是在兩個(gè)操作數(shù)相減時(shí),還要減去借位標(biāo)志CF的現(xiàn)行值。3.乘法指令(1)MUL無(wú)符號(hào)數(shù)乘法指令此指令的格式為:MULSOPD 本指令完成在AL(字節(jié))或AX(字)中的操作數(shù)以及另一個(gè)操作數(shù)(兩個(gè)無(wú)符號(hào)數(shù))的乘法。雙倍長(zhǎng)度的乘積,送回到AL和AH(在兩個(gè)8位數(shù)相乘時(shí)),或送回到AX和它的擴(kuò)展部分DX(在兩個(gè)字操作數(shù)相乘時(shí))。 (2)IMUL符號(hào)數(shù)乘法指令 整數(shù)乘法指令。這條指令除了是完成兩個(gè)帶符號(hào)數(shù)相乘以外,其它與MUL完全類似。4.除法指令 (1)DIV 這條無(wú)符號(hào)數(shù)的除法指令,能把在AX和它的擴(kuò)展部分(若是字節(jié)相除則在AH和AL中,若是字相除則在DX:AX中)中的無(wú)符號(hào)被除數(shù)被源操作數(shù)除,且把相除以后的商送至累加器(8位時(shí)送至AL,16位時(shí)送至AX),余數(shù)送至累加器的擴(kuò)展部分(8位時(shí)送至AH,16位時(shí)送至DX)。 (2)IDIV(Integerdivision) 這條指令除了完成帶符號(hào)數(shù)相除以外,與DIV完全類似。5.增量減量指令 (1)INC增量 這條指令完成對(duì)指定的操作數(shù)加1,然后返回此操作數(shù)。 (2)DEC減量 本指令對(duì)指定的操作數(shù)減1,然后把結(jié)果送回操作數(shù)。6.NEG取補(bǔ)指令 這條指令是對(duì)操作數(shù)取補(bǔ),也即用零減去操作數(shù),再把結(jié)果送回操作數(shù)。7.CMP比較指令 比較指令完成兩個(gè)操作數(shù)相減,使結(jié)果反映在標(biāo)志位上,但兩操作數(shù)不變。3.4.3十進(jìn)制算術(shù)指令 1.DAA(DecimalAdjustforAddition)在加法后進(jìn)行十進(jìn)制調(diào)整 這條指令能對(duì)在AL中的由兩個(gè)組合的十進(jìn)制數(shù)相加的結(jié)果,進(jìn)行校正,以得到正確的組合的十進(jìn)制和。 2.DAS(DecimalAdjustforSubtraction)在減法后進(jìn)行十進(jìn)制調(diào)整 本指令與DAA指令類似,能對(duì)在AL中的由兩個(gè)組合的十進(jìn)制數(shù)相減以后的結(jié)果,進(jìn)行校正,以得到正確組合的十進(jìn)制差。 3.AAA(UnpackedBCD[ASCll]AdjustforAddition)在加法后進(jìn)行ASCII調(diào)整 這條指令對(duì)在AL中的由兩個(gè)未組合的十進(jìn)制操作數(shù)相加后的結(jié)果進(jìn)行校正,產(chǎn)生一個(gè)未組合的十進(jìn)制和。 4.AAS(UnpackedBCD[ASCII]AdjustforSubtraction)在減法后進(jìn)行ASCII調(diào)整 本指令與AAA指令類似、能把在AL中的由兩個(gè)未組合的十進(jìn)制數(shù)相減的結(jié)果,進(jìn)行校正,在AL中產(chǎn)生一個(gè)正確的未組合的十進(jìn)制數(shù)差。 5.AAM(UnpackedBCD[ASCII]AdjustforMultiply)在乘法后進(jìn)行ASCII調(diào)整 這條指令能把在AX中的兩個(gè)未組合的十進(jìn)制數(shù)相乘的結(jié)果,進(jìn)行校正,最后在AX中能得到正確的未組合的十進(jìn)制數(shù)的乘積(即高位在AX中,低位在AL中)。 6.AAD(UnpackedBCD[ASCII]AdjustforDivision)在除法前進(jìn)行調(diào)整 這條指令能把在AX中的兩個(gè)未組合的十進(jìn)制數(shù)在兩個(gè)數(shù)相除以前進(jìn)行校正,這樣在兩個(gè)未組合的十進(jìn)制數(shù)相除以后,可以得到正確的未組合的十進(jìn)制結(jié)果。3.4.4邏輯指令 1.AND執(zhí)行按位邏輯與 (1)AND指令 這條指令對(duì)兩個(gè)操作數(shù)進(jìn)行按位的邏輯“與”運(yùn)算,即只有相“與”的兩位全為1,與的結(jié)果才為1;否則與的結(jié)果為0。“與”以后的結(jié)果送至目的操作數(shù)。 (2)TEST 本指令完成與AND指令同樣的操作,結(jié)果反映在標(biāo)志位上,但并不送回至目標(biāo)操作數(shù),即TEST指令不改變操作數(shù)的值。2.OR執(zhí)行按位邏輯或 此指令對(duì)指定的兩個(gè)操作數(shù)進(jìn)行邏輯“或”運(yùn)算。即進(jìn)行“或”運(yùn)算的兩位中的任一個(gè)為1(或兩個(gè)都為1),則或的結(jié)果為1;否則為0?;蜻\(yùn)算的結(jié)果送回目的操作數(shù)。3.XOR執(zhí)行按位邏輯異或 這條指令對(duì)兩個(gè)指定的操作數(shù)進(jìn)行“異或”運(yùn)算,當(dāng)進(jìn)行“異或”運(yùn)算的兩位不相同時(shí)(即一個(gè)為1,另一個(gè)為0),“異或”的結(jié)果為1;否則為0。異或運(yùn)算的結(jié)果送回一個(gè)操作數(shù)。4.NOT執(zhí)行按位邏輯非 這條指令對(duì)源操作數(shù)求反,然后送回原操作數(shù)。3.4.5移位和循環(huán)移位指令 1.移位指令 有四條移位指令:SAL(算術(shù)左移)、SHL(邏輯左移)、SAR(算術(shù)右移)和SHR(邏輯右移)。這些指令的格式為:SAL DOPD,OPD2SHL DOPD,OPD2SAR DOPD,OPD2SHR DOPD,OPD2 第一個(gè)操作數(shù)是目標(biāo)操作數(shù),即對(duì)它進(jìn)行移位操作。目標(biāo)操作數(shù)可以是任一通用寄存器或一內(nèi)存操作數(shù)(可用所有尋址方式)。第二個(gè)操作數(shù)規(guī)定移位的次數(shù)(或移位的位數(shù))。在8086中,第二個(gè)操作數(shù)或是1(規(guī)定移一位)或?yàn)榧拇嫫鰿L(在寄存器CL中規(guī)定移位的次數(shù))。在IA-32處理器中,不僅把目標(biāo)操作數(shù)擴(kuò)展至32位,而且第二個(gè)操作數(shù)可以是CL或8位立即數(shù),用于規(guī)定移位次數(shù)為0至31。2.雙移位指令 (1)SHLD雙左移 此指令的格式為: SHLDDOPD,SOPD,OPD3 其中,第一個(gè)操作數(shù)為目標(biāo)操作數(shù),它執(zhí)行左移操作;目標(biāo)操作數(shù)可以為16位或32位通用寄存器或內(nèi)存操作數(shù)(可用所有尋址方式)。第二個(gè)操作數(shù)為寄存器操作數(shù),其尺寸必須與目標(biāo)操作數(shù)相同。第三個(gè)操作數(shù)規(guī)定移位的次數(shù),可以是8位立即數(shù)或寄存器CL,規(guī)定移位次數(shù)為1至31。 (2)SHRD雙右移 除了移位方向相反,此指令與上一指令完全相同。3.循環(huán)移位指令 有四條循環(huán)移位指令ROL(RotateLeft)、ROR(PorateRight)、RCL(RoratethroughCFLeft)和RCR(RotatethroughCFRight)。 指令格式為: ROLDOPD,OPD2 其中,第一個(gè)操作數(shù)是要對(duì)其進(jìn)行移位操作的目標(biāo)操作數(shù)。第二個(gè)操作數(shù)是8位立即數(shù)或寄存器CL,用以規(guī)定移位的次數(shù)(1至31)。 前兩條循環(huán)移位指令,未把標(biāo)志位CF包含在循環(huán)的環(huán)中。后兩條把標(biāo)志位CF包含在循環(huán)的環(huán)中,作為整個(gè)循環(huán)的一部分。3.4.6位和字節(jié)指令1.位操作指令有四條位操作指令:BT位測(cè)試BTS位測(cè)試并置位BTR位測(cè)試并復(fù)位BTC位測(cè)試并置反這些指令的格式為:BTDOPD,SOPD 第一個(gè)操作數(shù)是目標(biāo)操作數(shù),規(guī)定一個(gè)位串(稱為位基),第二個(gè)操作數(shù)規(guī)定在位串中的偏移(從位0開(kāi)始算起)。2.位掃描指令有兩條位掃描指令:BSF向前位掃描BSR反向位掃描這些指令的格式為:BSFDOPD,SOPD 源操作數(shù)SOPD是16位或32位的寄存器或存儲(chǔ)操作數(shù),BSF指令的功能是從源操作數(shù)的最低有效性(位0)開(kāi)始向前掃描,查找第一個(gè)為1的位。若找到這樣的位把它與最低有效位的偏移值存入目標(biāo)操作數(shù)。目標(biāo)操作數(shù)是16位或32位寄存器。若源操作數(shù)為0,則目標(biāo)操作數(shù)的內(nèi)容不定。3.條件字節(jié)設(shè)置指令SETcc此類指令的格式為:SETccDOPD 此類指令只有一個(gè)操作數(shù)——目標(biāo)操作數(shù),它是一個(gè)8位寄存器。若滿足指令規(guī)定的條件,置目標(biāo)操作數(shù)為1;否則,把它置0。3.4.7控制傳送指令 1.無(wú)條件轉(zhuǎn)移指令JMP轉(zhuǎn)移 這是一條無(wú)條件轉(zhuǎn)移指令,它轉(zhuǎn)移程序控制至指令流的不同點(diǎn)而不保留返回信息。目標(biāo)操作數(shù)規(guī)定指令要轉(zhuǎn)移到的地址。此操作數(shù)可以是立即數(shù)、一通用寄存器或一內(nèi)存單元。指令的格式為:JMPDOPD

近轉(zhuǎn)移——轉(zhuǎn)移至當(dāng)前碼段(由CS寄存器當(dāng)前指向的段),有時(shí)稱為段內(nèi)轉(zhuǎn)移。

短轉(zhuǎn)移——一種near轉(zhuǎn)移,其轉(zhuǎn)移范圍限制在當(dāng)前EIP的–128到+127之內(nèi)。

遠(yuǎn)轉(zhuǎn)移——轉(zhuǎn)移至與當(dāng)前碼段不同的段內(nèi)的指令,但在相同特權(quán)級(jí),有時(shí)稱為段間轉(zhuǎn)移。

任務(wù)切換——轉(zhuǎn)移至不同任務(wù)中的指令。2.條件轉(zhuǎn)移指令Jcc其一般格式為:JccLabel 其中,Label是轉(zhuǎn)移的目標(biāo)地址。即若滿足指令中規(guī)定的條件,則轉(zhuǎn)移至目標(biāo)地址;否則繼續(xù)執(zhí)行下一條指令。3.重復(fù)控制指令 一個(gè)循環(huán)程序必須要有指令來(lái)控制循環(huán),重復(fù)控制指令在循環(huán)的頭部或尾部確定是否進(jìn)行循環(huán)。是否重復(fù)也是有條件的,通常是在CX(ECX)寄存器中預(yù)置循環(huán)次數(shù),重復(fù)控制指令當(dāng)CX(ECX)不等于零時(shí),循環(huán)至目的地址。若不滿足條件(通常當(dāng)CX=0時(shí)),則順序執(zhí)行重復(fù)控制指令的下一條指令。 重復(fù)控制指令的目的地址必須在控制指令的+127和-128字節(jié)的范圍之內(nèi)。 (1)LOOP LOOP指令使CX(ECX)減1,且判斷若CX(ECX)不等于0,則循環(huán)至目標(biāo)操作數(shù)——IP+偏移量(符號(hào)擴(kuò)展到16位)。 (2)LOOPZ(或LQOPE) 這同一條指令有兩種不同的助記符LOOPZ及LOOPE。 此指令使CX減1,且判斷只有在CX不等于0,而且標(biāo)志ZF=1的條件下,才循環(huán)至目標(biāo)操作數(shù)——IP+偏移量。 (3)LOOPNZ(或LOOPNE) 這也是同一條指令的兩種助記符。此指令使CX減1,且判斷只有當(dāng)CX不等于0,而且標(biāo)志ZF=0的條件下,才能循環(huán)至目標(biāo)操作數(shù)——IP+偏移量。4.調(diào)用與返回指令(1)CALL調(diào)用過(guò)程CALL指令能執(zhí)行四種不同類型的調(diào)用:

Near調(diào)用——調(diào)用在當(dāng)前碼段(由CS寄存器指向的當(dāng)前段)內(nèi)的過(guò)程,有時(shí)稱為段內(nèi)調(diào)用。

Far調(diào)用——調(diào)用位于與當(dāng)前代碼段不同段中的過(guò)程,有時(shí)稱為段間調(diào)用。

不同特權(quán)級(jí)間的far調(diào)用——調(diào)用與當(dāng)前執(zhí)行的程序或過(guò)程有不同特權(quán)級(jí)的段內(nèi)的過(guò)程。

任務(wù)切換——調(diào)用位于不同任務(wù)中的過(guò)程。(2)RET返回有兩種返回指令:RETRETOPD 傳送程序控制至位于堆棧頂部的返回地址。此地址是由CALL指令放在堆棧上的。通常,返回指令返回至CALL指令的下一條指令。 RET指令能用于執(zhí)行三種不同類型的返回:

Near返回—返回至在當(dāng)前代碼段(由CS寄存器當(dāng)前指向的段)內(nèi)的調(diào)用過(guò)程,有時(shí)稱為段內(nèi)返回。

Far返回—返回至與當(dāng)前代碼段不在同一段內(nèi)的調(diào)用過(guò)程,有時(shí)稱為段間返回。

特權(quán)級(jí)間的far返回——返回至與當(dāng)前執(zhí)行的程序或過(guò)程不同的特權(quán)級(jí)。 最后一種返回只能在保護(hù)模式下執(zhí)行。返回指令的返回類型,取決于相應(yīng)的CALL指令。(3)IRET從中斷返回有兩種中斷返回指令的形式:IRETIRETD 它從異常或中斷處理程序返回程序控制至被異常、外部中斷或軟件中斷所中斷的程序或過(guò)程。這些指令也用于從嵌套的任務(wù)(嵌套的任務(wù)是當(dāng)CALL指令用于啟動(dòng)任務(wù)切換,或當(dāng)中斷或異常引起任務(wù)切換至中斷,或異常處理程序時(shí)建立的)返回。處理器執(zhí)行以下類型的中斷返回:

從虛擬8086模式返回。

返回至虛擬8086模式。

特權(quán)級(jí)內(nèi)返回。

特權(quán)級(jí)間返回。

從嵌套的任務(wù)返回(任務(wù)切換)。不論哪種返回方式,IRET指令的功能是一致的。 (4)INT軟件中斷、INTO在溢出時(shí)中斷 INTn指令產(chǎn)生由目標(biāo)操作數(shù)規(guī)定的中斷或異常處理程序的調(diào)用。目標(biāo)操作數(shù)n規(guī)定從0到255的中斷向量號(hào)(作為8位無(wú)符號(hào)數(shù)編碼)。 INTO指令是調(diào)用溢出異常(中斷向量號(hào)4)特定助記符。溢出中斷檢測(cè)在EFLAGS寄存器中的OF標(biāo)志,若OF標(biāo)志為1,則調(diào)用溢出中斷處理程序,否則,順序執(zhí)行下一條指令。5.過(guò)程指令(1)BOUND檢測(cè)值是否超出范圍此指令的格式為:BOUND OPD1.OPD2 確定第一個(gè)操作數(shù)(數(shù)組索引)是否在由第二個(gè)操作數(shù)(邊界操作數(shù))規(guī)定的數(shù)組邊界內(nèi)。若數(shù)組索引不在邊界之內(nèi),則發(fā)生邊界范圍超過(guò)異常。 (2)ENTER高級(jí)過(guò)程進(jìn)入 此指令的格式為: ENTEROPD1,OPD2 它為過(guò)程建立堆棧幀。第一個(gè)操作數(shù)(尺寸操作數(shù))規(guī)定堆棧幀的尺寸(即,為過(guò)程分配到堆棧上的動(dòng)態(tài)存儲(chǔ)的字節(jié)數(shù))。第二個(gè)操作數(shù)(嵌套層操作數(shù))給定過(guò)程的詞法嵌套層(0至31)。嵌套層確定從前面幀拷貝至新堆棧幀的“顯示區(qū)”的堆棧幀指針的數(shù)量。這兩個(gè)操作數(shù)都是立即數(shù)。 3.4.8串指令(1)MOVS(MoveString)MOVS/MOVSB傳送串/傳送字節(jié)串MOVS/MOVSW傳送串/傳送字串MOVS/MOVSD傳送串/傳送雙字串 把由SI(ESI)作為指針的源串中的一個(gè)字節(jié)(MOVSB)、字(MOVSW)或雙字(MOVSD),傳送至由DI(EDI)作為指針的目的串,且相應(yīng)地修改指針,以指向串中的下一個(gè)元素。(2)CMPS(CompareString)CMPS/CMPSB比較串/比較字節(jié)串CMPS/CMPSW比較串/比較字串CMPS/CMPSD比較串/比較雙字串 由SI(ESI)作為指針的源串與由DI(EDI)作為指針的目的串(雙字、字或字節(jié))相比較(源串-目的串),但減的結(jié)果只反映到標(biāo)志位上,而不送至任何一操作數(shù)。同時(shí)相應(yīng)地修改源和目的串指針,指向串中的下一個(gè)元素。(3)SCAS(ScanString)SCAS/SCASB掃描串/掃描字節(jié)串SCAS/SCASW掃描串/掃描字串SCAS/SCASD掃描串/掃描雙字串 搜索串指令,關(guān)鍵字放在AL(字節(jié))、AX(字)或EAX(雙字)中,操作時(shí)從AL(字節(jié)操作)、AX(字操作)或EAX(雙字操作)的內(nèi)容中減去由DI(EDI)作為指針的目的串元素,結(jié)果反映在標(biāo)志位上,但并不改變目的串元素以及累加器中的值。(4)LODS(LoadString)L

溫馨提示

  • 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)論