




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、1,第三章 尋址方式與指令系統(tǒng),2,3.1 概述,3,了解:,指令及指令系統(tǒng); 指令的格式; 指令中的操作數(shù)類型; 指令字長與機器字長; 指令的執(zhí)行時間,4,一、指令與指令系統(tǒng),指令: 控制計算機完成某種操作的命令 指令系統(tǒng): 處理器所能識別的所有指令的集合 指令的兼容性: 同一系列機的指令都是兼容的。,5,二、指令格式,指令中應包含的信息:,運算數(shù)據(jù)的來源 運算結果的去向 執(zhí)行的操作,6,指令格式,標號: 操作碼 操作數(shù),操作數(shù);注釋,執(zhí)行何種操作,目標操作數(shù),源操作數(shù),參加操作的數(shù)據(jù)或數(shù)據(jù)存放的地址,符號地址,程序注釋,7,指令格式:,零操作數(shù)指令: 操作碼 單操作數(shù)指令: 操作碼 操作數(shù)
2、 雙操作數(shù)指令: 操作碼 操作數(shù),操作數(shù) 多操作數(shù)指令: 三操作數(shù)及以上,8,三、指令中的操作數(shù),立即數(shù) 寄存器 存儲器,表征參加操作的數(shù)據(jù)本身,表征數(shù)據(jù)存放的地址,9,立即數(shù)操作數(shù),立即數(shù)本身是參加操作的數(shù)據(jù),可以是8位或16位,只能作為源操作數(shù)。 例: MOV AX,1234H MOV BL,22H 立即數(shù)無法作為目標操作數(shù) 立即數(shù)可以是無符號或帶符號數(shù),其數(shù)值應在可取值范圍內(nèi)。,10,寄存器操作數(shù):,參加運算的數(shù)存放在指令給出的寄存器中,可以是16位或8位。 例: MOV AX,BX MOV DL,CH,11,存儲器操作數(shù),參加運算的數(shù)存放在存儲器的某一個或某兩個單元中。 表現(xiàn)形式: ,
3、立即數(shù)或寄存器, 中的內(nèi)容是存放所尋找數(shù)據(jù)的單元的偏移地址,12,存儲器操作數(shù)例,例: MOV AX,1200H MOV AL,1200H,22H,11H,1200H,偏移地址,AH AL,13,四、指令字長,指令字長: 由操作碼的長度、操作數(shù)地址長度、操作數(shù)個數(shù)決定。,14,五、指令的執(zhí)行速度,指令的字長影響指令的執(zhí)行速度 對不同的操作數(shù),指令執(zhí)行的時間不同: 存儲器,快!,立即數(shù),寄存器,15,3.2 尋址方式,16,尋址方式,尋找操作數(shù)所在地址的方法 尋找轉移地址的方法,本節(jié),17,尋址方式,操作數(shù)可能的來源或存放處: 由指令直接給出 寄存器 內(nèi)存單元 尋找操作數(shù)所在地址的方法可以有三種
4、大類型 指令直接給出的方式 存放于寄存器中的尋址方式 存放于存儲器中的尋址方式,18,一、立即尋址,指令中的源操作數(shù)是立即數(shù),即源操作數(shù)是參加操作的數(shù)據(jù)本身 例:MOV AX,1200H,12H,00H,AH AL,MOV,代碼段,立即尋址僅適合于源操作數(shù),19,二、寄存器尋址,參加操作的操作數(shù)在CPU的通用寄存器中。 例:MOV AX,BX,AX,BX,20,三、直接尋址,指令中直接給出操作數(shù)的偏移地址 默認在數(shù)據(jù)段 例:MOV AX,1200H,22H,11H,1200H,偏移地址,數(shù)據(jù)段,AH AL,21,直接尋址,直接尋址方式下,操作數(shù)的段地址默認為數(shù)據(jù)段,但允許段重設,即由指令定義段
5、。 例:MOV AX,ES:1200H,物理地址 =段地址X16+有效地址 =(DS) X16+EA,22,直接尋址 寄存器間接尋址 寄存器相對尋址 寄存器比例尋址 基址變址尋址 基址變址相對尋址,存儲器尋址,物理地址=段地址X16+有效地址(EA),存儲器尋址方式,23,四、寄存器間接尋址,參與操作的操作數(shù)存放在內(nèi)存中,其偏移地址為指令中的寄存器的內(nèi)容。,24,寄存器間接尋址例,例:MOV AX,BX 設BX=1200H,22H,11H,1200H,偏移地址,AH AL,11 22,數(shù)據(jù)段,代碼段,MOV,25,寄存器間接尋址,由寄存器間接給出操作數(shù)的偏移地址; 存放偏移地址的寄存器稱為間址
6、寄存器,它們是:BX,BP,SI,DI 操作數(shù)的段地址(數(shù)據(jù)處于哪個段)取決于選擇哪一個間址寄存器: BX,SI,DI BP,默認在數(shù)據(jù)段,默認在堆棧段,26,寄存器間接尋址,寄存器 間接尋址,基址尋址(間址寄存器為基址寄存 器BX,BP) 變址尋址(間址寄存器為變址寄存 器SI,DI),物理地址=(DS)X16+(SI/DI/BX)或(SS) X16+(BP),書寫時對間接尋址的寄存器加上中括號,如:BP,27,五、寄存器相對尋址,操作數(shù)的偏移地址為寄存器的內(nèi)容加上一個位移量 例: MOV AX,BX+DATA 設:DS=2000H,BX=0220H,DATA=05H 則:AX=20225H
7、,操作數(shù)物理地址 =(DS)X16+(SI/DI/BX)+8位或16位偏移量 或=(SS) X16+(BP)+ 8位或16位偏移量,28,六、基址、變址尋址,操作數(shù)的偏移地址為 一個基址寄存器的內(nèi)容 + 一個變址寄存器的內(nèi)容; 操作數(shù)的段地址由選擇的基址寄存器決定 基址寄存器為BX,默認在數(shù)據(jù)段 基址寄存器為BP,默認在堆棧段 基址變址尋址方式與相對尋址方式一樣,主要用于一維數(shù)組操作。,29,操作數(shù)物理地址 =(DS)X16+(BX)+(SI/DI) 或=(SS) X16+(BP)+(SI/DI),30,例:,執(zhí)行下列指令: MOV SI,1100H MOV BX,SI MOV AX,BX+S
8、I,22H,11H,2200H,偏移地址,AH AL,11 22,數(shù)據(jù)段,31,七、基址、變址、相對尋址,操作數(shù)的偏移地址為: 基址寄存器內(nèi)容+變址寄存器內(nèi)容+位移量 操作數(shù)的段地址由選擇的基址寄存器決定。 基址變址相對尋址方式主要用于二維表格操作。,操作數(shù)物理地址 =(DS)X16+(BX)+(SI/DI)+8位或16位偏移量 或=(SS) X16+(BP)+(SI/DI)+8位或16位偏移量,32,例:,執(zhí)行以下程序段: MOV DI,1100H MOV BP,DI MOV AL,BPDI5,22H,11H,2205H,偏移地址,AL,22,堆棧段,33,八、寄存器比例尋址,變址寄存器的內(nèi)
9、容乘上比例因子,再加上偏移量,稱為比例變址方式 變址寄存器的內(nèi)容乘上比例因子,再加上基址寄存器的內(nèi)容,稱為基址比例變址方式 變址寄存器的內(nèi)容乘上比例因子,再加上基址寄存器的內(nèi)容和位移量,稱為基址比例變址偏移方式。 例: MUL BL 指令執(zhí)行:ALBL,AX,34,九、隱含尋址,指令中隱含了一個或兩個操作數(shù)的地址,即操作數(shù)在默認的地址中。 例: MUL BL 指令執(zhí)行: ALBL,AX,35,3.2 8086指令系統(tǒng),36,掌握:,指令碼的含義 指令對操作數(shù)的要求 指令的對標志位的影響 指令的功能,37,8086指令系統(tǒng),從功能上包括六大類:,數(shù)據(jù)傳送 算術運算 邏輯運算和移位 串操作 程序控
10、制 處理器控制,38,八位寄存器: AH,AL,BH,H,BL,CH,CL,DH,DL 十六位通用寄存器: AX,BX,CX,DX,SP,BP,SI,DI 堆棧指針 SP 指令指針 IP(或PC) 標志位Flags 目的和源變址寄存器DI, SI 段寄存器CS, DS, ES, SS 通用寄存器r AL或AX(取決于操作數(shù)長度) acc,介紹指令系統(tǒng)使用的符號:,39,src , dest源,目的操作數(shù)(下列尋址方式都可以用) BX+SI+n,BX+DI+n,BP+SI+n,BP+DI+n SI+n,DI+n, BP+n, BX+n N,r 存儲器單元的內(nèi)容(正常在數(shù)據(jù)段) ES: 附加存儲器
11、段的內(nèi)容 OPRD 操作數(shù) Seg 段寄存器(CS,DS,ES,SS) i m 立即數(shù) (n 8位, nn 16位, nnnn 32位 ),40,8086/8088指令助記符表 (自學),41,8086/8088指令助記符表(續(xù)),42,數(shù)據(jù)傳送指令,通用數(shù)據(jù)傳送 輸入輸出 地址傳送 標志位操作,43,一、通用數(shù)據(jù)傳送,一般數(shù)據(jù)傳送指令 堆棧操作指令 交換指令 查表轉換指令 字位擴展指令,特點: 該類指令的執(zhí)行對標志位不產(chǎn)生影響,44,1. 一般數(shù)據(jù)傳送指令,一般數(shù)據(jù)傳送指令 MOV 格式: MOV dest,src 操作: src 例: MOV AL,BL,dest,45,一般數(shù)據(jù)傳送指令,
12、注意點: 兩操作數(shù)字長必須相同; 兩操作數(shù)不允許同時為存儲器操作數(shù); 兩操作數(shù)不允許同時為段寄存器; 在源操作數(shù)是立即數(shù)時,目標操作數(shù)不能是段寄存器; IP和CS不作為目標操作數(shù),F(xiàn)LAGS一般也不作為操作數(shù)在指令中出現(xiàn)。,46,一般數(shù)據(jù)傳送指令例,判斷下列指令的正確性: MOV AL,BX MOV AX,SI+05H MOV BXBP,BX MOV DS,1000H MOV DX,09H MOV 1200,SI,位數(shù)不一致 正確 BX/BP不能配對 立即數(shù)不能直接傳送給段寄存器 位數(shù)不一致 不能同為存儲器,47,一般數(shù)據(jù)傳送指令應用例,將(*)的ASCII碼2AH送入內(nèi)存數(shù)據(jù)段1000H開始
13、的100個單元中。 題目分析: 確定首地址 確定數(shù)據(jù)長度 寫一次數(shù)據(jù) 修改單元地址 修改長度值 判斷寫完否? 未完繼續(xù)寫入,否則結束,1063H,100B,1000H,2AH,數(shù)據(jù)段,2AH,2AH,2AH,48,一般數(shù)據(jù)傳送指令應用例,程序段: MOV DI,1000H MOV CX,64H MOV AL,2AH AGAIN:MOV DI,AL INC DI ;DI+1 DEC CX ;CX-1 JNZ AGAIN ;CX0則繼續(xù) HLT,49,2. 堆棧操作指令,掌握: 有關堆棧的概念 棧頂、棧首、棧底 堆棧指令的操作原理 執(zhí)行過程,執(zhí)行結果,50,堆棧操作的原則,先進后出 以字為單位,5
14、1,堆棧操作指令,壓棧指令 PUSH 格式: PUSH OPRD 出棧指令 POP 格式: POP OPRD,16位寄存器或 存儲器兩單元,16位寄存器或 存儲器兩單元,52,壓棧指令 PUSH,指令執(zhí)行過程: SP - 2 SP 操作數(shù)高字節(jié) SP+1 操作數(shù)低字節(jié) SP,SP,堆棧段,SP,高8位,低8位,53,壓棧指令的操作,設AX=1234H,SP=1200H 執(zhí)行 PUSH AX 指令后堆棧區(qū)的狀態(tài):,1200H,堆棧段,SP-2=11FEH,12H,34H,1200H,堆棧段,12H 34H,AX,入棧后,入棧前,54,出棧指令POP,指令執(zhí)行過程: SP SP+1 SP SP+2
15、,操作數(shù)低字節(jié),操作數(shù)高字節(jié),SP,堆棧段,SP,高8位,低8位,55,出棧指令的操作,執(zhí)行 POP AX,12H,34H,11FEH,堆棧段,代碼段,PUSH,12 34,AX,SP+2,1200H,出棧后,出棧前,56,堆棧操作指令說明,指令的操作數(shù)必須是16位的; 操作數(shù)可以是寄存器或存儲器兩單元,但不能是立即數(shù); 不能從棧頂彈出一個字給CS; PUSH和POP指令在程序中一般成對出現(xiàn); PUSH指令的操作方向是從高地址向低地址,而POP指令的操作正好相反。,57,堆棧操作指令例,MOV AX,1234H MOV SP,AX MOV BX,5678H MOV BX,AH MOV BX+1
16、,BL PUSH AX PUSH BX PUSH WORD PTRBX POP WORD PTRBX POP AX POP BX,如此,會使AX和BX的內(nèi)容互換,58,3. 交換指令,格式: XCHG REG,MEM/REG 注: 兩操作數(shù)必須有一個是寄存器操作數(shù) 不允許使用段寄存器。 例: XCHGAX,BX XCHG2000,CL,59,4. 換碼指令(查表指令),格式: XLAT 說明: 用BX的內(nèi)容代表表格首地址,AL內(nèi)容為表內(nèi)位移量,BX+AL得到要查找元素的偏移地址 操作: 將BX+AL所指單元的內(nèi)容送AL,60,查表指令例,數(shù)據(jù)段中存放有一 張ASCII碼轉換表, 設首地址為20
17、00H, 現(xiàn)欲查出表中第11 個代碼的ASCII碼,30,31,32,.,39,41,42,.,45,46,2000H+0,2000H+11,0,1,2,9,A,B,E,F,61,查表指令例,可用如下指令實現(xiàn): MOV BX,2000H ;BX表首地址 MOV AL,0BH ;AL序號 XLAT ;查表轉換 執(zhí)行后:AL = 42H 還可用其他方法實現(xiàn),如: MOV BX,2000H MOV AL,BX+0BH,62,二、輸入輸出指令,掌握: 指令的格式及操作 指令的兩種尋址方式 指令對操作數(shù)的要求,63,輸入輸出指令,專門面向I/O端口操作的指令 指令格式: 輸入指令: IN acc,POR
18、T 輸出指令 :OUT PORT,acc,端口地址,64,指令尋址方式,根據(jù)端口地址碼的長度,指令具有兩種不同的端口地址表現(xiàn)形式。 直接尋址 端口地址為8位時,指令中直接給出8位端口地址; 尋址256個端口。 間接尋址 端口地址為16位時,指令中的端口地址必須由DX指定; 可尋址64K個端口。,65,I/O指令例,IN AX,80H MOV DX,2400H IN AL,DX OUT 35H ,AX OUT AX,35H,66,三、地址傳送指令,取偏移地址指令LEA 地址指針傳送指令 *指針送寄存器和DS指令LDS *指針送寄存器和ES指令LES,67,取偏移地址指令LEA,操作: 將變量的1
19、6位偏移地址取出送目標寄存器 當程序中用符號地址表示內(nèi)存偏移地址時,須使用該指令。 格式: LEA REG,MEM 指令要求: 源操作數(shù)必須是一個存儲器操作數(shù),目標操作數(shù)通常是間址寄存器。,符號地址,68,LEA指令,比較下列指令: MOV SI,DATA1 LEA SI,DATA1 MOV BX,BX LEA BX,BX,DATA1,符號地址,12H,34H,1100H,88H,77H,BX=1100H,執(zhí)行結果:SI=1234H,執(zhí)行結果:SI=DATA1,執(zhí)行結果:BX=7788H,執(zhí)行結果:BX=1100H,69,LEA指令在程序中的應用,將數(shù)據(jù)段中首地址為MEM1 的50個字節(jié)的數(shù)據(jù)
20、傳送到同一邏輯段首地址為MEM2的區(qū)域存放。編寫相應的程序段 。,70,LEA指令在程序中的應用,開 始,取源地址,取目標地址,送數(shù)據(jù)塊長度到CL,傳送一個字節(jié),修改地址指針,修改計數(shù)值,計數(shù)值=0?,結 束,N,Y,71,LEA指令在程序中的應用,LEA SI,MEM1 LEA DI,MEM2 MOV CL,50 NEXT: MOV AL,SI MOV DI,AL INC SI INC DI DEC CL JNZ NEXT HLT,72,地址指針傳送指令,*指針送寄存器和DS指令LDS *指針送寄存器和ES指令LES,作用:將源操作數(shù)指定的連續(xù)4個存儲器單元中存放的32位地址指針(包括段地址
21、和偏移地址)送2個16位寄存器。 格式: LDS(LES) DEST,SRC DEST:寄存器 SRC:必須使用存儲器尋址,73,地址指針傳送指令應用實例,*偏移地址通用寄存器 *段地址段寄存器DS或ES,PONET DD 55663344H LDS BX, POINT LES BX, POINT,74,例: 假設: (DS)=B 000H (BX)=080AH 指令:LES DI, BX 執(zhí)行指令后: (DI)=05A2H (ES)=4000H,75,綜合舉例: 設: (DS)=5000H TABLE=1000H 分析下列指令執(zhí)行結果: MOV BX,TABLE ;(BX)=0040H MO
22、V BX,OFFSET TABLE ;(BX)=1000H LEA BX,TABLE ;(BX)=1000H LES BX,TABLE ;(BX)=0040H,(ES)=3000H LDS BX,TABLE ;(BX)=0040H,(DS)=3000H,76,四、標志位操作指令,LAHF SAHF PUSHF POPF,隱含操作數(shù)AH,隱含操作數(shù)FLAGS,77,1. LAHF,SAHF,LAHF 操作: 將FLAGS的低8位裝入AH,SF,PF,AF,ZF,CF,.,AH,FLAGS,D15,D0,D7,D0,SAHF,執(zhí)行與LAHF相反的操作,78,2. PUSHF,POPF,針對FLAG
23、S的堆棧操作指令 將標志寄存器壓?;驈亩褩棾?79,算術運算類指令,80,算術運算類指令,加法運算指令 減法運算指令 乘法指令 除法指令,算術運算指令的執(zhí)行大多對狀態(tài)標志位會產(chǎn)生影響,81,一、加法指令,普通加法指令ADD 帶進位位的加法指令ADC 加1指令INC,加法指令對操作數(shù)的要求與MOV指令相同,82,1. ADD指令,格式: ADD OPRD1,OPRD2 操作: OPRD1+OPRD2,ADD指令的執(zhí)行對全部6個狀態(tài)標志位都產(chǎn)生影響,OPRD1,OPRD1:寄存器,存儲器 OPRD2:立即數(shù),寄存器,存儲器,83,ADD指令例,MOV AL,78H ADD AL,99H 指令執(zhí)行
24、后6個狀態(tài)標志位的狀態(tài),OPRD1:寄存器,存儲器 OPRD2:立即數(shù),寄存器,存儲器,84,特點: 可以進行8位、16位的無符號數(shù)和帶符號數(shù)的加法運算; 源操作數(shù)和目標操作數(shù)不能同時為存儲器, 不能為段寄存器; 指令影響標志位的情況: OF=1, 8位帶符號數(shù)相加,和超出范圍(128127), 16位帶符號數(shù)相加,和超出范圍(-32768+32767); CF=1, 8位無符號數(shù)相加,和超過255, 16位無符號數(shù)相加,和超過65535。 其他條件標志(SF,AF,PF,ZF)根據(jù)定義設定。,85,ADD指令例,01111000 + 10011001 00010001,1,標志位狀態(tài): CF
25、= SF= AF= ZF= PF= OF=,1,0,1,0,1,0,86,2. ADC指令,指令格式、對操作數(shù)的要求、對標志位的影響與ADD指令完全一樣 指令的操作: OPRD1+OPRD2+CF OPRD1 ADC指令多用于多字節(jié)數(shù)相加,使用前要先將CF清零。,87,ADC指令應用例求兩個20B數(shù)的和,LEA SI,M1 LEA DI,M2 MOV CX,20 CLC ;使CF=0 NEXT : MOV AL,SI ADC DI,AL INC SI INC DI DEC CX JNZ NEXT HLT,88,3. INC指令,格式: INC OPRD 操作: OPRD+1 OPRD,常用于在
26、程序中修改地址指針,不能是段寄存器或立即數(shù),89,二、減法指令,普通減法指令SUB 考慮借位的減法指令SBB 減1指令DEC 比較指令CMP 求補指令NEG,減法指令對操作數(shù)的要求與對應的加法指令相同,90,1. SUB指令,格式: SUB OPRD1,OPRD2 操作: OPRD1- OPRD2 OPRD1 對標志位的影響與ADD指令同,91,2. SBB指令,指令格式、對操作數(shù)的要求、對標志位的影響與SUB指令完全一樣 指令的操作: OPRD1- OPRD2- CF OPRD1,92,3. DEC指令,格式: DEC OPRD 操作: OPRD - 1 OPRD,指令對操作數(shù)的要求與INC
27、相同 指令常用于在程序中修改計數(shù)值,93,4. NEG指令(求補),格式: NEG OPRD 操作:把操作數(shù)按位求反后末位+1 0 - OPRD OPRD,8/16位寄存器或存儲器操作數(shù),用0減去操作數(shù),相當于對該操作數(shù)求補碼,94,應用舉例:求絕對值 在內(nèi)存中, 從AREA1開始存放100個帶符號數(shù)。 將各數(shù)的絕對值存于AREA2的開始單元。,流程圖,95,程序: LEA SI, AREA1 LEA DI, AREA2 MOV CX, 100 CHECK: MOV AL, SI OR AL, AL ;(AL)內(nèi)容不變,置標志 JNS NEXT ;SF=0轉NEXT NEG AL ;負數(shù)求補
28、NEXT: MOV DI, AL ;送目標 INC SI INC DI DEC CX JNZ CHECK HLT,96,5. CMP指令,格式: CMP OPRD1,OPRD2 操作: OPRD1- OPRD2 指令執(zhí)行的結果不影響目標操作數(shù),僅影響標志位!,97,CMP指令,用途: 用于比較兩個數(shù)的大小,可作為條件轉移指令轉移的條件 指令對操作數(shù)的要求及對標志位的影響與SUB指令相同 (1)根據(jù)Z標志,判斷兩者是否相等; (2)根據(jù)CF標志, 判斷兩個無符號數(shù)的大??; (3)用S、O標志,判斷二個帶符號數(shù)的大小。,98,CMP指令,兩個無符號數(shù)的比較: CMP AX,BX 若 AX BX 若
29、 AX BX,CF=0,CF=1,99,CMP指令,兩個帶符號數(shù)的比較 CMP AX,BX 兩個數(shù)的大小由OF和SF共同決定 OF和SF狀態(tài)相同 AX BX OF和SF狀態(tài)不同 AX BX,100,CMP指令例,LEA BX,MAX LEA SI,BUF MOV CL,20 MOV AL,SI NEXT:INC SI CMP AL,SI JNC GOON ;CF=0轉移 XCHG SI,AL,GOON:DEC CL JNZ NEXT MOV BX,AL HLT,101,程序功能,MAX,BUF,XXH,XXH,XXH,在20個數(shù)中找最大的數(shù),并將其存放在MAX單元中。,102,三、乘法指令,無
30、符號的乘法指令MUL *帶符號的乘法指令IMUL,注意點: 乘法指令采用隱含尋址,隱含的是存放被乘數(shù)的累加器AL或AX及存放結果的AX,DX.,103,1. 無符號數(shù)乘法指令,格式: MUL OPRD 不能是立即數(shù) 操作: OPRD為字節(jié)數(shù) OPRD為16位數(shù),ALOPRD,AXOPRD,DXAX,AX,104,無符號數(shù)乘法指令例,MUL BYTE PTRBX,BX,XXH,AL XXH,AX,105,四、除法指令,無符號除法指令 格式: DIV SRC,106,除法指令的操作,若OPRD是字節(jié)數(shù) 執(zhí)行:AX/OPRD 結果: AL=商 AH=余數(shù) 若OPRD是雙字節(jié)數(shù) 執(zhí)行: DXAX/OP
31、RD 結果: AX=商 DX=余數(shù),指令要求被除數(shù)是除數(shù)的雙倍字長,107,108,有符號除法指令 格式: IDIV SRC,109,四. 字位擴展指令,將符號數(shù)的符號位擴展到高位; 指令為零操作數(shù)指令,采用隱含尋址,隱含的操作數(shù)為AX及AX,DX 無符號數(shù)的擴展規(guī)則為在高位補0,110,字節(jié)到字的擴展指令,格式: CBW 操作: 將AL內(nèi)容擴展到AX 規(guī)則: 若最高位=1,則執(zhí)行后AH=FFH 若最高位=0,則執(zhí)行后AH=00H,111,字到雙字的擴展指令,格式: CWD 操作: 將AX內(nèi)容擴展到DX AX 規(guī)則: 若最高位=1,則執(zhí)行后DX=FFFFH 若最高位=0,則執(zhí)行后DX=0000
32、H,112,字位擴展指令例,判斷以下指令執(zhí)行結果: MOV AL,44H CBW MOV AX,0AFDEH CWD MOV AL,86H CBW,113,五、BCD碼調(diào)整指令,將指令執(zhí)行的二進制運算結果調(diào)整為壓縮BCD碼或擴展BCD碼表示的十進制數(shù)。 共6條,均為隱含尋址方式,隱含的操作數(shù)是 AL或AL、AH; 不能單獨使用,要緊跟在相應的算術運算指令 之后;,在用BCD碼進行十進制數(shù)加、減、乘運算時,應分兩步進行: (1)先按二進制數(shù)運算規(guī)則進行運算,得到中間結果。 (2)用十進制調(diào)整指令對中間結果進行修正,得到運算結果的BCD碼。 注意: BCD碼的運算只能在8位累加器AL中進行; 十進
33、制數(shù)的乘、除運算只能用非壓縮的BCD格式; 除法運算時,應先調(diào)整,后運算。,五、BCD碼調(diào)整指令,(1)壓縮型BCD碼調(diào)整指令 格式:DAA;加法調(diào)整 DAS;減法調(diào)整 說明:將加法(ADD或ADC)或減法(SUB或SBB)運算的結果(在AL寄存器中)調(diào)整為壓縮BCD碼。注意,參與運算的應是壓縮BCD碼。 壓縮BCD碼的加法調(diào)整指令,半字節(jié)1位BCD相加,超過9或有進位,要加6調(diào)整,低半字節(jié)調(diào)整后有進位,高半字節(jié)再調(diào)整。表示為: 若 AL&0FH9 或 AF=1,(即AL中的低4位大于9) 則 AL+6AL,1 AF 若 AL&0F0H90H 或 CF=1, 則 AL+60HAL,1CF,11
34、6,壓縮BCD碼的減法調(diào)整指令,半字節(jié)1位BCD相減,有借位,要減6調(diào)整。表示為: 若 AL&0FH9 或 AF=1,則 AL-6AL, 1 AF 若 AL9FH 或 CF=1, 則 AL-60HAL, 1 CF,例 48+29=77 (用壓縮的BCD碼實現(xiàn)加法運算) MOV AL,48H;AL 48的壓縮BCD碼 ADD AL,29H;AL 48H+29H = 71H DAA;調(diào)整,AL= 77H即77的壓縮BCD碼,118,(2)非壓縮型BCD碼調(diào)整指令 1)加減法調(diào)整 格式:AAA;加法調(diào)整 AAS;減法調(diào)整 說明:將加法(ADD或ADC)或減法(SUB或SBB)運算的結果(在AL寄存器
35、中)調(diào)整為非壓縮BCD碼。調(diào)整后的AL寄存器中高4位被清0,如有進位或借位,則在AH中。,2)乘法調(diào)整 格式:AAM 說明:把AL中的數(shù)值調(diào)整為非壓縮BCD碼,并存入AX中。 在用此指令進行調(diào)整之前應先執(zhí)行無符號數(shù)的乘法指令,相乘的兩個數(shù)必須是非壓縮BCD碼,即BCD碼在低4位中,相乘的結果在AL中(兩個乘數(shù)均小于10,它們的乘積小于100)。執(zhí)行調(diào)整指令AAM時,將AL內(nèi)容除以10,將商放在AH中作為結果的十位數(shù)(BCD碼),余數(shù)放在AL中,作為結果的個位數(shù)(BCD碼)。,120,3)除法調(diào)整 格式:AAD 操作:AL AH10 + AL,AH 0 說明:將AH寄存器的內(nèi)容乘以10并加上AL
36、寄存器的內(nèi)容,結果送回AL,同時將AH清0。其操作實質(zhì)是將AX寄存器中的非壓縮BCD碼轉換成二進制數(shù),存放在AL中。 注意:該指令與其他調(diào)整指令對加、減、乘法調(diào)整在運算后進行,而除法調(diào)整應在除法運算之前。除法所得的商還需用AAM指令進行調(diào)整方可得到正確的非壓縮BCD碼的結果。,121,邏輯運算和移位指令,122,指令類型,邏輯運算 與,或,非,異或 移位操作 非循環(huán)移位,循環(huán)移位,123,一、邏輯運算,邏輯運算指令對 操作數(shù)的 要求大多與MOV指令 相同。 “非”運算指令 要求操作數(shù) 不能是立即數(shù); 除“非”運算指令 外,其余指令的執(zhí)行都會使標志位OF=CF=0,124,1.“與”指令:,格式
37、: AND OPRD1,OPRD2 操作: 兩操作數(shù)相“與”,結果送目標地址。,125,“與”指令的應用,實現(xiàn)兩操作數(shù) 按位相與的 運算 AND BL,SI 使目標操作數(shù)的 某些位不變,某些位清零 AND AL,0FH 在操作數(shù) 不變的 情況下使CF和OF清零 AND AX,AX,126,“與”指令應用例,從地址為3F8H 端口中讀入一個字節(jié)數(shù),如果該數(shù) bit1位為1,則可從38FH端口將DATA為首地址的 一個字輸出,否則就不能進行數(shù) 據(jù)傳送。 編寫相應的 程序段。,127,“與”指令應用例,開 始,取待輸出數(shù)的偏移地址,讀入狀態(tài)字,測試bit1位狀態(tài),Bit1=1?,取輸入口地址,取輸出
38、口地址,輸出一個字,N,Y,128,“與”指令應用例,LEA SI,DATA MOV DX,3F8H WATT:IN AL,DX AND AL,02H JZ WATT ;ZF=1轉移 MOV DX,38FH MOV AX,SI OUT DX,AX,129,2.“或”運算指令,格式: OR OPRD1,OPRD2 操作: 兩操作數(shù)相“或”,結果送目標地址,130,“或”指令的應用,實現(xiàn)兩操作數(shù) 相 “或”的 運算 OR AX,DI 使某些位不變,某些位置“1” OR CL,0FH 在不改變操作數(shù)的 情況下使OF=CF=0 OR AX,AX,131,“或”指令的應用例,OR AL,AL JPE G
39、OON OR AL,80H GOON:.,PF=1轉移,132,3.“非”運算指令,格式: NOT OPRD 操作: 操作數(shù)按位取反再送回原地址 注: 指令中的操作數(shù)不能是立即數(shù) 指令的執(zhí)行對標志位無影響 例:NOT BYTE PTRBX,133,4.“異或”運算指令,格式: XOR OPRD1,OPRD2 操作: 兩操作數(shù)相“異或”,結果送目標地址 即“相同為0,不同為1” 例: XOR BL,80H XOR AX,AX,134,5.“測試”指令,格式: TEST OPRD1,OPRD2 操作: 執(zhí)行“與”運算,但運算的結果不送回目標地址。 應用: 常用于測試某些位的狀態(tài),135,例:,從地
40、址為3F8H的 端口中讀入一個字節(jié)數(shù),當該數(shù)的 bit1, bit3, bit5位同時為1時,可從38FH端口將DATA為首地址的一個字輸出,否則就不能進行數(shù) 據(jù)傳送。 編寫相應的 程序段。,136,源程序代碼:,LEA SI,DATA MOV DX,3F8H WATT:IN AL,DX MOV DX,38FH MOV AX,SI OUT DX,AX,AND AL,2AH CMP AL,2AH JNZ WATT,TEST AL,02H JZ WATT ;ZF=1轉移 TEST AL,08H JZ WATT TEST AL,20H JZ WATT,AND AL,2AH XOR AL,2AH JN
41、Z WATT,137,(1)AND指令用來對指令的指定位清“0”。 (2)OR指令常用來對某些位置1。 (3)XOR指令用在程序開頭,使某個寄存器清“0”。 (4)NOT指令對某個數(shù)據(jù)取反,+1成補碼。 (5)TEST指令用來檢測指定位為1,還是0。,邏輯指令應用小結:,138,二、移位指令,非循環(huán)移位指令 循環(huán)移位指令,注: 移動一位時由指令直接給出; 移動兩位及以上,則移位次數(shù)由CL指定。,139,1. 非循環(huán)移位指令,邏輯左移 算術左移 邏輯右移 算術右移,140,算術左移和邏輯左移,算術左移指 令: SAL OPRD,1 SAL OPRD,CL 邏輯左移指 令: SHL OPRD,1
42、SHL OPRD,CL,有符號數(shù),無符號數(shù),141,邏輯右移,格式: SHR OPRD,1 SHR OPRD,CL,0,CF,無符號數(shù)的右移,142,邏輯右移例:,MOV AL,68H MOV CL,2 SHR AL,CL,0,CF,0 1 1 0 1 0,AL,0,0,0,0 0 1 1 0 1 0 0,AL,CF,0,0,0 0 0 1 1 0 1 0,AL,CF,0,0,移動1次,移動2次,143,算術右移,格式: SAR OPRD,1 SAR OPRD,CL,有符號數(shù)的右移,CF,144,非循環(huán)移位指令的應用,左移可實現(xiàn)乘法運算 右移可實現(xiàn)除法運算,145,2. 循環(huán)移位指令,不帶進位
43、位的循環(huán)移位 帶進位位的循環(huán)移位,左移 ROL 右移 ROR,左移 RCL 右移 RCR,指令格式、對操作數(shù)的要求與非循環(huán)移位指令相同,146,不帶進位位的循環(huán)移位,CF,CF,147,帶進位位的循環(huán)移位,CF,CF,148,循環(huán)移位指令的應用,用于對某些位狀態(tài)的測試; 高位部分和低位部分的交換; 與非循環(huán)移位指令一起組成32位或更長字長數(shù)的移位。,149,循環(huán)移位指令小結,150,串操作指令,151,串操作指令說明,針對數(shù)據(jù)塊或字符串的操作; 可實現(xiàn)存儲器到存儲器的數(shù)據(jù)傳送; 待操作的數(shù)據(jù)串稱為源串,目標地址稱為目標串。,152,串操作指令的特點,源串一般存放在數(shù)據(jù)段DS,偏移地址由SI指定
44、。允許段重設; 目標串必須在附加段ES,偏移地址由DI指定; 指令自動修改地址指針,修改方向由DF決定。 DF=0 DF=1 數(shù)據(jù)塊長度值由CX指定 可增加自動重復前綴以實現(xiàn)自動修改CX內(nèi)容。,增地址方向;,減地址方向;,153,串操作指令的特點,154,串操作指令流程(以傳送操作為例),取源串地址,取目標串地址,設串長度,傳送一個字節(jié)或字,修改地址指針,修改串長度值,傳送完否?,N,Y,設操作方向,155,重復前綴,無條件重復 REP 條件重復 REPE 相等重復 REPZ 為零重復 REPNE 不相等重復 REPNZ 不為零重復,CX0或ZF=1 重復,CX0或ZF=0 重復,CX0 重復
45、,156,串操作指令,串傳送 MOVS 串比較 CMPS 串掃描 SCAS 串裝入 LODS 串送存 STOS,157,1. 串傳送指令,格式: MOVS OPRD1,OPRD2 MOVSB (SI)(SI)1,(DI)(DI) 1 MOVSW (SI)(SI)2,(DI)(DI)2 串傳送指令常與無條件重復前綴連用,當方向標志 CLD , DF=0時 用“+” STD , DF=1時 用“-”,158,串傳送指令,對比用MOV指令和MOVS指令實現(xiàn)將200個字節(jié)數(shù)據(jù)從內(nèi)存的一個區(qū)域送到另一個區(qū)域的程序段。,159,串傳送指令例,用串傳送指令實現(xiàn)200個字節(jié)數(shù)據(jù)的傳送: LEA SI,MEM1
46、 LEA DI,MEM2 MOV CX,200 CLD REP MOVSB HLT,160,2. 串比較指令,格式: CMPS OPRD1,OPRD2 CMPSB CMPSW 串比較指令常與條件重復前綴連用,指令的執(zhí) 行不改變操作數(shù),僅影響標志位。 前綴的操作對標志位不影響,161,執(zhí)行操作: (ES) :(DI) -(DS):(SI),結果不存,置標志。 字節(jié)操作:(SI) (SI)1,(DI)(DI) 1 字操作:(SI) (SI)2,(DI) (DI)2 注意: 兩數(shù)相減,只影響標志,不影響操作數(shù)。 其它操作規(guī)定與MOVS同。,162,例:利用CMPS指令對STRING1和STRING2
47、二個字符串進行 比較,相同在RESULT 單元送00H,不同送0FFH。 MOV SI,OFFSET STRING1 MOV DI,OFFSET STRING2 MOV CX,COUNT CLD REPZ CMPSB JNZ UNMAT ;若串不同,在RESUL單元中置0FFH MOV AL,0 ;若串相等,在RESULT單元中置00H JMP OULPT UNMAT:MOV AL,0FFH OUTPT: MOV RESULT,AL HLT,串比較指令例,163,3. 串掃描指令,格式: SCAS OPRD SCASB SCASW 執(zhí)行與CMPS指令相似的操作,只是這里的源 操作數(shù)是AX或AL
48、,目 標 操作數(shù),164,串掃描指令的應用,常用于在指定存儲區(qū)域中尋找某個關鍵字。,例:要搜索的關鍵字 放在(AL)或(AX)中,搜索某一數(shù)據(jù)塊或字符串中有無關 鍵字,若有,把搜索次數(shù)記下來,且記錄關鍵字地址;若次數(shù)為0,表示沒有要搜索的關鍵字。,165,MOV DI,0FFSET BLOCK;設置數(shù)據(jù)塊地址指針 MOV CX,COUNT ;設置數(shù)據(jù)塊長度 MOV AL,CHAR ; 關鍵字送入AL或AX REP NE SCASB ;(CX)0,ZF=0 繼續(xù)SCASB JZ FOUND ; ZF=1 轉FOUND MOV DI,0 JMP DONE FOUND:DEC DI MOV POIN
49、TR,DI MOV BX,OFFSET BLOCK SUB BX,DI MOV DI,BX ;把搜索次數(shù)記下來,且記錄關鍵字地址 DONE: HLT,串掃描指令的應用,166,4、串裝入指令,格式: LODS OPRD LODSB LODSW 操作: 對字節(jié): 對 字:,源操作數(shù),DS:SI,DS:SI,AL,AX,167,4. 串裝入指令,用于將內(nèi)存某個區(qū)域的數(shù)據(jù)串依次裝入累加 器,以便顯示或輸出到接口。 LODS指令一般不加重復前綴。,168,5. 串存儲指令,格式: STOS OPRD STOSB STOSW 操作: 對字節(jié): AL 對 字: AX,目 標 操作數(shù),ES:DI,ES:DI
50、,169,串存儲指令的應用,常用于將內(nèi)存某個區(qū)域置同樣的值 此時: 將待送存的數(shù)據(jù)放入AL(字節(jié)數(shù))或AX(字數(shù)據(jù)); 確定操作方向(增地址/減地址)和區(qū)域大?。ùL度值); 使用串存儲指令+無條件重復前綴,實現(xiàn)數(shù)據(jù)傳送。,170,串存儲指令例 內(nèi)存某個區(qū)域清零,將內(nèi)存某單元清零 設計思想:,區(qū)域首地址送ES:DI,串長度送CX,置方向標志DF,0送累加器AL,執(zhí)行串送存指令,171,例:在附加段STORE開始存5個空格 程序: MOV AL,20H ;_ (AL) MOV CX,5 MOV DI,offset STORE CLD REP STOSB ;(ES):(DI) (AL) (DI)
51、(DI)+1,172,小結:串操作指令重復前綴,操作數(shù),地址指針,173,程序控制指令,轉移指令 循環(huán)控制 過程調(diào)用 中斷控制,174,程序的執(zhí)行方向,程序控制類指令的本質(zhì)是: 控制程序的執(zhí)行方向 決定程序執(zhí)行方向的因素: CS,IP 控制程序執(zhí)行方向的方法: 修改CS 和IP ,則程序轉向另一個代碼段執(zhí)行; 僅修改IP,則程序將改變當前的執(zhí)行順序,轉向本代碼段內(nèi)其它某處執(zhí)行。,175,一、轉移指令,無條件轉移指令 無條件轉移到目標地址,執(zhí)行新的指令 有條件轉移指令 在具備一定條件的情況下轉移到目標地址,通過修改指令的偏移地址或段地址及偏移地址 實現(xiàn)程序的轉移,176,1. 無條件轉移指令,格
52、式: JMP OPRD,目標地址,與JMP在同一代碼段,與JMP不在同一代碼段,原則上可實現(xiàn)在整個內(nèi)存空間的轉移,177,無條件段內(nèi)轉移,轉移的目標地址在當前代碼段內(nèi),段地址不 改變。 即:目標地址是16位偏移地址。,指令中直接給出目標地址,由指令中的寄存器或存儲器操作數(shù)指出目標地址,段內(nèi)直接轉移,段內(nèi)間接轉移,178,段內(nèi)直接轉移,轉移的目標地址由指令直接給出 格式: JMP Label,近地址標號,段內(nèi)直接短轉移:偏移量為8位,在符號地址前加SHORT 段內(nèi)直接近轉移:偏移量為16位,在符號地址前加NEAR PTR,179,段內(nèi)直接轉移示圖,JMP,Label,代碼段,位移量,下一條要執(zhí)行
53、指令的偏移地址=當前IP+位移量,JMP Label,180,段內(nèi)間接轉移,段內(nèi)間接轉移 轉移的目標地址存放在某個16位寄存器或存儲器 的某兩個單元中 例: JMP BX 若:BX=1200H 則:轉移的目標地址=1200H,JMP,代碼段,1200H,MOV,181,段內(nèi)間接轉移例,JMP WORD PTRBX 設:BX=1200H,JMP,代碼段,數(shù)據(jù)段,BX=1200,XXH,XXH,IP,指令碼,182,無條件段間轉移,轉移的目標地址不在當前代碼段內(nèi)。 目標地址為32位,包括段地址和偏移地址。,指令中直接給出目標地址,由指令中的32位存儲器操作數(shù)指出目標地址,段間直接轉移,段間間接轉移
54、,183,段間直接轉移,段內(nèi)直接轉移 轉移的目標地址由指令直接給出 格式:(CS) 、 (IP)都改變 JMP FAR PTR Label,遠地址標號,執(zhí)行操作: (IP)Label所在的段內(nèi)偏移地址。 (CS)Label所在的段的段址。,184,段間直接轉移示圖,JMP,Label,代碼段1,Label與JMP之間的位移量,代碼段2,XXH,XXH,XXH,XXH,IP,CS,185,段間間接轉移,段內(nèi)間接尋址 轉移的目標地址由指令中的32位操作數(shù)給出 例: JMP DWORD PTRBX,XXH,XXH,XXH,XXH,BX,IP,CS,JMP,指令碼,代碼段1,代碼段2,數(shù)據(jù)段,186,
55、無條件轉移指令例,(1) 2000:0100 MOV AX,1200H (2) 2000:0103 JMP NEXT (3) 2000:0120 NEXT: MOV BX,1200H (4) JMP BX (5) 2000:1200,187,無條件轉移指令例,MOV SI,1122H MOV WORD PTRSI,0120H ADD SI,2 MOV WORD PTRSI,0122H,JMP DWORD PTRSI-2,JMP WORD PTRSI,IP,CS,IP,188,2. 條件轉移指令,在滿足一定條件下,程序轉移到目標地址繼續(xù)執(zhí)行 條件轉移指令均為段內(nèi)短轉移,即轉移 范圍為: -128
56、-+127,189,條件轉移指令的應用,幾種條件轉移指令的應用 JC/JNC 判斷CF的狀態(tài)。常用于比大小 JZ/JNZ 判斷ZF的狀態(tài)。常用于循環(huán)體的結束判斷 JO/JNO 判斷OF的狀態(tài)。常用于有符號數(shù)溢出的判斷 JP/JPE 判斷PF的狀態(tài)。用于判斷運算結果低8位中1的個數(shù)是否為偶數(shù) JA/JAE/JB/JBE 判斷CF或CF+ZF的狀態(tài)。常用于無符號數(shù)的大小比較,190,轉移指令例,統(tǒng)計內(nèi)存數(shù)據(jù)段中以TABLE為首地址的100個8位符號數(shù)中正數(shù)、負數(shù)和零元數(shù)的個數(shù)。,191,轉移指令例(流程圖),將存放各元素個數(shù)的單元清零,取首地址 設串長度,取一個字節(jié)數(shù),正數(shù)個數(shù)加1,零元素加1,為負?,為零?,負數(shù)個數(shù)加1,N,Y,N,Y,192,按轉移條件不同,條件轉移指令可以
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 遼寧省重點高中沈陽市郊聯(lián)體2024-2025學年高二下學期4月月考政治試題(原卷版+解析版)
- 二零二五資產(chǎn)抵押擔保合同
- 順德區(qū)前期物業(yè)服務合同
- 激波管實驗室的主要設備及特點,主要風險及安全注意事項
- 合伙分配協(xié)議
- 離婚后同居協(xié)議合同書范例
- 三方商鋪租賃合同書范例
- 二零二五加盟店合作合同書范例
- 來賓酒廠獨家經(jīng)銷商合作協(xié)議書
- DB37∕T 4169-2020 大櫻桃避雨防霜栽培技術規(guī)程
- 一、長方體和正方體表面涂色的
- 人教版英語七年級上冊《Unit7HowmucharethesesocksSectionB》教學設計
- 生產(chǎn)中斷影響及生產(chǎn)組織管理考核辦法
- 【圖文】GB8624-2012建筑材料及制品燃燒性能分級(精)
- 思普產(chǎn)品介紹ppt課件
- 企業(yè)部門單位工傷事故報告書
- 煤炭工業(yè)露天礦設計規(guī)范(WORD格式)
- 8251芯片(課堂PPT)
- 人教版中考英語高頻詞匯匯總
- DriveMonitor使用簡介
- 蘇州市優(yōu)質(zhì)結構評選辦法
評論
0/150
提交評論