北航微機(jī)原理課件_第三章_第1頁
北航微機(jī)原理課件_第三章_第2頁
北航微機(jī)原理課件_第三章_第3頁
北航微機(jī)原理課件_第三章_第4頁
北航微機(jī)原理課件_第三章_第5頁
已閱讀5頁,還剩60頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、第三章 8086的尋址方式和指令系統(tǒng) 3.1 8086的尋址方式尋址方式指令:操作碼操作數(shù)操作碼:指出操作的性質(zhì)操作數(shù):操作的對象指令分類(操作數(shù))指令分類(操作數(shù))單操作數(shù)、雙操作數(shù)和無操作數(shù)PUSH AX MOV AX, BX RET雙操作數(shù):源操作數(shù),目的操作數(shù)尋址方式操作數(shù)的存放寄存器存儲器或I/O端口地址立即數(shù)一個8位或者16位的常數(shù)操作數(shù)的存取效率寄存器:CPU立即數(shù):指令隊(duì)列存儲器根據(jù)偏移地址計(jì)算20位物理地址 偏移地址:有效地址(EA)尋址方式尋址方式尋址方式指令中說明操作數(shù)所在地址的方法尋址的方法越多,CPU指令功能就越強(qiáng),靈活性就越大不同的尋址方式根據(jù)操作數(shù)存在位置不同7種

2、:立即數(shù)尋址方式、寄存器尋址方式、直接尋址方式、寄存器間接尋址、寄存器相對尋址、基址變址尋址方式、相對基址變址尋址方式其它 立即數(shù)尋址方式立即數(shù)尋址方式立即數(shù)尋址方式操作數(shù)作為指令代碼的一部分存放在代碼段內(nèi)指令隊(duì)列中 舉例舉例寄存器尋址方式寄存器尋址方式寄存器尋址方式操作數(shù)放在寄存器中16位的操作數(shù)AX,BX,CX,DX,SI,DI,BP,SP等8位的操作數(shù)AL,AH,BL,BH,CL,CH,DL,DH舉例舉例注意注意源操作數(shù)用所有尋址方式指定目的操作數(shù)用除立即數(shù)之外的所有尋址方式指定源操作數(shù)與目的操作數(shù)長度一致直接尋址方式直接尋址方式直接尋址方式操作數(shù)放在存儲器中有效地址(EA)由指令直接給

3、出缺省時和有效地址匹配的段寄存器:DS操作數(shù)的物理地址?三種情況三種情況直接尋址方式 段超越前綴 符號地址直接尋址方式直接尋址方式舉例舉例 段超越前綴 對代碼段、堆棧段以及附加段進(jìn)行直接尋址舉例舉例符號地址用符號地址代替數(shù)值地址舉例舉例寄存器間接尋址方式寄存器間接尋址方式操作數(shù)放在存儲器中有效地址由間接尋址寄存器間接給出寄存器EA(BX,BP,SI,DI) 配合使用DS:BX,SI,DI16DS( BX,SI,DI )BP:SS16SSBP 舉例(也可使用段超越前綴)舉例(也可使用段超越前綴)寄存器相對尋址方式寄存器相對尋址方式操作數(shù)放在存儲器中EA由間接尋址寄存器的值加上一個相對數(shù)(8位或者

4、16位位移量)間接給出寄存器為BX, SI, DI, BP EA(BX,BP,SI,DI)相對數(shù) 舉例舉例基址變址尋址方式基址變址尋址方式操作數(shù)放在存儲器中EA由一個基址寄存器(BX或BP)的值加上一個變址寄存器(SI或DI)的值間接給出配合BXDSSSBP組合(缺?。?種)段基址可以使用段超越前綴修改 舉例舉例相對基址變址尋址方式相對基址變址尋址方式操作數(shù)放在存儲器中有效地址由一個基址寄存器的值加上一個變址寄存器的值再加上一個相對數(shù)(8位或者16位位移量)間接給出EA(BX,BP)(SI,DI)相對數(shù)組合缺省:4種 段基址可以使用段超越前綴修改 舉例舉例地址表達(dá)式規(guī)則 立即數(shù)放在 內(nèi)表示直接

