第五章微型計算機的指令系統(tǒng)_第1頁
第五章微型計算機的指令系統(tǒng)_第2頁
第五章微型計算機的指令系統(tǒng)_第3頁
第五章微型計算機的指令系統(tǒng)_第4頁
第五章微型計算機的指令系統(tǒng)_第5頁
已閱讀5頁,還剩103頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第五章第五章 微型計算機的指令系統(tǒng)微型計算機的指令系統(tǒng) 指令指令是讓計算機完成某種操作的命令,是讓計算機完成某種操作的命令,指令的集合稱作指令的集合稱作指令系統(tǒng)指令系統(tǒng),不同系列計算機有,不同系列計算機有不同的指令系統(tǒng)。不同的指令系統(tǒng)。 指令是根據(jù)計算機指令是根據(jù)計算機CPUCPU硬件特點研制出來硬件特點研制出來的,的,指令的符號用規(guī)定的英文字母組成,稱為指令的符號用規(guī)定的英文字母組成,稱為助記符助記符。 它的程序目標代碼短、運行速度快它的程序目標代碼短、運行速度快,因此,指令語言是面向機器的語言,它在自動控制、智能化儀器儀表、監(jiān)測等領域應用非常廣泛。5.1 8086/80885.1 8086

2、/8088匯編語言指令格式與尋址方式匯編語言指令格式與尋址方式5.1.1 8086/80885.1.1 8086/8088匯編語言指令語句格式匯編語言指令語句格式 任何一種匯編語言的指令語句都是與機器任何一種匯編語言的指令語句都是與機器指令一一對應的指令一一對應的,它通過匯編程序將其翻譯成機器指令代碼機器指令代碼(目標代碼目標代碼),CPU執(zhí)行某種操作。 86系列匯編語言指令語句格式如圖:指令助記符指令助記符操作數(shù)操作數(shù) 1標號標號是給該指令所在地址取的名字,必須后跟冒號“:”,標號可以缺省標號可以缺省,是可供選是可供選擇的標識符。擇的標識符。8086/8088匯編語言中可使用的標識符必須遵循

3、下列規(guī)則:(1 1)標識符由字母()標識符由字母(a za z、A ZA Z)、)、數(shù)字(數(shù)字(0 0一一9 9)或某些特殊字符(,)或某些特殊字符(,- -,?),?)組成;組成;(2 2)第一個字符必須是字母()第一個字符必須是字母( a za z、A Z A Z )或某些特殊的符號(,)或某些特殊的符號(, - - ,?),?),但但“?”不能單獨作標識符;不能單獨作標識符;(3 3)標識符有效長度為)標識符有效長度為3131個字符,若超過個字符,若超過3131個字符,則只保留前面的個字符,則只保留前面的3131個字符為有效標個字符為有效標識符。識符。 下面是有效的標識符:有效的標識符:

4、 START: MY-CODE: ALPHA: NUM-1: LOOP1 : X: ? MORE-350: BETA-1: DELAYIS: 下面是無效的標識符無效的標識符: 4LOOP: MAIN AB: BETA*: START=3: GAMA1: NUM+1: ?: ONE*TWO:2指令助記符是指令名稱的代表符號指令助記符是指令名稱的代表符號,它是指令語句中的關鍵字,不可缺省。 3.操作數(shù)是參加本指令運算的數(shù)據(jù),有些指令不需要操作數(shù),可以缺?。挥行┲噶钚枰獌蓚€操作數(shù),這時必須用逗號(,)將兩個操作數(shù)分開;有些操作數(shù)可以用表有些操作數(shù)可以用表達式來表示。達式來表示。 4.注釋部分是可選項

5、,允許缺省,如果帶注釋則必須用分號(;)開頭,注釋本身只用來對指令功能加以說明,給閱讀程序帶來方便,匯編程序不對它做任何處理。5.1.2 865.1.2 86系列系列CPUCPU的尋址方式的尋址方式 1 1立即數(shù)尋址立即數(shù)尋址 8086指令系統(tǒng)中,有一部分指令所用的8位或16位操作數(shù)就在指令中提供操作數(shù)就在指令中提供,這種方式叫立即數(shù)尋址方式立即數(shù)尋址方式,例如: MOV AL,80H; MOV AX,1090H; 將1090H送AX,AH中為10H,AL中為90H 采用立即數(shù)尋址方式的指令主要用來對采用立即數(shù)尋址方式的指令主要用來對寄存器賦值。寄存器賦值。因為操作數(shù)可以從指令中直接取得,不需

