微機(jī)原理和接口技術(shù)應(yīng)用8086指令系統(tǒng)和通用指令_第1頁(yè)
微機(jī)原理和接口技術(shù)應(yīng)用8086指令系統(tǒng)和通用指令_第2頁(yè)
微機(jī)原理和接口技術(shù)應(yīng)用8086指令系統(tǒng)和通用指令_第3頁(yè)
微機(jī)原理和接口技術(shù)應(yīng)用8086指令系統(tǒng)和通用指令_第4頁(yè)
微機(jī)原理和接口技術(shù)應(yīng)用8086指令系統(tǒng)和通用指令_第5頁(yè)
已閱讀5頁(yè),還剩106頁(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ī)原理和接口技術(shù)應(yīng)用8086指令系統(tǒng)和通用指令3.4 8086的通用指令 可以分為以下六類: 數(shù)據(jù)傳送指令 算術(shù)運(yùn)算指令 邏輯運(yùn)算和移位指令 串操作指令 控制轉(zhuǎn)移指令 處理器控制指令3.4.1 數(shù)據(jù)傳送指令包括: 通用傳送指令;累加器專用傳送指令; 地址傳送指令;標(biāo)志傳送指令;1、通用傳送指令1)基本傳送指令(MOV)指令格式:MOV DST,SRC;操作:將SRC內(nèi)容賦給DST。所有通用傳送指令都不影響標(biāo)志位。注意:不能用MOV指令實(shí)現(xiàn)以下傳送存儲(chǔ)器操作數(shù)之間不能直接傳送 MOV 1000H , DI 錯(cuò) 應(yīng)改為 MOV AX , DI MOV 1000H, AX立即數(shù)不能直接傳送段寄存器

2、 MOV DS,2000H 錯(cuò) 應(yīng)改為 MOV AX, 2000H MOV DS , AX 段寄存器之間不能直接傳送 MOV ES , DS ; 錯(cuò) 應(yīng)改為 MOV BX , DS MOV ES , BXCS只可以作為源操作數(shù)例:MOV CS,AX ;錯(cuò) MOV AX,CS ;對(duì)源操作數(shù)和目的操作數(shù)的寬度必須相同立即數(shù)段寄存器 存儲(chǔ)器 (各種尋址) 通 用寄存器2)堆棧指令(PUSH 、POP) 堆棧(STACK)的概念 數(shù)據(jù)的存儲(chǔ)按后進(jìn)先出(Last In First OutLIFO)原則組織的一段內(nèi)存區(qū)域。堆棧用途存放寄存器或存儲(chǔ)器中暫時(shí)不使用的數(shù)據(jù),在使用這些數(shù)據(jù)時(shí)可方便地將其彈出;調(diào)用

3、子程序或發(fā)生中斷時(shí)要保護(hù)斷點(diǎn)信息(入棧),子程序或中斷返回時(shí)恢復(fù)斷點(diǎn)信息(出棧)。堆棧用途如下圖斷點(diǎn)信息:程序斷點(diǎn)地址、標(biāo)志寄存器及其它能被子程序使用和改變的寄存器。8086使用段寄存器SS和指針寄存器SP管理堆棧SS決定了堆棧區(qū)的首地址,SP的初始值決定了堆棧區(qū)的末地址,堆棧區(qū)的最大長(zhǎng)度隨之而定數(shù)據(jù)入棧時(shí),SP做減量調(diào)整,SP指示的單元稱為“棧頂”,即棧頂向下延伸;SP永遠(yuǎn)指向剛剛?cè)霔5臄?shù)據(jù)數(shù)據(jù)出棧時(shí),SP做增量調(diào)整,即棧頂向上延伸SP永遠(yuǎn)指向?qū)⒁鰲5臄?shù)據(jù)。SS:0000HSS:SP堆棧區(qū)數(shù)據(jù)入棧數(shù)據(jù)出棧入棧的數(shù)據(jù)全部出完,SP恢復(fù)初始值。入棧指令(PUSH): 格式:PUSH src 操

4、作過(guò)程分兩步完成: (SP) (SP) - 2 (SP)+1,(SP) (src) 功能:把一個(gè)字壓入由SP指向的堆棧區(qū)。如:PUSH AX例1:PUSH BX;(設(shè)DS:BX字單元數(shù)據(jù)為55AAH)xxHxxHxxHAAH55HxxHSS:SP指令執(zhí)行前指令執(zhí)行后SS:SP高位地址低位地址出棧指令(POP)格式:POP dst ; 操作: (dst) (SP)+1,(SP) (SP) (SP)+2 功能:把SP所指向的堆棧頂部的一個(gè)字送入目的地址,同時(shí)進(jìn)行修改堆棧指針。如: POP BX POP AX 例2:POP BX;設(shè)接在例1后執(zhí)行。AAH55HxxHSS:SP指令執(zhí)行前AAH55Hx