5、地址,如2000HBX,BP,SI,DI在 內(nèi)BX和BP不能同時出現(xiàn)在一個內(nèi),SI和DI也不能同時出現(xiàn)方括號有相加的含義等價寫法等價寫法BP默認(rèn)使用SS來提供段基址;其余情況默認(rèn)使用DS來提供段基址可使用段超越前綴對默認(rèn)的段寄存器進(jìn)行修改 其它尋址方式隱含尋址DAA對AL寄存器中的數(shù)據(jù)進(jìn)行十進(jìn)制數(shù)調(diào)整,仍保存在AL中IO端口尋址IN AL,63H直接端口尋址IN AL,DX間接端口尋址3.2 指令的機(jī)器碼表示方式 機(jī)器碼匯編語言源程序用匯編語言編寫的程序(主要由指令系統(tǒng)組成的語言)由指令助記符組成的程序機(jī)器碼匯編語言指令對應(yīng)的二進(jìn)制編碼(編程時不需要了解指令機(jī)器碼)計(jì)算機(jī)不能識別匯編語言程序,

6、需要將匯編語言中的各個指令翻譯成計(jì)算機(jī)能識別的二進(jìn)制機(jī)器語言指令每條指令長度范圍?舉例MOV AL,32B0H 20H 匯編指令指令書寫的格式指令書寫的格式程序在存儲器中隨機(jī)放置3.3 8086的指令系統(tǒng) 80868086指令指令六大類 數(shù)據(jù)傳送指令算術(shù)運(yùn)算指令邏輯運(yùn)算和移位指令字符串處理指令控制轉(zhuǎn)移指令處理器控制指令 數(shù)據(jù)傳送指令 通用數(shù)據(jù)傳送指令MOV傳送指令 指令格式 指令功能允許數(shù)據(jù)傳送的途徑(圖)(圖)R之間,之間,R和和M之間之間IP CS立即數(shù)立即數(shù)間接交換數(shù)據(jù)(間接交換數(shù)據(jù)(M之間和段之間和段R之間)之間)傳送字傳送字/字節(jié)字節(jié)舉例舉例匯編語言中對數(shù)據(jù)段的定義 MOV語句經(jīng)常對

7、數(shù)據(jù)段進(jìn)行數(shù)據(jù)傳送操作舉例舉例SEGMENT ENDSDB DWX Y 在數(shù)據(jù)段的偏移地址?MOV AL, X MOV AL, 0例2DUPAREA1,AERA2,ARRAY,STRING的偏移地址?MOV AL, AREA1 MOV AREA2, ALMOV AX, 9堆棧操作指令 PUSH指令格式指令功能指令執(zhí)行過程注意:源操作數(shù)不能是立即數(shù)以字為操作單位舉例舉例立即數(shù)如何入棧保存?堆棧操作指令 POP指令格式指令功能指令執(zhí)行過程注意:目的操作數(shù)不能是立即數(shù),CS舉例舉例交換指令 XCHG指令格式指令功能R之間(不包括段R),R與M之間注意:段寄存器、立即數(shù)兩個M單元舉例舉例表轉(zhuǎn)換指令 X

8、LAT指令格式XLATXLAT 轉(zhuǎn)換表指令功能將一個字節(jié)從一種代碼查找轉(zhuǎn)換成另一種代碼在M中建立表格表格的起始地址-BX要查找的偏移地址-ALBX+ALAL 舉例舉例ASCII碼碼7段碼段碼輸入輸出指令 完成I/O端口與累加器(AL,AX)直接的數(shù)據(jù)傳送 IN OUTIN指令格式(直接端口尋址,間接端口尋址)指令功能舉例舉例OUT指令格式指令功能舉例舉例地址目標(biāo)傳送指令 LEA取有效地址指令指令格式指令功能源操作數(shù)必須為存儲單元目的操作數(shù)16位R,且不能為段R舉例舉例算術(shù)運(yùn)算指令 由CPU的算術(shù)邏輯運(yùn)算單元ALU完成在PSW中存放ALU運(yùn)算結(jié)果特征其中16位PSW中9位有意義,6位受運(yùn)算結(jié)果影