6、要運行總線周期,所以,立即數(shù)立即數(shù)尋址方式的顯著特點就是速度快。尋址方式的顯著特點就是速度快。2 2寄存器尋址寄存器尋址 如果操作數(shù)就在操作數(shù)就在CPUCPU的內部寄存器中的內部寄存器中,那么寄存器名可在指令中指出,這種尋址方式就叫寄存器尋址方式寄存器尋址方式。 例如: INC CX ;將CX的內容加1 執(zhí)行速度如何?執(zhí)行速度如何? 采用寄存器尋址方式的指令在執(zhí)行時,操作就在操作就在CPUCPU內部進行內部進行,不需要使用總線周期,因此,執(zhí)行速度快執(zhí)行速度快。 問:通常情況下操作數(shù)放在哪里? 3 3直接尋址直接尋址 使用直接尋址方式時,數(shù)據(jù)總是在存儲使用直接尋址方式時,數(shù)據(jù)總是在存儲器中器中,

7、存儲單元的有效地址存儲單元的有效地址由指令直接指出。 例如:MOV AX,1070H; 將DS段的1070H和1071H兩單元的內容取到AX中。 要注意的是采用直接尋址方式時,如果指令前面沒有用前綴前綴指明操作數(shù)在哪一段,則默則默認為段寄存器是數(shù)據(jù)段寄存器認為段寄存器是數(shù)據(jù)段寄存器DSDS。 如果要對其它段寄存器所指出的存儲區(qū)如果要對其它段寄存器所指出的存儲區(qū)進行直接尋址,怎么辦?進行直接尋址,怎么辦? CS:MOV BX,3000H;(加前綴) 將CS段的3000H和3001H兩單元的內容送BX 設CS為5100H,則本指令在執(zhí)行時,將54000H和54001H兩單元的內容取出送BX。 注意

8、:在匯編語言中常將注意:在匯編語言中常將“ ” ”方括方括號中的內容作為存儲單元的地址。號中的內容作為存儲單元的地址。4 4寄存器間接尋址寄存器間接尋址 采用寄存器間接尋址方式時,操操作數(shù)一定在存儲器作數(shù)一定在存儲器中中,存儲單元的有存儲單元的有效地址由寄存器指效地址由寄存器指出出,這些寄存器可以為BX、BP、SI和DI之一,即有效地即有效地址等于其中某一個址等于其中某一個寄存器的值寄存器的值: 和直接尋址的情況一樣,如果指令前面如果指令前面沒有用前綴指明具體的段寄存器,則尋址時沒有用前綴指明具體的段寄存器,則尋址時默認的段寄存器通常為默認的段寄存器通常為DSDS。如寄存器為如寄存器為BPBP

9、時,時,則對應的段寄存器為則對應的段寄存器為SSSS。 采用寄存器間接尋址采用寄存器間接尋址時,允許在指令中指定一時,允許在指令中指定一個位移量。個位移量。MOV AX,BP+0050MOV AX,BP+0050BP=2000HBP=2000HSS=3000HSS=3000H32050HAL32050HAL32051HAH32051HAH寄存器相對尋址寄存器相對尋址 細分起來,寄存器間接尋址可分為以下四種:(1)以BX寄存器進行間接尋址數(shù)據(jù)段基址數(shù)據(jù)段基址尋址尋址 用用BXBX寄存器進行間接尋址時,默認的段寄寄存器進行間接尋址時,默認的段寄存器為存器為DSDS,因為,因為BXBX稱為稱為基址寄

10、存器基址寄存器,所以這種尋址方式也叫數(shù)據(jù)段基址尋址數(shù)據(jù)段基址尋址。例如: MOV AX,BX 設DS = 5000H,BX = 6000H, 則本指令在執(zhí)行時,將56000H和56001H兩單元的內容送AX。 如果要對其他段寄存器所指的區(qū)域進行如果要對其他段寄存器所指的區(qū)域進行尋址,怎么辦?(比如尋址,怎么辦?(比如ESES段)段) ES:MOV CX,BX 設ES = 3000H,BX = 3000H。 則本指令在執(zhí)行時,將33000H和33001H兩單元的內容送CX。 (2)以BP寄存器進行間接尋址堆棧段堆棧段基址尋址?;穼ぶ贰?如果以寄存器BP對操作數(shù)進行間接尋址,則必須注意,操作數(shù)默

