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

下載本文檔

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

文檔簡介

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

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

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

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

5、,允許缺省,如果帶注釋則必須用分號(hào)(;)開頭,注釋本身只用來對(duì)指令功能加以說明,給閱讀程序帶來方便,匯編程序不對(duì)它做任何處理。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ù)尋址方式的指令主要用來對(duì)采用立即數(shù)尋址方式的指令主要用來對(duì)寄存器賦值。寄存器賦值。因?yàn)椴僮鲾?shù)可以從指令中直接取得,不需

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

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

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

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

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

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

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

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

14、是特別是為堆棧中數(shù)組的訪問過程提供了極大的方便。為堆棧中數(shù)組的訪問過程提供了極大的方便。 如圖5-2所示,在訪問堆棧數(shù)組時(shí),可以在BPBP中存放堆棧頂?shù)牡刂分写娣哦褩m數(shù)牡刂?,位移量表示?shù)位移量表示數(shù)組第一個(gè)元素到棧頂?shù)木嚯x,組第一個(gè)元素到棧頂?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ù)的保存及交換等場(chǎng)合數(shù)據(jù)的保存及交換等場(chǎng)合。 我們把這類指令分為四種,并把各種指令操作碼助記符和對(duì)應(yīng)的操作數(shù)列表格如表所示。注意:1、POPPOP指令中的目的操作數(shù)可以是除代碼指令中的目的操作數(shù)可以是除代碼段寄存器段寄存器CSCS之外的其他寄存器和存儲(chǔ)器之外的其他寄存器和存儲(chǔ)器。 2、根據(jù)先進(jìn)后出的原則,程序設(shè)計(jì)必須對(duì)稱根據(jù)先進(jìn)后出的原則,程序設(shè)計(jì)必須對(duì)稱。 例如:將16位通用寄存器CX的內(nèi)容推入堆棧,然后,彈出棧頂至CX中,已

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

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

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

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

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論