9、響(CF、PF、AF、OF、SF、ZF)加法和減法無符號/有符號二進(jìn)制整數(shù)無符號壓縮/非壓縮十進(jìn)制整數(shù)加法指令 ADD 加法指令 源Op目的Op目的Op影響6個標(biāo)志位ADC 帶進(jìn)位的加法指令 源Op目的OpCF目的Op影響6個標(biāo)志位操作數(shù)注意事項(xiàng)操作數(shù)注意事項(xiàng)舉例舉例:如何取出CF值? 4字節(jié)數(shù)相加 INC 增量指令不影響CF 對內(nèi)存單元說明對字還是字節(jié)進(jìn)行操作舉例舉例加法指令 壓縮型BCD碼加法調(diào)整指令DAA 將兩個壓縮BCD數(shù)相加后的結(jié)果調(diào)整為正確的壓縮BCD數(shù)AL(隱含尋址)DAA調(diào)整過程若做加法后AL中的低半字節(jié)9或AF=1,則ALAL+6;然后,若AL中的高半字節(jié)9或CF=1, 則A

10、LAL+60H,并使CF=1,否則CF=0舉例舉例884988H 49H加法指令 非壓縮型BCD碼加法調(diào)整指令 AAA把AL中的運(yùn)算結(jié)果調(diào)整為1位非壓縮BCD碼數(shù)如果有進(jìn)位,則進(jìn)位進(jìn)到AH中,并且AF=1 調(diào)整過程若AL低4位9或AF1,則:ALAL+6用與操作將AL高4位清0AF置1,CF置1,AHAH+1否則,AL寄存器的高4位清0 舉例9 BCD 5 BCD 十進(jìn)制加法 9H + 5H AH=0減法指令SUB 減法指令 目的Op目的Op源Op舉例舉例SBB 帶借位的減法指令 目的Op目的Op源OpCF舉例舉例DEC 減量指令不影響CF舉例舉例 NEG 取負(fù)指令目的Op0目的Op舉例舉例

11、減法指令CMP 比較指令目的Op源Op -影響PSW舉例舉例 十進(jìn)制調(diào)整指令DAS(壓縮)AAS(非壓縮)AL邏輯運(yùn)算指令NOT目的操作數(shù)不能為立即數(shù)舉例舉例對標(biāo)志位無影響AND指令格式舉例舉例TEST邏輯與操作,修改標(biāo)志位,不影響目的操作數(shù)舉例舉例XOR(相同為0,不同為1)清0操作與0異或保持不變,與1異或求反操作 簡單加密方法邏輯運(yùn)算指令雙操作數(shù)指令源操作數(shù)可以是寄存器、存儲單元、或者是立即數(shù),目的操作數(shù)不能是立即數(shù),兩個操作數(shù)不能都是存儲器CF和和OF清清0,源操作數(shù)不變,ZF、SF、PF反映操作結(jié)果反映操作結(jié)果單操作數(shù)指令(NOT)目的操作數(shù)不能是立即數(shù)如果操作數(shù)是存儲器,則必須標(biāo)明

12、字還是字節(jié)對標(biāo)志位無影響對標(biāo)志位無影響算術(shù)邏輯移位指令SHL/SAL指令格式:移動多于1位,計(jì)數(shù)值放入CL最低有效位補(bǔ)0,最高有效位進(jìn)CF舉例:舉例:左移一位相當(dāng)于乘2算術(shù)邏輯移位指令SHR最低位進(jìn)入CF,最高位補(bǔ)0無符號數(shù):右移1位相當(dāng)于除2(余數(shù)丟掉)舉例舉例算術(shù)邏輯移位指令SAR最低位進(jìn)入CF,最高位保持不變保持不變有符號數(shù):右移1位相當(dāng)于除2舉例舉例循環(huán)移位指令 ROL/ROR:不帶CF的循環(huán)移位,指令格式(CL)RCL/RCR:帶CF的循環(huán)移位,指令格式(CL)舉例舉例字符串處理字符串一系列存放在存儲器中的字或字節(jié)數(shù)據(jù)(不一定是ASCII碼)長度:最大64KB字符串操作指令隱含約定源