5、xHSS:SP指令執(zhí)行后55AAHBX應(yīng)注意的問(wèn)題 堆棧操作都按字操作, “PUSH AL”為錯(cuò)誤指令; PUSH , POP 指令的操作數(shù)可以是寄存器或存儲(chǔ)單元;PUSH CS 合法,POP CS 非法;執(zhí)行PUSH 指令, (SP)-2 (SP),低字節(jié)放在低地址,高字節(jié)放在高地址;SP總是指向棧頂;堆棧最大容量即為SP的初值;堆棧中的數(shù)據(jù)彈出后,數(shù)據(jù)并沒(méi)有在堆棧中消失,除非壓入新數(shù)據(jù),畫(huà)圖時(shí)注意;使用堆棧指令保護(hù)和恢復(fù)現(xiàn)場(chǎng)時(shí),要注意指令的排列順序,如:PUSH AXPUSH BXPUSH DS.POP DSPOP BXPOP AX堆棧復(fù)習(xí)SP的初值為1000H,SS=2000H,AX=3

6、040H,BX=5060H,試問(wèn):(1)該堆棧段的首地址是多少?末地址是多少?(2)執(zhí)行指令PUSH AX后,SP的值為多少?(3)再執(zhí)行PUSH BX 及POP AX后,SP、AX、BX的值為多少?(4)此時(shí),SP所指內(nèi)存空間的數(shù)據(jù)為多少?3)交換指令(XCHG)格式:XCHG dst , src;(dst) (src)可以實(shí)現(xiàn):寄存器之間 寄存器和存儲(chǔ)器之間注意: 存儲(chǔ)器之間不能直接交換; 段寄存器不能作為操作數(shù); 允許字或字節(jié)操作。了解!2、累加器專用傳送指令 1)輸入指令(IN) 功能:用于CPU從外設(shè)端口接收數(shù)據(jù)。 具體形式有四種: IN AL, data8;從8位端口地址輸入一個(gè)字

7、節(jié) IN AX, data8;從8位端口地址輸入一個(gè)字 IN AL, DX;從16位端口地址輸入一個(gè)字節(jié) IN AX, DX;從16位端口地址輸入一個(gè)字例1: IN AL, 80H; 從地址為80H的端口讀入一個(gè)字節(jié);例2: MOV DX, 1020H; 將16位端口地址賦給DX IN AX, DX; 從(DX)為地址的端口讀入16位數(shù)據(jù) 注意:1)CPU對(duì)各個(gè)外部設(shè)備接口也采用地址編碼。 8086CPU連接外部設(shè)備的地址可以是8位或16位。存儲(chǔ)器I/O接口輸入設(shè)備I/O接口數(shù)據(jù)總線 DB控制總線 CB地址總線 AB輸出設(shè)備CPU20位8位或16位 注意:2)8086CPU訪問(wèn)存儲(chǔ)器和訪問(wèn)外部

8、設(shè)備采用不同的指令形式,外設(shè)地址與存儲(chǔ)器地址可以重疊。CPU的IO/M引腳控制存儲(chǔ)器或外設(shè)被選通,當(dāng)訪問(wèn)存儲(chǔ)器時(shí)IO/M引腳輸出低電平,當(dāng)訪問(wèn)外設(shè)時(shí)該引腳輸出高電平。 MOV BX,1234H;從存儲(chǔ)器的1234H單元讀數(shù)據(jù),放 入BX。CPU執(zhí)行該指令使IO/M=0 MOV DX,1234H ;立即數(shù)賦給DX IN AX,DX;從地址為1234H 的外設(shè)讀數(shù)據(jù), CPU執(zhí)行該指令使IO/M=1存儲(chǔ)器I/O接口輸入設(shè)備I/O接口數(shù)據(jù)總線 DB控制總線 CB地址總線 AB輸出設(shè)備CPUIO/M 2)輸出指令(OUT) 功能:用于CPU向外設(shè)端口發(fā)送數(shù)據(jù) 四種形式: OUT data8 , AL;

9、向8位地址端口輸出一個(gè)字節(jié) OUT data8, AX ;向8位地址端口輸出一個(gè)字 OUT DX , AL;向16位地址端口輸出一個(gè)字節(jié) OUT DX , AX ;向16位地址端口輸出一個(gè)字注意:IO輸入時(shí)一定是累加器作為目的地址,輸出時(shí)一定是端口為目的地址3、目的地址傳送指令 8086 提供三條: LEA LDS LES1)LEA (Load Effective Address)格式: LEA reg16 , memReg16 16位通用寄存器; mem 存儲(chǔ)單元;功能:將源操作數(shù)的偏移地址傳送到目的操作數(shù); 注意:源操作數(shù)必須以寄存器間接尋址、變址尋址、基址加變址尋址等方式表示的存儲(chǔ)器操作