11、認在堆棧段中,操作數(shù)默認在堆棧段中,因為因為BPBP稱為基址寄存器稱為基址寄存器,所以這種尋址方式通常稱為堆棧段基址尋址堆棧段基址尋址。例如: MOV BX,BP 設SS = 5000H,BP = 2000H。 則本指令在執(zhí)行時,將52000H和52001H兩單元的內容送BX。(3)以SI、DI寄存器進行間接尋址變址尋變址尋址址 SISI源變址寄存器源變址寄存器 DIDI目的變址寄存器,目的變址寄存器,所以用這兩個所以用這兩個寄存器來進行間接尋址也叫變址尋址寄存器來進行間接尋址也叫變址尋址。 變址尋址通常用于對數(shù)組元素進行操作變址尋址通常用于對數(shù)組元素進行操作。(4)將將BXBX、BPBP和和

12、SISI、DIDI寄存器組合寄存器組合起來起來進進行間接尋址行間接尋址基址加變址的尋址基址加變址的尋址 通常將通常將BXBX和和BPBP稱為基址寄存器,將稱為基址寄存器,將SISI和和DIDI稱為變址寄存器。稱為變址寄存器。 8086指令系統(tǒng)允許把基址寄存器和變址寄存器組成起來構成一種新的尋址方式,叫基址加變址的尋址基址加變址的尋址。 用這種尋址方式時,操作數(shù)的有效地址是:1個基址寄存器(BX或BP)的內容加上一個變址寄存器(SI或DI)的內容。即例如: MOV AX,BX+SI 設DS=1000H,BX=5000H,SI=3000H。 則上面指令在執(zhí)行時,有效地址為8000H,本指令將180

13、00H和18001H兩單元的內容取到AX中。 在基址加變址的尋址方式中,只要用上只要用上BPBP寄存器,那么默認的段寄存器就是寄存器,那么默認的段寄存器就是SSSS; 在其它情況下,默認的段寄存器是什在其它情況下,默認的段寄存器是什么?如果操作數(shù)不在默認段,怎么辦?么?如果操作數(shù)不在默認段,怎么辦? 用基址加變址的尋址方式時,也允許帶一個8位或16位的位移量位移量。例如: MOV AX,BPSI0050;將BP和SI中的內容與0050相加作為有效地址。相對相對的基址加變址尋址的基址加變址尋址。 設BP=3000H,SI=4000H,SS=5000H,結果如何? 這種尋址方式使用起來很靈活,特別

14、是特別是為堆棧中數(shù)組的訪問過程提供了極大的方便。為堆棧中數(shù)組的訪問過程提供了極大的方便。 如圖5-2所示,在訪問堆棧數(shù)組時,可以在BPBP中存放堆棧頂?shù)牡刂分写娣哦褩m數(shù)牡刂?,位移量表示?shù)位移量表示數(shù)組第一個元素到棧頂?shù)木嚯x,組第一個元素到棧頂?shù)木嚯x,變址寄存器SI(也可為DI)指出數(shù)組元素。指出下列指令中源操作數(shù)的尋址方式。指出下列指令中源操作數(shù)的尋址方式。 (1 1)MOV AXMOV AX,1070H1070H (2 2)MOV AXMOV AX,BXBX (3 3)MOV AXMOV AX,BXBXSISI00500050 (4 4)AND AX, BXAND AX, BX (5 5)

15、MOV AX, 6000HMOV AX, 6000H 5.2 5.2、傳送類指令、傳送類指令 傳送類指令是指令系統(tǒng)中最活躍的一類指令,也是條數(shù)最多的一類指令,主要用于數(shù)據(jù)的保存及交換等場合數(shù)據(jù)的保存及交換等場合。 我們把這類指令分為四種,并把各種指令操作碼助記符和對應的操作數(shù)列表格如表所示。注意:1、POPPOP指令中的目的操作數(shù)可以是除代碼指令中的目的操作數(shù)可以是除代碼段寄存器段寄存器CSCS之外的其他寄存器和存儲器之外的其他寄存器和存儲器。 2、根據(jù)先進后出的原則,程序設計必須對稱根據(jù)先進后出的原則,程序設計必須對稱。 例如:將16位通用寄存器CX的內容推入堆棧,然后,彈出棧頂至CX中,已