13、串:DS SI目的串:ES DISI、DI自動修改DF:控制處理方向DF0 遞增 字節(jié)操作增1 字操作增2 CLDDF1 遞減 字節(jié)操作減1 字操作減2 STD與重復(fù)指令REP配合使用次數(shù)-CXREP:無條件重復(fù)(CX0則重復(fù)) REPE/REPZ:相等/結(jié)果為0則重復(fù)(ZF=1和CX0則重復(fù)) REPNE/REPNZ:不相等/結(jié)果非0則重復(fù)(ZF=0和CX0則重復(fù)) 字符串操作指令MOVSB/MOVSWDS:SI-ES:DI SI=SI+(-)1(2) DI=DI+(-)1(2) 舉例舉例CMPSB/CMPSWDS:SI-ES:DI-影響標(biāo)志位 SI=SI+(-)1(2) DI=DI+(-)

14、1(2) 舉例舉例LODSB/ LODSWDS:SI-AL,AX SI=SI+(-)1(2) STOSB / STOSWAL,AX -ES:DI DI=DI+(-)1(2)應(yīng)用:內(nèi)存某區(qū)域的初始化 REP STOSB SCASB/SCASWAL,AX - ES:DI-影響標(biāo)志位 DI=DI+(-)1(2) 串操作指令使用步驟步驟根據(jù)需要選擇合適串操作指令源串 DS:SI目的串 ES:DI DF方向CLDSTD執(zhí)行次數(shù)對字節(jié)/字進(jìn)行操作舉例把X起始的成績列表中的50個成績(字節(jié))每項(xiàng)加上5分用LODSB取出用STOSB存儲舉例DS中起始地址為BLOCK的數(shù)據(jù)塊數(shù)目為COUNT個字節(jié),將正數(shù)送ES

15、中PLUS_DATA假設(shè)DS,ES中已分別是BLOCK和PLUS_DATA的段基址BLOCKPLUS_DATA正數(shù)源(DS:SI)目的(ES:DI)START: MOV SI, OFFSET BLOCK;源字符串 MOV DI, OFFSET PLUS_DATA;目的字符串 MOV CX, COUNT CLDGOON: LODSB BLOCK TEST AL, 80H JNZAGAIN;符號位為1,為負(fù)數(shù) STOSB;為正數(shù),則送至PLUS_DATAAGAIN: DEC CX JNZGOON舉例DS中起始地址為BLOCK的數(shù)據(jù)塊數(shù)目為COUNT個字節(jié),將正數(shù)送ES中PLUS_DATA,負(fù)數(shù)送E

16、S中MINUS_DATA (假設(shè)DS,ES已有值)BLOCKPLUS_DATAMINUS_DATA正數(shù)負(fù)數(shù)源(DS:SI)目的(ES:DI)目的(ES:DI) BXSTART: MOVSI, OFFSET BLOCK;源字符串 MOV DI, OFFSET PLUS_DATA;目的字符串 MOV BX, OFFSET MINUS_DATA MOV CX, COUNT CLDGOON: LODS BLOCK TESTAL, 80H JNZMINUS;符號位為1,負(fù)數(shù)送MINUS_DATA STOSB JMPAGAINMINUS: XCHG BX, DI STOSB;負(fù)數(shù)送MINUS_DATA X

17、CHG BX,DIAGAIN: DECCX JNZGOON舉例設(shè)字符串起始地址STRING的段基址為ES,偏移地址為0,長度為COUNT。在字符串中尋找字符A,并搜索次數(shù)放在BX中。沒有找到A則BX為0。 MOVDI, OFFSET STRING;取偏移地址MOVCX, COUNTMOVAL, ACLDREPNE SCASB;CX!=0且不相等則繼續(xù)JZFIND;相等則轉(zhuǎn)到FINDMOVDI, 0FIND: MOVBX, DI;DI為已比較過的次數(shù)控制轉(zhuǎn)移指令 無條件轉(zhuǎn)移指令JMP 按照轉(zhuǎn)移地址的遠(yuǎn)近可分為:段內(nèi)轉(zhuǎn)移,或近(NEAR)轉(zhuǎn)移轉(zhuǎn)移的目的地址和JMP指令在同一代碼段內(nèi),轉(zhuǎn)移僅僅改變I