10、數(shù);目的操作數(shù)為一個(gè)16位的通用寄存器。例: LEA AX,DI設(shè)(DI)=1005H執(zhí)行 結(jié)果:(AX)=1005H例: LEA BX,BX+SI+0F62H設(shè)(BX)=0400H,(SI)=003CH執(zhí)行指令后: 源操作數(shù)地址為:(BX)+(SI)+ 0F62H =0400H+003CH+0F62H=139EH則(BX)=139EH2)LDS (Load pointer using DS)(了解)格式:LDS reg16 , mem ; 功能:把源操作數(shù)指定的4個(gè)相繼字節(jié)的數(shù)據(jù)分別送指令指定的寄存器及DS寄存器中。 (reg16)(mem) (DS)(mem)+2)3)LES (Load

11、pointer using ES )(了解)格式:LES reg16 ,mem ;功能:把源操作數(shù)指定的4個(gè)相繼字節(jié)的數(shù)據(jù)分別送指令指定的寄存器及ES寄存器中。 (reg16)(mem) (ES)(mem)+2)例: 設(shè) (DS)=0C000H指令 LDS SI, 0010H執(zhí)行指令后: (SI)=0180H (DS)=2000H 80H01H00H20HC000H:0010H(DS)C0011HC0012HC0013H.存儲(chǔ)器C0010H例: 設(shè) (DS)=B 000H (BX)=080AH指令 LES DI, BX執(zhí)行指令后: (DI)=05A2H (ES)=4000HA2H05H00H4

12、0HB000H:080AH(DS)B080BHB080CHB080DH.存儲(chǔ)器(BX)B080AH4、標(biāo)志傳送指令 8086有四條標(biāo)志傳送操作指令: 1)LAHF(Load AH from flags)(了解)格式:LAHF ;功能:標(biāo)志寄存器低八位傳送給AH (AH)(PSW的低字節(jié))2)SAHF(Store AH into Flags)(了解) 格式:SAHF 功能:AH內(nèi)容傳送給標(biāo)志寄存器低八位。 (PSW的低字節(jié))(AH)3)PUSHF(Push Flags )格式:PUSHF;功能 : 標(biāo)志進(jìn)棧。 (SP)(SP)-2 (SP)+1,(SP)(PSW)4)POPF(Pop Flags

13、 ) 格式:POPF; 功能:標(biāo)志出棧。 (PSW)(SP)+1,(SP) (SP)(SP)+23.4.1 數(shù)據(jù)傳送指令通用傳送指令; (MOV;XCHG;PUSH;POP)累加器專用傳送指令;(IN;OUT)地址傳送指令;(LEA;LDS;LES)標(biāo)志傳送指令;(LAHF;SAHF;PUSHF;POPF)3.4.2 算術(shù)運(yùn)算類指令包括: 加法指令、減法指令、乘法指令、除法指令1、加法指令8086具有5條加法指令:ADD(Addition) 加法指令A(yù)DC(Add with Carry)帶進(jìn)位加法指令I(lǐng)NC(Increment)加 1指令A(yù)AA(ASCII ad for addition) A

14、SCII加法調(diào)整指令(了解)DAA(Decimal ad for addition)十進(jìn)制加法調(diào)整指令(了解)1)不含進(jìn)位的加法指令A(yù)DD指令格式:ADD dest , src ;功 能 :(dest) (dest)+(src)Src:立即數(shù),通用寄存器,存儲(chǔ)器dest:通用寄存器,存儲(chǔ)器例:ADD CL,10ADD DX,SIADD AX, 2F00HADD 100HBX, ALADD DI, 30H特點(diǎn): 可進(jìn)行8位或16位的無(wú)符號(hào)數(shù)或有符號(hào)數(shù)加法運(yùn)算; 源操作數(shù)和目標(biāo)操作數(shù)不能同時(shí)為存儲(chǔ)器, 不能為段寄存器; 指令影響標(biāo)志位8位(有符號(hào))數(shù)相加,和超出范圍(128127),或16位(有符

15、號(hào))數(shù)相加,和超出范圍(-32768 +32767),則 O=1 8位(無(wú)符號(hào))數(shù)相加,和超過(guò)255,或16位(無(wú)符號(hào))數(shù)相加,和超過(guò)65535,則 C=1, 其他標(biāo)志(S,A,P,Z)由運(yùn)算結(jié)果按定義確定。2)含進(jìn)位加法指令A(yù)DC(Add with carry)格式: ADC dest,src ;功能:(dest)(dest)+(src)+C C: 進(jìn)位標(biāo)志C的當(dāng)前值特點(diǎn): 與ADD同。類型舉例: ADC CX, 300 ADC AL, BL ADC DX, SI 用途: ADC 指令主要用于多字節(jié)運(yùn)算中。 如:求兩個(gè)32位數(shù)12345678H與0ABCDEFABH之和MOV AX, 123

