版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
指令的基本概念指令和指令系統(tǒng)CISC和RISC指令的結構和分類指令中的數據類型指令的尋址方式指令中操作數的尋址方式
指令的基本概念能夠在計算機硬件平臺上運行的程序是由一系列的機器指令組成的,機器指令通常簡稱指令。軟件的功能借助指令的集合來實現,而指令可以直接由硬件執(zhí)行在IA-32系列的CPU中,包含了由大量的具有各種各樣作用的指令構成的指令系統(tǒng)。在IA-32CPU中,在實地址模式下,采用16位指令模式(16位寄存器和16位偏移量);采用32位指令模式(32位寄存器和32位偏移量)一臺計算機中所有機器指令的集合,稱為這臺計算機的指令系統(tǒng)。70年代末期,計算機硬件結構隨著VLSI技術的飛速發(fā)展而越來越復雜化,大多數計算機的指令系統(tǒng)多達幾百條。我們稱這些計算機為復雜指令系統(tǒng)計算機,簡稱CISC。如此龐大的指令系統(tǒng)不但使計算機的研制周期變長,難以保證正確性,不易調試維護,而且由于采用了大量使用頻率很低的復雜指令而造成硬件資源浪費。所以在1989年隨著80486DXCPU計算機的誕生,人們又提出了便于VLSI技術實現的精簡指令系統(tǒng)計算機,簡稱RISC,有效地減少了指令的執(zhí)行周期。而且它以RISC技術為基礎,通過幾條RISC指令和并行流水線方式來支持經典的CISC型指令。同時由于組成指令周期的機器周期變得很規(guī)整,所以可以用組合邏輯控制器代替微程序控制器來提高CPU處理速度。
一個較完善的指令系統(tǒng),應當包括數據傳送類指令、算術運算類指令、邏輯運算類指令、程序控制類指令、輸入輸出指令、字符串類指令、系統(tǒng)控制類指令。1、數據傳送指令:數據傳送指令主要包括取數指令、存數指令、傳送指令、成組傳送指令、字節(jié)交換指令、清累加器指令、堆棧操作指令等等,這類指令主要用來實現主存和寄存器之間,或寄存器和寄存器之間的數據傳送。2、算術運算指令:這類指令包括二進制定點加、減、乘、除指令,浮點加、減、乘、除指令,求反、求補指令,算術移位指令,算術比較指令,十進制加、減運算指令等。這類指令主要用于定點浮點的算術運算,大型機中有向量運算指令,直接對整個向量或矩陣進行求和、求積運算。3、邏輯運算指令:這類指令包括邏輯加、邏輯乘、按位加、邏輯移位等指令,主要用于無符號數的位操作、代碼的轉換、判斷及運算。典型指令4、程序控制指令:程序控制指令也稱轉移指令。計算機在執(zhí)行程序時,通常情況下按指令計數器的現行地址順序取指令。但有時會遇到特殊情況:機器執(zhí)行到某條指令時,出現了幾種不同結果,這時機器必須執(zhí)行一條轉移指令,根據不同結果進行轉移,從而改變程序原來執(zhí)行的順序。這種轉移指令稱為條件轉移指令。轉移條件來自于程序狀態(tài)字(標志)寄存器PSW如下特征位:進位標志(C)、結果為零標志(Z)、結果為負標志(S)、結果溢出標志(V)等。5、輸入輸出指令:主要用來啟動外圍設備,檢查測試外圍設備的工作狀態(tài),并實現外部設備和CPU之間,或外圍設備與外圍設備之間的信息傳送。(單獨編址和統(tǒng)一編址)6、字符串處理指令:是一種非數值處理指令,一般包括字符串傳送、字符串轉換(把一種編碼的字符串轉換成另一種編碼的字符串)、字符串比較、字符串查找(查找字符串中某一子串)、字符串抽?。ㄌ崛∧骋蛔哟?、字符串替換(把某一字符串用另一字符串替換)等。這類指令在文字編輯中對大量字符串進行處理。7、特權指令:是指具有特殊權限的指令。由于指令的權限量大,若使用不當,會破壞系統(tǒng)和其他用戶信息。因此這類指令只用于操作系統(tǒng)或其他系統(tǒng)軟件,一般不直接提供給用戶使用。在多用戶、多任務的計算機系統(tǒng)中特權指令必不可少。它主要用于系統(tǒng)資源的分配和管理,包括改變系統(tǒng)工作方式,檢測用戶的訪問權限,修改虛擬存儲器管理的段表、頁表,完成任務的創(chuàng)建和切換等。8、其他指令:除以上各類指令外,還有狀態(tài)寄存器置位、復位指令、測試指令、暫停指令、空操作指令,以及其他一些系統(tǒng)控制用的特殊指令。指令名稱符號指令機器指令(用十六進制表示)指令助記符符號地址條件轉移JZNEXT7409H增量INCCX41H減量DECCX49H入棧PUSHAX50H出棧POPAX58H比較CMPSTRING[BX],0DH80BF04000DH加法ADDSI,283C602H傳送MOVINDEX,BL881E0A00H轉子程序CALLDISPLAYE82A00H表4.2典型的符號指令與其相對應的機器指令的結構形式
指令名稱指令助記符二進制操作碼(用十六進制表示)條件轉移JZ74H增量INC41H減量DEC49H入棧PUSH50H出棧POP58H比較CMP80H加法ADD83H傳送MOV88H轉子程序CALLE8H表4.3部分典型指令的助記符與其相對應的二進制操作碼
4.2.2
地址碼
根據一條指令中有幾個操作數地址,可將該指令稱為幾操作數指令或幾地址指令。目前二地址和一地址指令格式用的最多。l
零地址指令(無操作數)的指令字中只有操作碼,而沒有地址碼。a.無操作數的控制操作
如空操作指令、停機指令等。
b.隱含操作數的操作
例如,在8086/8088指令系統(tǒng)中,字節(jié)轉換字指令CBW,其源操作數隱含為AL的內容;字轉換雙字指令CWD,其源操作數隱含為AX的內容,又比如IBMPC的指令系統(tǒng)中下面的幾條操作標志寄存器有關的指令:LAHF、SAHF、PUSHF、POPFl
單地址指令常稱為單操作數指令。a.比如壓棧和彈出棧有關的兩條指令PUSHaxPOPaxb.地址碼所指定的操作數為源操作數
在這種情況下,累加器AX的內容為目標操作數,其操作如下
8位和16位微型機的操作數單地址指令都采用這種操作方式。Muldiv等指令
指令中的數據類型字節(jié)類型:有符號整數用補碼表示,在MASM匯編語言中使用DB、BYTE偽指令定義字節(jié)數據。如:data1db254字類型:在IA-32計算機中,一個字由二個字節(jié)組成,其低位字節(jié)放在低地址單元,高位字節(jié)放在高地址單元。稱為小尾方式。如:data1dw2544雙字類型:在IA-32計算機中,一個字由四個字節(jié)組成,其低位字節(jié)放在低地址單元,高位字節(jié)放在高地址單元。例如乘法后的乘積或除法前的被除數都是以雙字出現的。如:data1dd254400內存訪問的實模式:(即實地址訪問模式)它是Intel公司80286及以后的x86(80386,80486和80586等)兼容處理器(CPU)的操作模式之一。實模式被特殊定義為在32位地址中使用20位地址的內存可訪問空間,這就意味著它可訪問的最大內存空間為1MB(物理內存和BIOS-ROM),軟件可通過這些地址直接訪問BIOS程序和外圍硬件。實模式下處理器多道任務的工作模式。但是為了向下兼容,所以80286及以后的x86系列兼容處理器仍然是開機啟動時工作在實模式下。80186和早期的處理器僅有一種操作模式,就是后來我們所定義的實模式。實模式雖然能訪問到1M的地址空間,但是由于BIOS的映射作用(即BIOS占用了部分空間地址資源),所以真正能使用的物理內存空間(內存條),也就是在640k到924k之間。1M地址空間組成是由16位的段地址和16位的段內偏移地址組成的。用公式表示為:物理地址=左移4位的段地址+偏移地址。內存訪問的保護模式保護模式:經常縮寫為p-mode,在InteliAPX286程序員參考手冊中(iAPX286是Intel80286的另一種叫法)它又被稱作為虛擬地址保護模式。盡管在Intel80286手冊中已經提出了虛地址保護模式,但實際上它只是一個指引,真正的32位地址出現在Intel80386上。保護模式本身是80286及以后兼容處理器序列之后產成的一種操作模式,它具有許多特性設計為提高系統(tǒng)的多道任務和系統(tǒng)的穩(wěn)定性。例如內存的保護(限長寄存器),分頁機制(頁表寄存器)和硬件虛擬存儲(MMU)的支持?,F代多數的x86處理器操作系統(tǒng)都運行在保護模式下。
內存的組織結構(以奔騰CPU芯片為例)
1、邏輯地址:在程序設計中通常使用邏輯地址,邏輯地址包含段基址和段內偏移量,它們都是無符號的16位二進制數據。其中段基址由CS、DS、SS、ES分別提供,而偏移量由IP或者EU(按照不同的尋址方式根據指令中給出有效地址計算得到)的提供。2、物理地址:把段基址的值左移4位變成20位后,加上EU有效地址得到。3、尋址方式:指令中有效地址的提供方式。數據的存儲結構決定著數據的尋址方式,數據的尋址方式依賴著CPU中相應的寄存器(基址、變址等寄存器)4.3.1指令的尋址方式:順序尋址方式、跳躍尋址方式順序尋址方式:由于指令地址在內存中按順序安排,當執(zhí)行一段程序時,通常是一條指令接一條指令的順序進行,這種程序順序執(zhí)行的過程,我們稱為指令的順序尋址方式。跳躍尋址方式:當程序改變執(zhí)行的順序時,指令的尋址就采取跳躍尋址方式。所謂跳躍,是指下條指令的地址碼不是由程序計數器給出,而是由本條指令給出。(教材69頁的相對尋址)(1)立即尋址方式*——操作數在指令中給出
MOVAL,5MOVAX,3064HMOVAL,‘A’*
只能用于SRC字段*SRC和DST的字長一致MOVAH,3064H匯編語句操作數長度操作MOVBL,448位把十進制數44(2CH)傳送到BL中MOVAX,44H16位把十六進制數44H傳送到AX中MOVAL,‘A’8位把A的ASCII碼41H傳送到AL中MOVEBX,12340000H32位把十六進制數12340000H傳送到EBX中MOVESI,1232位把十進制數12(0CH)傳送到ESI中表4.4使用立即數尋址的MOV指令例子
在應用上,通常利用立即尋址方式給寄存器或內存單元賦初值;
注意:立即數只能作為源操作數,不能作為目的操作數,并且只能是常數值。(2)寄存器尋址方式*——操作數在指定的寄存器中
MOVAX,BXMOVAL,BHMOVAX,3064H*
字節(jié)寄存器只有AHALBHBLCHCLDHDL*
SRC和DST的字長一致MOVAH,BX*
CS不能用MOV指令改變
MOVCS,AX(3)直接尋址方式*——有效地址EA由指令直接給出
例:MOVAX,[2000H]EA=2000H,假設(DS)=3000H,那么PA=32000H*
隱含的段為數據段DS*
可使用段跨越前綴
MOVAX,ES:[2000H]*操作數地址可由變量(符號地址)表示VALUEDB10MOVAH,VALUE
MOVAX,VALUEMOVAX,WORDPTRVALUE5030
32000AHAL3050(AX)=3050H匯編語句操作數長度操作MOV[BP],DL8位寄存器DL的內容傳到SS段由BP尋址的存儲單元MOV[DI],BH8位寄存器BH的內容傳到DS段由DI尋址的存儲單元MOVAL,[EDX]8位DS段由EDX尋址的存儲單元的內容傳送到ALMOVCX,[BX]16位DS段中用BX尋址的存儲單元的字內容傳到CX中MOVECX,[EBX]32位DS段由EBX尋址的存儲單元的雙字傳送到ECX表4.7使用寄存器間接尋址的MOV指令例子
有效地址=(BX)(BP)8位(SI)16位(DI)+位移量(5)寄存器相對尋址方式*例:MOVAX,COUNT[SI]或MOVAX,[COUNT+SI]
假設(DS)=3000H,(SI)=2000H,COUNT=3000H,那么PA=35000H假設(35000H)=1234H,那么(AX)=1234H*適于數組、字符串、表格的處理匯編語句操作數長度操作MOVARRAY[SI],BL8位BL的內容送入由ARRAY+SI尋址的DS段存儲單元MOVLIST[SI+2],CL8位CL的內容送入由LIST+SI+2之和尋址的DS段存儲單元MOVAX,[DI+100H]16位由DI+100H尋址的DS段存儲單元的字裝入AXMOVDI,SET
IT[BX]16位由SET
IT+BX尋址的DS段存儲單元的內容送入DIMOVDL,[EAX+10H]16位由EAX+10H尋址的DS段存儲單元的內容裝入DIMOVARRAY[EBX],EAX32位EAX內容送入由ARRAY+EBX尋址的DS段存儲單元中表4.8使用寄存器相對尋址的MOV指令例子(6)基址變址尋址方式*
MOVAX,[BX][DI]
或MOVAX,[BX+DI]MOVAX,ES:[BX][SI]*適于數組、字符串、表格的處理*必須是一個基址寄存器和一個變址寄存器的組合MOVAX,[BX][BP]MOVAX,[SI][DI]有效地址=(BX)(SI)(BP)(DI)+匯編語句操作數長度操作MOVDH,[BX+DI+20H]8位由BX、DI和20H之和尋址的DS段存儲單元的內容裝入DHMOV
LIST[BP+DI],CL8位CL送到由LIST、BP及DI之和尋址的SS段存儲單元中MOVLIST[BP+SI+4],DH8位DH送到由LIST、BP、SI及4之和尋址的SS段存儲單元中MOV
AX,]16位由及DI之和尋址的DS段存儲單元的內容送入AXMOV
EAX,]32位由、ECX及2之和尋址的DS段存儲單元的內容裝入EAX表4.9使用基址變址尋址的MOV指令
(7)相對基址變址尋址方式
MOVAX,MASK[BX][SI]
或MOVAX,MASK[BX+SI]或MOVAX,[MASK+BX+SI]
有效地址=(BX)(SI)8位(BP)(DI)16位++位移量例:編寫一段顯示字符串STRING的程序
DATASEGMENTSTRINGDB‘HAPPYNEWYEAR!’,0DH,0AH,‘$’COUNTDW17
DATAENDS
(1)直接尋址
movdl,string
movah,2int21h;顯示字符‘H’
movdl,string+1
movah,2int21h;顯示字符‘A’…...(2)寄存器間接尋址
movcx,count;movcx,17
movbx,offsetstring;string的偏址bxnext:movdl,[bx]
movah,2int21h;顯示一個字符incbxloopnext;循環(huán)指令(3)寄存器相對尋址
movcx,count;movcx,17
movsi,0next:movdl,string[si]
;movdl,[string+si]
movah,2int21h;顯示一個字符incsiloopnext;循環(huán)指令(4)基址變址尋址
movcx,count;movcx,17
movbx,offsetstring;string的偏址bxmovsi,0next:movdl,[bx][si]
;movdl,[bx+si]
movah,2int21h;顯示一個字符incsiloopnext;循環(huán)指令(5)DOS顯示字符串功能
movdx,offsetstring;string的偏址dx
;leadx,stringmovah,9int21h;顯示一串字符典型的尋址方式有:
l
立即尋址:指令的地址字段指出的不是操作數的地址,而是操作數本身,這種尋址方式稱為立即尋址。教材101頁圖4-6.這種尋址方式經常出現在雙地址指令中的源操作數的位置,用于給寄存器賦值如在以下指令中的MOVAL,25;MOVBX,“AB”;MOVDX,5CH源操作數的尋址方式l
直接尋址:在指令格式的地址字段中直接指出操作數在內存中的有效地址,即操作數地址在指令中:EA=D教材102頁。例如:MOVBX,DS:[1000H];MOVBX,VAR(符號地址隱含為DS,其它段必須明顯指出)見下圖;l寄存器(直接)尋址:操作數在指令中所給出的寄存器中(通用寄存器和段寄存器)的尋址方式,比如在以下程序段中MOVAX,23MOVBX,15ADDAX,BX的ADD中的源操作數和目的操作數的尋址方式。
間接尋址:是相對于直接尋址而言的,在間接尋址的情況下,指令地址字段中的形式地址D不是操作數的真正地址,而是操作數地址的指示器,或者說D單元的內容才是操作數的有效地址。即操作數地址在內存中:EA=(D),比如:movax,[[045ch]]寄存器間接尋址:操作數的有效地址EA直接從基址寄存器(BP、BX)或變址寄存器(SI、DI)中獲得,若以BX、SI、DI間接尋址時候,隱含的段寄存器為DS,若以BP間接尋址,則隱含使用的段寄存器為SS。比如:MOVCH,[SI]見下圖
l
寄存器相對尋址(變址相對尋址、基址相對尋址):把CPU中某個變址寄存器SI、DI(基址寄存器:BX、BP)寄存器的內容與偏移量D相加來形成操作數的有效地址,即操作數地址為變址寄存器的內容與偏移量D之和,即EA=(R)變址+D若以BX、SI、DI間接尋址時候,隱含的段寄存器為DS,若以BP間接尋址,則隱含使用的段寄存器為SS例如指令:見下圖基址變址尋址方式:操作數的有效地址EA由基址寄存器和變址寄存器和位移量相加得到。若以BX為基地址寄存器,隱含的段寄存器為DS,若以BP為基地址寄存器,則隱含使用的段寄存器為SS例如:如:AX,200H[BX][SI]復習題(補充)例B:某微機的指令格式如下所示:15109870D:位移量X:尋址特征位X=00:直接尋址;X=01:用變址寄存器X1進行變址;X=02:用變址寄存器X2進行變址;X=11:相對尋址設(PC)=1234H,(X1)=0037H,(X2)=1122H(H代表十六進制數),請確定下列指令的有效地址。(1)4420H(2)2244H(3)1322H(4)3521H(5)6723H操作碼XD解:(1)X=00,D=20H,有效地址EA=20H;(2)X=10,D=44H,有效地址EA=1122H+44H=1166H;(3)X=11,D=22H,有效地址EA=1234H+22H=1256H;(4)X=01,D=21H,有效地址EA=0037H+21H=0058H;(5)X=11,D=23H,有效地址EA=1234H+23H=1257H;復習題(補充)復習題(補充)10、分別指出下列各8086/8088指令中源操作數和目的操作數的尋址方式(1)寄存器(直接)尋址立即數尋址(2)寄存器(直接)尋址直接尋址(3)寄存器(間接)尋址寄存器(直接)尋址(4)寄存器(直接)尋址相對(間接)基址變址尋址(5)寄存器(直接)尋址基址變址尋址(6)寄存器(間接)尋址立即數尋址(7)寄存器(直接)尋址(8)寄存器(直接)尋址相對基址尋址(9)寄存器(直接)尋址寄存器(間接)尋址(10)寄存器(直接)尋址寄存器(直接)尋址12、判斷對錯(1)對(2)錯:DS作為代碼段基址寄存器,只能接收AX傳來的數據(3)對(4)錯:LEA為把源操作數的有效地址傳送給目的操作數,所以源操作數不應該是立即數等非存儲器的尋址方式。(5)錯,ADD指令不能在一個指令周期中完成來自存儲器的兩個操作數的相加運算(6)錯,MUL指令為隱含目的操作數的指令,默認的目的操作數為寄存器AL(AX)(7)錯,SHL為邏輯左移指令,當移位次數超過1時,次數要使用CL寄存器提供,不能用立即數等其它方式。(8)對(9)錯:MOV指令在一個指令周期中不能完成兩個內存單元之間的數據傳送(10)對傳送類指令1、數據傳送指令movMoval,01fMovax,2345hMovda_byte,ofehMovary[bx],1234h注意:不影響如下狀態(tài)標志位:進位(CF)、溢出(OF)、奇偶(PF)、符號標志位(SF)、輔助進位標志位(AF)、零標志位(ZF)傳送類指令2、交換指令xchgXCHGAL,BLXCHGAX,BXXCHGAX,ary[bx]注意:不影響如下狀態(tài)標志位:進位(CF)、溢出(OF)、奇偶(PF)、符號標志位(SF)、輔助進位標志位(AF)、零標志位(ZF)傳送類指令3、取標志位指令LAHF指令功能:AH(FR)7~0SFZFAFPFCFAHFR低8位01234567傳送類指令4、存標志位指令SAHF指令功能:AH(FR)7~0注意:影響如下狀態(tài)標志位:FR中的標志位分布(由低到高):第零位為進位(CF)、第二位為奇偶(PF)、第四位為輔助進位標志位(AF)、第六位為零標志位(ZF)、第七位為符號標志位(SF)MOVAH,11000000BSAHF傳送類指令5、標志壓棧指令PUSHF指令功能: SP(SP)-2棧頂字單元(FR)注意:不影響如下狀態(tài)標志位5、標志出棧指令POPF指令功能:棧頂字單元(FR) SP(SP)+2注意:影響所有標志位傳送類指令6、裝入有效地址指令LEA指令格式:LEADEST,SRC指令功能:將SRC的有效地址傳送到目的16位通用寄存器中。 注意:不影響標志位7、裝入地址指針指令LDS(LES)指令格式:LDSDEST,SRC指令功能:DEST(SRC)DS(ES)(SRC+2)算術運算類指令.加法指令1)不帶進位加法指令ADD格式:ADDOPD,OPS執(zhí)行的操作:OPD+OPS→OPD例如:ADDBX,SIADDDA_WORD,0F8CHADDDL,TAB[BX]注意:對標志寄存器AF、CF、SF、ZF、OF、PF有影響標志寄存器OFoverflowflag溢出標志操作數超出機器能表示的范圍表示溢出,溢出時為1.
SFsignFlag符號標志記錄運算結果的符號,結果負時為1.
ZFzeroflag零標志運算結果等于0時為1,否則為0.
CFcarryflag進位標志最高有效位產生進位時為1,否則為0.
AFauxiliarycarryflag輔助進位標志運算時,第3位向第4位產生進位時為1,否則為0.
PFparityflag奇偶標志運算結果操作數位為1的個數為偶數個時為1,否則為0.
標志寄存器NV:沒有溢出,這是OverFlow位(OF)的值,分別為NV(沒溢出)和OV(溢出了)。這個標志位是反映上一個指令運算的結果是否溢出。
PL:符號標志位(SF)的值,分別是NG(負)/PL(正)
NZ:零標志位(ZF)的值,分別是ZR(零)/NZ(非零),表示上一指令的結果。如:xorax,ax后,這一位就會變?yōu)閆R。
NA:輔助進位標志位(AF)的值,分別為AC(有進位)/NA(沒有進位)。
PO:奇偶標志位(PF)的值,分別是PE(偶)/PO(奇)
NC:進位標志位(CF)的值,分別是CY(進位)/NC(沒有進位)
ADDDL,0A4H的結果對標志位的影響11100101+)10100100110001001符號位有進位CF=1符號位為1,SF=1無進位,AF=0結果不為0,則ZF=0;結果無溢出,則OF=0;結果中有奇數個1,則PF=0。算術運算類指令.2)帶進位加法指令ADC格式:ADCOPD,OPS執(zhí)行的操作:OPD十OPS+CF→OPD其中CF為進位位的值。例如:ADCAX,DX;AX+DX→AX注意:對標志位的影響同一般加法指令。3)增量指令INC(加1指令)格式:INCOPD執(zhí)行的操作:OPD+1→OPD例如:INCDX;DX+1→DX注意:操作數可以是字和字節(jié),且為無符號數。只能早寄存器和內存單元中。影響除CF外的5個標志位。4.48086指令簡介2.減法指令1)不帶借位減法指令SUB格式:SUBOPD,OPS執(zhí)行的操作:OPD-OPS→OPD例如:SUBAX,DX;AX-DX→AX同加法指令一樣影響標志位(AF:有借位,CF:有借位)2)帶借位減法指令SBB格式:SBBOPD,OPS執(zhí)行的操作:OPD–OPS-CF→OPD其中CF為進位位的值。例如:SBBAX,DX對標志位的影響同不帶借位減法指令。4.48086指令簡介3)減量指令DEC(減1指令)格式:DECOPD執(zhí)行的操作:OPD一1→OPD例如:DECCX;(CX)-1→CX影響除CF的其它標志位
4)求負數指令NEG格式:NEGOPD指令功能:OPD0-(OPD)注意:操作數可以是字節(jié)和字,且是補碼表示的無有符號數。只能在通用寄存器和內存單元中。注意溢出OF和CF的變化5)算術比較指令CMP格式:CMPOPD,OPS執(zhí)行的操作:OPD-OPS該指令與SUB指令一樣執(zhí)行減法操作,但它并不保存結果,只是根據結果設置條件標志位。CMP指令后往往跟一條條件轉移指令,根據比較結果產生不同的程序分支。例如:CMPAX,BX;AX-BX若指令執(zhí)行前CF=1,AX=1000H,BX=0100H。則指令執(zhí)行后CF=0,ZF=0,OF=0,SF=0,PF=1。4.48086指令簡介3.乘法指令MUL無符號數乘法
IMUL帶符號數乘法1)MUL無符號數乘法指令格式:MULOPS執(zhí)行的操作:字節(jié)操作數:AL*OPS→AX字操作數:AX*OPS→DX:AX雙字操作數:EAX*OPS→EDX:EAX例如:MULCL若指令執(zhí)行前AL=0B4H,CL=11H。則指令執(zhí)行后AX=0BF4H。MUL指令只影響CF、OF:如果是AH(字節(jié)乘法)或者DX(字乘法)為全0,則CF和OF=0,否則CF=OF=1。4.48086指令簡介2)IMUL帶符號數乘法指令格式:IMULOPS執(zhí)行的操作與MUL相同,但兩個操作數均是帶符號的補碼數。例如:IMULCL對標志位的影響同MUL指令。4.48086指令簡介4.除法指令DIV無符號數除法指令IDIV帶符號數除法指令1)DIV無符號數除法指令格式:DIVOPS若OPS為字節(jié)類型,則:AX/OPS的商→ALAX/OPS的余數→AH若OPS為字類型,則:DX:AX/OPS的商→AXDX:AX/OPS的余數→DX對標志位無有效影響。4.48086指令簡介以上幾種形式商和余數均為無符號數。2)IDIV帶符號數除法指令格式:IDIVOPS執(zhí)行的操作:與DIV相同,但操作數必須是帶符號補碼數,商和余數也都是帶符號數,且余數的符號和被除數的符號相同。例如:IDIVBL若指令執(zhí)行前AX=0400H,BL=0B4H。則指令執(zhí)行后AL=0F3H(商),AH=24H(余數)4.48086指令簡介3)字節(jié)和字的符號擴展指令CBW:使用AHCWD:使用DX主要用于除法指令的被除數擴位,對標志位無影響。4.48086指令簡介6.調整指令1)DAA加法的壓縮BCD碼十進制調整指令格式:DAA這條指令之前必須執(zhí)行ADD或ADC指令。加法指令必須把兩個壓縮BCD碼相加,并把相加結果存放在AL寄存器中。如果AF標志(輔助進位位)為1,或者AL寄存器的低4位是16進制的A~F中的任意一位數,則AL寄存器內容加06H修正,且將AF位置1;例如:DAA若指令執(zhí)行前AL=3AH,AF=0,CF=0。則指令執(zhí)行后AL=40H,AF=1,CF=0如果CF標志為1;或者AL寄存器的高4位是A~F中的任意一位數,則AL寄存器內容加60H修正,并將CF位置1;4.48086指令簡介例如:DAA若指令執(zhí)行前AL=F8H,AF=0,CF=0。則指令執(zhí)行后AL=58H,AF=1,CF=1。如果AL寄存器的高4位和低4位都滿足以上條件,則將AL寄存器的內容加66H。例如:DAA若指令執(zhí)行前AL=0AH,AF=0,CF=1。則指令執(zhí)行后AL=70H,AF=1,CF=04.48086指令簡介2)DAS減法的壓縮BCD碼十進制調整指令格式:DAS執(zhí)行的操作:把AL中的兩個壓縮BCD碼之差調整成壓縮BCD碼的格式→AL。應該注意的是,在執(zhí)行這條指令之前,必須先執(zhí)行SUB或SBB指令。如果AF標志為1,或者AL寄存器的低4位是16進制的A~F中的任意一位數,則AL寄存器的內容減06H,且將AF位置1;如果CF標志為1,或者AL寄存器的高4位是16進制的A~F中的任意一位數,則AL寄存器內容減60H,并將CF位置1。如果AL寄存器的高4位和低4位都滿足以上條件,則將AL寄存器的內容減66H。4.48086指令簡介例如:DAS若指令執(zhí)行前AL=49H,AF=1,CF=0。則指令執(zhí)行后AL=43H,AF=1,CF=0。4.48086指令簡介3)AAA加法的非壓縮BCD碼調整指令本指令的調整步驟是:①如AL寄存器的低4位在A~F之間或AF為1,則AL寄存器的內容加06H,AH寄存器的內容加1,并將AF位置1;②清除AL寄存器的高4位;③AF位的值送CF位。例如:AAA若指令執(zhí)行前AX=000CH,AF=0,CF=0。則指令執(zhí)行后AX=0102H,AF=1,CF=1。4.48086指令簡介4)AAS減法的非壓縮BCD碼調整指令格式:AAS執(zhí)行的操作:把AL中的兩個非壓縮BCD碼之差調整成非壓縮BCD碼格式→ALAH-調整產生的借位值→AH。應該注意的是,在執(zhí)行這條指令之前,必須先執(zhí)行SUB或SBB指令把兩個非壓縮的BCD碼相減,并把結果存放在AL寄存器中。5)AAS減法的非壓縮BCD碼調整指令本指令的調整步驟是:①如AL寄存器的低4位在A~F之間,或AF位為1,則把AL寄存器的內容減6,AH寄存器的內容減1,并將AF位置1;②清除AL寄存器的高4位;③AF位的值進CF位。例如:AAS若指令執(zhí)行前AX=0407H,AF=0,CF=0。則指令執(zhí)行后AX=0407H,AF=0,CF=0。4.48086指令簡介位運算指令(1)邏輯非指令NOT格式:NOTOPD
功能:OPD←OPD說明:操作數不能用立即數,此指令執(zhí)行后對標志無影響,其余位運算指令均SF、ZF、PF、CG=OF=0。也可用于求補(2)邏輯與指令AND格式:ANDDOPD,SOPD功能:DOPD←DOPD∧SOPD(3)邏輯或指令OR格式:ORDOPD,SOPD功能:DOPD←DOPD∨SOPD(4)邏輯異或指令XOR格式:XORDOPD,SOPD功能:DOPD←DOPD+SOPD(5)邏輯測試指令TEST格式:TESTDOPD,SOPD功能:除不回送結果外與AND指令功能相同4.48086指令簡介2.移位操作指令
(1)算術移位指令1)算術左移指令SAL格式:SALDSOPD,CL|1功能:向左移位指定次數,每左移1次低位補0,最高位移入CF2)算術右移指令SAR格式:SARDSOPD,CL|1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年廣東江門中醫(yī)藥職業(yè)學院單招職業(yè)技能考試模擬試題含詳細答案解析
- 2026年九江職業(yè)技術學院單招綜合素質筆試備考試題含詳細答案解析
- 2026年鄭州工商學院單招綜合素質筆試備考試題含詳細答案解析
- 2026年江西婺源茶業(yè)職業(yè)學院單招綜合素質筆試備考題庫含詳細答案解析
- 2026年宜賓職業(yè)技術學院單招職業(yè)技能考試備考題庫含詳細答案解析
- 2026年仰恩大學單招職業(yè)技能考試模擬試題含詳細答案解析
- 2026年遼源職業(yè)技術學院單招綜合素質筆試備考題庫含詳細答案解析
- 2026年阜陽職業(yè)技術學院高職單招職業(yè)適應性測試模擬試題及答案詳細解析
- 2026年江西醫(yī)學高等??茖W校單招綜合素質考試備考題庫含詳細答案解析
- 2026年鄭州城建職業(yè)學院單招綜合素質筆試備考題庫含詳細答案解析
- 喪葬費用補助申請的社保授權委托書
- 2024年度初會《經濟法基礎》高頻真題匯編(含答案)
- 課例研究報告
- 問卷設計-問卷分析(社會調查課件)
- 啤酒營銷促銷實戰(zhàn)技巧之經銷商管理技巧知識培訓
- 建筑工程各部門職能及各崗位職責201702
- 機柜端口對應表
- GB/T 3934-2003普通螺紋量規(guī)技術條件
- 中考作文指導(北京市) 課件(92張PPT)
- 車輛贈與協議模板
- 補充醫(yī)療保險費用報銷審批表(申請人簽字)
評論
0/150
提交評論