18、P內(nèi)容而不改變CS內(nèi)容段間轉(zhuǎn)移,或遠(yuǎn)(FAR)轉(zhuǎn)移轉(zhuǎn)移的目的地址和JMP指令在不同的代碼段,轉(zhuǎn)移改變IP和CS內(nèi)容按照提供地址的方式,又可分:直接轉(zhuǎn)移,在指令代碼中直接給出轉(zhuǎn)移的目的地址間接轉(zhuǎn)移,目的地址包含在某個16位寄存器或存儲單元中4種組合段內(nèi)直接轉(zhuǎn)移、段內(nèi)間接轉(zhuǎn)移、段間直接轉(zhuǎn)移、段間間接轉(zhuǎn)移 無條件轉(zhuǎn)移指令JMP段內(nèi)直接轉(zhuǎn)移指令指令格式指令格式:加地址標(biāo)號短轉(zhuǎn)移短轉(zhuǎn)移,程序轉(zhuǎn)向的有效地址等于當(dāng)前IP內(nèi)容加上8位位移量(有符號數(shù)的補(bǔ)碼,-127128),為2字節(jié)指令近轉(zhuǎn)移近轉(zhuǎn)移,程序轉(zhuǎn)向的有效地址等于當(dāng)前IP內(nèi)容加上16位位移量(有符號數(shù)的補(bǔ)碼,-3276832767),為3字節(jié)指令向低

19、地址轉(zhuǎn)移,為負(fù)數(shù)的補(bǔ)碼;向高地址轉(zhuǎn)移,為正數(shù)的補(bǔ)碼編程時可省略SHORT以及NEAR PTR說明符舉例舉例 無條件轉(zhuǎn)移指令JMP段內(nèi)間接轉(zhuǎn)移指令16位寄存器或字寄存器單元,存放偏移地址舉例舉例 段間直接轉(zhuǎn)移指令加地址標(biāo)號標(biāo)號的偏移地址送到IP,標(biāo)號所在段的段地址送到CS 舉例舉例段間間接轉(zhuǎn)移指令加雙字存儲單元:2個字節(jié)偏移地址,2個字節(jié)段地址 舉例舉例無條件轉(zhuǎn)移指令的類型和方式 總結(jié)類型 方式 尋址目標(biāo) 指令舉例 立即短轉(zhuǎn)移(8 位) JMP SHORT PROG_S 直接 立即近轉(zhuǎn)移(16 位) JMP NEAR PTR PROG_N 寄存器(16 位) JMP BX 段內(nèi) 轉(zhuǎn)移 間接 存儲

20、器(16 位) JMP WORD PTR 5BX 直接 立即轉(zhuǎn)移(32 位) JMP FAR PTR PROG_F 段間 轉(zhuǎn)移 間接 存儲器(32 位) JMP DWORD PTR DI 過程調(diào)用和返回指令 過程/子程序經(jīng)常使用的功能,在編程序時寫成獨(dú)立的模塊,供其它程序調(diào)用 以語句PROC開頭,以語句 RET ENDP結(jié)束過程(子程序)的調(diào)用使用CALL指令,過程執(zhí)行結(jié)束后使用RET語句返回到調(diào)用點(diǎn) 指令格式CALL 過程名(過程調(diào)用)RET(返回指令)舉例舉例過程調(diào)用和返回指令近調(diào)用和遠(yuǎn)調(diào)用近調(diào)用和遠(yuǎn)調(diào)用近調(diào)用:調(diào)用指令CALL和所調(diào)用的過程在同一代碼段遠(yuǎn)調(diào)用:在不同代碼段中CALL指令的執(zhí)行過程返回地址入棧:CALL指令之后的指令地址 近調(diào)用:IP遠(yuǎn)調(diào)用:CS IP轉(zhuǎn)到子程序地址RET指令的執(zhí)行過程返回地址出棧近調(diào)用:IP遠(yuǎn)調(diào)用:IP CS返回過程調(diào)用和返回指令舉例段內(nèi)直接加地址標(biāo)號:3字節(jié)指令字節(jié)指令舉例舉例:CALL PROG_N子程序入口地址?返回地址?子程序入口地址?返回地址?段內(nèi)間接R或存儲單元:偏移地址舉例:舉例:CALL WORD PTR BX+SI 子程序入口地址?子程序入口地址?段間直接加地址標(biāo)號:5字節(jié)指令(字節(jié)指令(給出目的地址的偏移地址和段地址)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論