16、4HMOV BX, 5678HADD BX, 0EFABHADC AX, 0ABCDH3)加 1 指令I(lǐng)NC (Increment by 1 )格式: INC dest;功能: (dest)(dest)+1 dest : 通用寄存器、存儲(chǔ)器;用途:用于在循環(huán)程序中修改循環(huán)次數(shù)或地址指針。例: INC DL; 8位寄存器1 INC SI ;16位寄存器1而 INC 2100;錯(cuò)誤,應(yīng)寫(xiě)成 INC WORD PTR 2100 ; 存儲(chǔ)器內(nèi)容1(字操作),PTR為屬性轉(zhuǎn)換操作。又如 INC BYTE PTR BXSI ;字節(jié)操作 2、減法指令(Subtraction) 8086有7條減法指令: SU

17、B(Subtraction) 不含借位減法指令 SBB(Subtraction with Borrow)含借位減法指令 DEC(Decrement by 1) 減1指令CMP(Compare) 比較指令 NEG(Negate) 求補(bǔ)指令(略)AAS(ASCII Ad for Subtraction) 減法ASCII調(diào)整指令(略) DAS(Decimal Ad for Subtraction) 減法十進(jìn)制調(diào)整指令(略)1)不含借位減法指令SUB(Subtraction) 格式:SUB: dest,src; 功能:(dest)(dest)-(src)Src:立即數(shù),通用寄存器,存儲(chǔ)器。Dest:通

18、用寄存器,存儲(chǔ)器。例:SUB AL, 37HSUB BX, DX2)含借位減法指令 SBB(Subtraction with borrow) 格式:SBB dest,src; 功能:(dest)(dest)-(src)-CSrc:立即數(shù),通用寄存器,存儲(chǔ)器dest:通用寄存器,存儲(chǔ)器 例:SBB BX, 100H SBB CX, DX SBB WORD PTR 100HBP, 1003)減 1 指令DEC (Decrement by 1 ) 格式:DEC dest 功能: (dest)(dest)-1 dest: 通用寄存器、存儲(chǔ)器。不能是段寄存器。 用途:用于在循環(huán)程序中修改地址指針和循環(huán)次

19、數(shù)。4)求補(bǔ)指令NEG (Negate) 格式: NEG dest ; 功能:(dest) 0 - (dest) dest : 通用寄存器、存儲(chǔ)器。 操作: 把操作數(shù)按位求反后末位+1。5) 比較指令CMP(Compare)格式:CMP dest,src; (dest)-(src) 結(jié)果不保留,只是用來(lái)影響標(biāo)志位。影響標(biāo)志:A、C、O、P、S、Z。src:立即數(shù),通用寄存器,存儲(chǔ)器。dest:通用寄存器,存儲(chǔ)器。例: CMP AL,0AH;寄存器與立即數(shù)比較CMP CX, DI;寄存器與寄存器比較CMP AX, 1000H;寄存器與存儲(chǔ)器比較CMP BX+5, SI ;存儲(chǔ)器與寄存器比較用途:

20、用比較指令來(lái)比較兩個(gè)數(shù)之間的關(guān)系 (1)根據(jù)Z標(biāo)志,判斷兩者是否相等;(2)根據(jù)C標(biāo)志, 判斷兩個(gè)無(wú)符號(hào)數(shù)的大?。唬?)用S、O標(biāo)志,判斷兩個(gè)帶符號(hào)數(shù)的大小(P.62)OF=0,若SF=0,則AB,否則AB,否則AB算術(shù)運(yùn)算對(duì)標(biāo)志位的影響舉例:1111 1111對(duì)應(yīng)無(wú)符號(hào)數(shù)為255,有符號(hào)數(shù)1;1000 0010對(duì)應(yīng)無(wú)符號(hào)數(shù)130,有符號(hào)數(shù)-126;1111 1101對(duì)應(yīng)無(wú)符號(hào)數(shù)253,有符號(hào)數(shù)-3;求:1111 1111 +1000 0010 =1000 0001結(jié)果的無(wú)符號(hào)數(shù)為129,有符號(hào)數(shù)為-127 ; C=1 O=0 求:1111 1101+1000 00100111 1111結(jié)果的