16、知:(SS)=0200H,(SP)=0008H,(CX)=12FA,其示意如圖5-4和5-5所示。 又如:假設數(shù)據(jù)表放在偏移地址又如:假設數(shù)據(jù)表放在偏移地址為為 2000H2000H開始的內存中,取出開始的內存中,取出“3”3”所對所對應的七段碼,用如下幾條程序來完成:應的七段碼,用如下幾條程序來完成: MOV BX, 2000H MOV AL,3 XLAT 執(zhí)行結果執(zhí)行結果 AL=30HAL=30H PUSHF和和POPF指令一般用在子程指令一般用在子程序和中斷程序的首尾,起保存主程序標志序和中斷程序的首尾,起保存主程序標志和恢復主程序標志的作用。和恢復主程序標志的作用。 ADCADC指令為

17、實現(xiàn)指令為實現(xiàn)多字節(jié)的加法多字節(jié)的加法運算提供了方便。運算提供了方便。比如,有兩個比如,有兩個4 4字節(jié)的無符號數(shù)相加,這兩個數(shù)分別放字節(jié)的無符號數(shù)相加,這兩個數(shù)分別放在在2000H2000H和和3000H3000H開始的存儲單元中,低位在前,高位開始的存儲單元中,低位在前,高位在后,要求進行運算后,得到的和放在在后,要求進行運算后,得到的和放在2000H2000H開始的內開始的內存單元中。存單元中。多字節(jié)的加法程序段如下:多字節(jié)的加法程序段如下: CLCCLC ;清進位;清進位CFCF MOV SI MOV SI,2000H2000H ;取第一個數(shù)的首地址;取第一個數(shù)的首地址 MOV AXM

18、OV AX,SISI ;將第一個數(shù)的低;將第一個數(shù)的低1616位取到位取到AXAX MOV DI MOV DI,3000H3000H ;取第二個數(shù)的首地址;取第二個數(shù)的首地址 ADD AXADD AX,DIDI ; 第一個和第二個數(shù)的低第一個和第二個數(shù)的低1616位相加位相加 MOV SIMOV SI,AXAX ;相加結果送到;相加結果送到2000H2000H和和20012001單元單元 MOV AXMOV AX,SI+2SI+2 ;取第一個數(shù)的高;取第一個數(shù)的高1616位送到位送到AXAX中中 ADC AXADC AX,DI+2DI+2 ;兩個數(shù)的高;兩個數(shù)的高1616位連同進位位相加位連同

19、進位位相加 MOV SI+2MOV SI+2,AXAX ;相加的結果送到;相加的結果送到20022002和和20032003單元單元 下面簡單舉例說明移位指令的應用:下面簡單舉例說明移位指令的應用: 一般算術移位指令可用于實現(xiàn)帶符號數(shù)一般算術移位指令可用于實現(xiàn)帶符號數(shù)的簡單乘除運算,而邏輯移位指令則用于無的簡單乘除運算,而邏輯移位指令則用于無符號數(shù)的簡單乘除。符號數(shù)的簡單乘除。 例 AX中已存放一帶符號數(shù),若要完成(AX)*32運算,可用以下程序段: MOV DX,AX ; SAL AX, 1 ;乘;乘2AX ADD AX, DX ;乘;乘3AX SAR AX, 1 ;完成(;完成(AX)*3

20、/2字符串的掃描和比較字符串的掃描和比較 SCASSCAS指令是用來從目標串中查找某個關鍵指令是用來從目標串中查找某個關鍵字,要求查找的關鍵字應事先置入字,要求查找的關鍵字應事先置入AXAX或或ALAL寄存寄存器中。器中。 SCAS指令的操作是將AXAL寄存器中的關鍵字減去由DI所指向的目標串中一個元素,不不傳送結果,只根據(jù)結果置標志位傳送結果,只根據(jù)結果置標志位,修改DI寄存器內容指向下一元素。 通常在通常在SCASSCAS指令之前加重復前綴指令之前加重復前綴REPNEREPNEREPNZREPNZ,用來從目標串中尋找關鍵字,操作一操作一直進行到直進行到ZFZF1 1或或(CX)(CX)0 0為止。為止。 例如,在某字符串中查找是否存在“$”字符。若存在,則將“$”字符所在地址送入BX寄存器中,否則將BX寄存器清“0”。程序如下: CLD CLD ; 清除方向標志清除方向標志DFDF MOV DIMOV DI,010

溫馨提示

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

評論

0/150

提交評論