21、無(wú)符號(hào)數(shù)為127,有符號(hào)數(shù)為127;C=1;O1算術(shù)運(yùn)算指令執(zhí)行這些運(yùn)算時(shí),自動(dòng)地將相關(guān)標(biāo)志位置為相應(yīng)的狀態(tài)。復(fù)習(xí)判斷下列指令書(shū)寫(xiě)是否正確MOV AL, BXMOV AL, CLINC BXMOV 5,ALMOV BX, SIMOV BL, 0F5HMOV DX, 2000HPOP CSPUSH CSIN BX, DX復(fù)習(xí)編程實(shí)現(xiàn)200減去AL中的內(nèi)容。3. 乘法指令1)無(wú)符號(hào)乘法(MUL) 格式:MUL SRC 操作: 字節(jié)操作數(shù): AX (AL)*(SRC) 字操作數(shù):DX:AX (AX)*(SRC) 2)帶符號(hào)乘法(IMUL) 格式:IMUL SRC 操作:同MUL, 但操作數(shù)和乘積均帶

22、符號(hào);按有符號(hào)數(shù)的規(guī)則相乘;舉例: MUL BL ; AX (AL)*(BL) MUL BX; AX (AX)*(BX)的低16位 DX (AX)*(BX)的高16位4、除法指令1)無(wú)符號(hào)除法(DIV)格式:DIV SRC操作: 字節(jié)除數(shù):AL (AX)/(SRC) 之商 AH (AX)/(SRC) 之余數(shù) 字除數(shù): AX (DX:AX)/(SRC)之商 DX (DX:AX)/(SRC) 之余數(shù)2)帶符號(hào)除法(IDIV)格式:IDIV SRC 操作:同DIV指令商和余數(shù)是帶符號(hào)的:商的符號(hào)符合一般代數(shù)符號(hào)規(guī)則,余數(shù)的符號(hào)與被除數(shù)相同。3)字節(jié)擴(kuò)展指令(CBW) (了解) 格式:CBW ;Con

23、vert Byte to Word 功能:將AL 字節(jié)擴(kuò)展成字,符號(hào)位及高字節(jié)在AH中;4)字?jǐn)U展指令( CWD) (了解) 格式: CWD ;Convert Word to Double Word 功能:AX擴(kuò)展成雙字,符號(hào)位及高字在DX中;注意:這兩條指令的作用是對(duì)被除數(shù)AL或AX進(jìn)行擴(kuò)展5、十進(jìn)制調(diào)整指令(了解)共六條AAA 非壓縮BCD碼的加法十進(jìn)制調(diào)整DAA 壓縮BCD碼的加法十進(jìn)制調(diào)整AAS 非壓縮BCD碼的減法十進(jìn)制調(diào)整DAS 壓縮BCD碼的減法十進(jìn)制調(diào)整AAM 乘法的十進(jìn)制調(diào)整 AAD 除法的十進(jìn)制調(diào)整 3.4.43.4.5 邏輯運(yùn)算與移位指令【位操作指令】(一)邏輯運(yùn)算指令A(yù)

24、ND:邏輯“與”指令TEST:測(cè)試指令OR:邏輯“或”指令XOR:(eXclusive OR) 邏輯“異或”指令NOT:邏輯“非”指令1) “與”指令A(yù)ND 格式:AND dest, src ; 功能:(dest)(dest) (src) src: 立即數(shù)、通用寄存器、存儲(chǔ)器。 dest: 通用寄存器、存儲(chǔ)器。 兩操作數(shù)不能同為存儲(chǔ)器操作數(shù) 操作類型舉例:AND AL, 0FH AND CX, DI AND SI, 2456H2)測(cè)試指令TEST 格式: TEST dest , src;(dest)(src)src、dest的規(guī)則同“AND” 操作:操作數(shù)相與,結(jié)果不保存,用來(lái)改變標(biāo)志位。 操

25、作類型舉例:TEST BH, 7TEST SI , BPTEST DI , 1030HBX3) “或”指令OR 格式:OR dest, src;dest: 寄存器、存儲(chǔ)器。src: 立即數(shù)、寄存器、存儲(chǔ)器。 不能同時(shí)為存儲(chǔ)器操作數(shù)4) “異或”指令XOR 格式:XOR dest , src dest: 寄存器、存儲(chǔ)器。src: 立即數(shù)、寄存器、存儲(chǔ)器 不相同則為1, 相同則為0; 不能同時(shí)為存儲(chǔ)器操作數(shù)5) “非”指令NOT 格式: NOT dest ; 操作: 按位求反 操作數(shù):寄存器、存儲(chǔ)器,不能是立即數(shù)。 邏輯運(yùn)算指令的應(yīng)用屏蔽若干位。 (常用指令) AND AL,01H;屏蔽AL的D7

26、D1,保留D0 AND AL,0FH;屏蔽AL高4位,保留低4位使若干位置1 (常用指令) OR BL,0F0H;使BL高4位置1,低4位不變清除CF、OF 或 設(shè)置標(biāo)志 AND AL,AL (AND AL,0FFH;OR BL,BL;) 類似指令沒(méi)有改變目的操作數(shù),但使CF=OF=0,也可能純粹以設(shè)置其他標(biāo)志(ZF)為目的。 求反 NOT AL / NOT WORD PTRBX+DI 對(duì)指定位求反 XOR AL,0FH;AL高4位不變,低4位求反 XOR CL,55H;CL偶數(shù)位求反,奇數(shù)位不變 清除寄存器及CF(常用指令) XOR AX,AX / XOR BX,BX XOR BYTE PT

27、RBX,BYTE PTRBX X0=X X1=X邏輯運(yùn)算指令的應(yīng)用不改變操作數(shù),測(cè)試操作數(shù)或操作數(shù)的指定位TEST AL,0FFH;由ZF標(biāo)志判斷AL是否為零 ;也可以用CMP指令。TEST AL,01;由ZF標(biāo)志判斷AL的D0是否為零, ;ZF=1,則AL.D0=0 ;ZF=0,則AL.D0=1AND AL,01 ;也可完成上述功能,但是改變了目的操作數(shù)邏輯運(yùn)算指令的應(yīng)用(二)移位指令共有以下8條SAL (Shift Arithmetic Left) 算術(shù)左移 SAR (Shift arithmetic right) 算術(shù)右移SHL (Shift logical left)邏輯左移 SHR

28、(Shift logical right) 邏輯右移ROL (Rotate left) 循環(huán)左移 ROR (Rotate right) 循環(huán)右移 RCL (Rotate left with carry) 帶進(jìn)位循環(huán)左移RCR (Rotate right with carry) 帶進(jìn)位循環(huán)右移 移位指令的格式 操作碼 reg/mem, Count Count=1或CL,指定移位次數(shù) 移位或移位次數(shù)在CL中 SHL AH,1 SAL SI, CL SAL WORD PTRBX+5 , 1 ROL BH , 1 ROL DX , CL 字節(jié)或字操作,通用寄存器或存儲(chǔ)器操作數(shù)1)邏輯左移/算術(shù)左移指令

29、SHL/SAL 這兩條指令實(shí)現(xiàn)相同的操作 操作示意圖如下圖,相當(dāng)于無(wú)符號(hào)數(shù)2 例: MOV AH, 3FH; SAL AH, 1; MOV CL, 2 SAL AH,CL ; 0C操作數(shù)(AH)=0011 1111B(63D)(AH)=0111 1110=7EH(126D)(AH)=1111 1000= 0F8H(248D)2)邏輯右移指令SHR 操作示意圖如下: 指令格式舉例:SHR BL , 1SHR AX , CLSHR BYTE PTR DI+BP, 1 相當(dāng)于無(wú)符號(hào)數(shù)除以2操作數(shù)C03)算術(shù)右移指令SAR 指令操作示意圖如下圖所示 舉例:MOV AL, 88H MOV CL,2 SA

30、R AL, CL操作數(shù)C執(zhí)行結(jié)果AL=1110 0010=0E2H4)不含進(jìn)位標(biāo)志循環(huán)左移指令ROL 操作示意圖如下 C操作數(shù) 指令格式舉例:ROL BH , 1ROL DX , CLROL WORD PTR 12HDI, 15)不含C的循環(huán)右移指令ROR 操作示意圖如下 C操作數(shù)6)含C循環(huán)左移指令RCL 操作示意圖如下 C操作數(shù) 指令格式舉例:RCL BX , 1RCL DL , CL7)含C循環(huán)右移指令RCR 操作示意圖如下 C操作數(shù) 指令格式舉例:RCR DI, 1RCR SI , CL注意:標(biāo)志設(shè)置 AF:對(duì)AF無(wú)定義; CF:按移入的值或?yàn)?或?yàn)?; 根據(jù)移位后的結(jié)果設(shè)置SF、ZF

31、、PF; OF:當(dāng)移動(dòng)1位時(shí),移位后如果符號(hào)位發(fā)生變化,則OF=1,符號(hào)位不發(fā)生變化,則OF=0,移位次數(shù)大于1時(shí),OF不定。 3.4.7 串操作指令“串”就是內(nèi)存中一段地址相連的字節(jié)或字;串操作,也叫數(shù)據(jù)塊操作;可實(shí)現(xiàn)存儲(chǔ)器數(shù)據(jù)間的直接傳送; 8086有5種基本串操作: MOVS(Move string) 串傳送指令 CMPS(Compare string) 串比較指令 SCAS(Scan string) 串掃描指令 LODS(Load from string) 取串指令 STOS (Store in to string) 存串指令串傳送指令MOVS 串傳送有2種格式: (1) MOVSB字

32、節(jié)傳送;把數(shù)據(jù)段中SI尋址的數(shù)據(jù)傳送到附加段中DI尋址的存儲(chǔ)區(qū)域中;然后修改SI、DI。 (ES: DI)(DS: SI); (SI)(SI)1;(DI)(DI) 1 當(dāng)方向標(biāo)志 D=0時(shí)用“+” , D=1時(shí)用“-” 2000H:1000H附加段(ES)21001H21002H21003H.存儲(chǔ)器21000H80H01H9AH20H1000H:0010H數(shù)據(jù)段(DS)10011H10012H10013H.存儲(chǔ)器10010H MOV AX, 1000H MOV DS, AX ;數(shù)據(jù)段地址賦值 MOV AX, 2000H MOV ES, AX ; 附加段地址賦值 MOV SI, 0013H ;源

33、數(shù)據(jù)塊首地址 MOV DI, 1003H ;目的數(shù)據(jù)塊首地址 MOV CX, 4 ;數(shù)據(jù)塊長(zhǎng)度賦計(jì)數(shù)器 STD /設(shè)置方向標(biāo)志LP: MOVSB ;完成一個(gè)字節(jié)數(shù)據(jù)傳送 DEC CX ;計(jì)數(shù)器減一 JNZ LP ;結(jié)果不為0,重復(fù)傳送 HLT MOV AX, 1000H MOV DS, AX ;數(shù)據(jù)段地址賦值 MOV AX, 2000H MOV ES, AX ; 附加段地址賦值 MOV SI, 0013H ;源數(shù)據(jù)塊首地址(最高位地址) MOV DI, 1003H ;目的數(shù)據(jù)塊首地址(最高位地址) MOV CX, 4 ;數(shù)據(jù)塊長(zhǎng)度賦計(jì)數(shù)器 STDLP: MOV AX,SI MOV ES: DI

34、,AX DEC SI DEC DI DEC CX JNZ LP HLT(2) MOVSW 操作:字傳送;(ES:DI)(DS:SI);(SI)(SI)2; (DI)(DI) 2 當(dāng)方向標(biāo)志 D=0時(shí)用“+” , D=1時(shí)用“-” 可見(jiàn),該類指令可以實(shí)現(xiàn)從存儲(chǔ)器到存儲(chǔ)器的數(shù)據(jù)傳送;而且傳送非常簡(jiǎn)便REP重復(fù)前綴指令 重復(fù)串操作執(zhí)行過(guò)程: (1) 當(dāng)(CX)0, (CX) (CX)-1 , 執(zhí)行REP后的串指令。 (2) 當(dāng)(CX)= 0 ,結(jié)束REP,執(zhí)行下一條指令。REP 執(zhí)行流程圖注意:重復(fù)前綴不能單獨(dú)使用,只能附加在串操作指令前面,使串操作重復(fù)執(zhí)行 如上例可用REP操作如下 MOV AX,

35、 1000H MOV DS, AX MOV AX, 2000H MOV ES, AX MOV SI, 0010H MOV DI, 1000H MOV CX, 4 ;數(shù)據(jù)塊長(zhǎng)度賦計(jì)數(shù)器 CLDREP MOVSB ;重復(fù)完成字節(jié)數(shù)據(jù)傳送 HLT從串中取數(shù)指令LODS有2種格式:(1) LODSB (字節(jié)); (AL) (DS:SI),(SI) (SI) 1(2) LODSW (字) ; (AX) (DS:SI),(SI) (SI)2功能:該指令把由SI指定的數(shù)據(jù)段中某單元內(nèi)容賦給AL或AX 3. 存入串指令STOS有2種格式:STOSB (字節(jié)); (ES:DI) (AL) , (DI) (DI)

36、 1(2) STOSW (字); (ES:DI) (AX) , (DI) (DI) 2與REP聯(lián)用時(shí),可用來(lái)建立一串相同的值,串長(zhǎng)度由CX內(nèi)容決定。經(jīng)常用來(lái)初始化一段內(nèi)存區(qū)域例:將附加段64KB全部清為0mov ax, 0mov di, 0;mov cx, 8000h;32KcldLop: stoswdec cxjnz lopmov ax, 0mov di, 0;mov cx, 8000h;32KcldREP stosw4. 串比較指令CMPS2種格式:(1) CMPSB (字節(jié))(2) CMPSW (字)執(zhí)行操作: (ES:DI) (DS:SI), 結(jié)果不存,置標(biāo)志。 字節(jié)操作:(SI) (

37、SI)1,(DI)(DI) 1 字操作:(SI) (SI)2,(DI) (DI)25. 串掃描指令SCAS 有2種格式: (1) SCASB(字節(jié)) (AL)-(ES:DI), (DI)(DI)1 (2) SCASW(字) (AX)-(ES:DI), (DI) (DI)2 兩數(shù)相減,只影響標(biāo)志,不影響操作數(shù)。 用于尋找串中滿足條件的數(shù)據(jù)。 CMPS和SCAS可與前綴 REPE / REPZ和REPNE / REPNZ聯(lián)合工作 REPE/REPZ (Equal) 當(dāng)相等/為零時(shí)重復(fù)串操作 REPNE/REPNZ 當(dāng)不相等/不為零時(shí)重復(fù)串操作例:比較兩個(gè)字符串str1,str2是否相等,數(shù)據(jù)串長(zhǎng)度

38、為count,比較結(jié)果存入result單元,0表示相等,-1(ffh)表示不等。mov si,offset str1mov di,offset str2mov cx,countcldrepz cmpsb jnz unmat mov al,0 jmp outputunmat: mov al,0ffhoutput: mov result,alZF=0,兩串不同重復(fù)運(yùn)行串比較指令的幾種情況1)CX=0,ZF=1:全比完,相同2)CX=0,ZF=0:全比完,末數(shù)據(jù)不同3)CX0,ZF=0:未比完,遇到不同4)CX0,ZF=1:未比完,繼續(xù)比較3.4.6 控制傳送指令控制傳送指令包括四種:轉(zhuǎn)移指令()循

39、環(huán)控制指令()過(guò)程調(diào)用指令()中斷指令()(一)轉(zhuǎn)移指令轉(zhuǎn)移指令控制程序從一處轉(zhuǎn)換到另一處執(zhí)行。在CPU內(nèi)部,轉(zhuǎn)移是通過(guò)將目標(biāo)地址傳送給IP來(lái)實(shí)現(xiàn)的。轉(zhuǎn)移指令包括兩種:無(wú)條件轉(zhuǎn)移指令、條件轉(zhuǎn)移指令 1、無(wú)條件轉(zhuǎn)移指令JMP(Jump) 格式:JMP 語(yǔ)句標(biāo)號(hào) JMP LP; 2、條件轉(zhuǎn)移指令 1)根據(jù)單個(gè)條件標(biāo)志轉(zhuǎn)移 Z標(biāo)志 JZ/JNZ Jump on Zero; Jump on Equal C標(biāo)志 JC/JNC P標(biāo)志 JP(JPE)/JNP(JPO) Jump on Parity; Jump on Even ;Jump on Odd S標(biāo)志 JS/JNS O標(biāo)志 JO/JNO 2)根據(jù)兩

40、個(gè)無(wú)符號(hào)數(shù)大小關(guān)系轉(zhuǎn)移 JB、JNAE;JNB、JAE JBE、JNA;JNBE、JA JB:Jump on Below; JAE:Jump on Above or Equal JZ(或JE)/JNZ(或JNE) 3)根據(jù)兩個(gè)帶符號(hào)數(shù)比較結(jié)果轉(zhuǎn)移 JL(JNGE)/JNL(JGE); JLE(JNG)/JNLE(JG) L Less;G Great; E Equal注意:所有條件轉(zhuǎn)移指令都是段內(nèi)(-128+127)范圍內(nèi)轉(zhuǎn)移。標(biāo)志轉(zhuǎn)移指令舉例計(jì)算 X-Y的絕對(duì)值 ,X和Y為16位操作數(shù),結(jié)果存入result MOV AX,X; SUB AX,Y; JNS NO_NEG;/(X-Y)如為正數(shù),不求絕對(duì)值 NEG AX ; /求絕對(duì)值 NO_NEG:MOV result, AX;/保存結(jié)果根據(jù)無(wú)符號(hào)數(shù)大小關(guān)系轉(zhuǎn)移舉例AX和BX為無(wú)符號(hào)數(shù),比較大小,將較大的數(shù)放入AX中。 CMP AX,BX ; JNB NEXT ;如AXBX,不處理 MOV AX,BX ; AXBX,BX送入AX中 NEXT:根據(jù)有符號(hào)數(shù)大小關(guān)系轉(zhuǎn)移舉例AX和BX為有符號(hào)數(shù),比較大小,將較大的數(shù)放入AX中。 CMP AX,BX ; JNL NEXT ;如

溫馨提示

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