計(jì)算機(jī)專(zhuān)接本之微機(jī)原理-3指令系統(tǒng)_第1頁(yè)
計(jì)算機(jī)專(zhuān)接本之微機(jī)原理-3指令系統(tǒng)_第2頁(yè)
計(jì)算機(jī)專(zhuān)接本之微機(jī)原理-3指令系統(tǒng)_第3頁(yè)
計(jì)算機(jī)專(zhuān)接本之微機(jī)原理-3指令系統(tǒng)_第4頁(yè)
計(jì)算機(jī)專(zhuān)接本之微機(jī)原理-3指令系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩189頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、1 1第三章第三章 指令系統(tǒng)指令系統(tǒng)2 2l x86指令的格式與尋址方式l 傳送類(lèi)指令l 數(shù)據(jù)操作類(lèi)指令l 串操作指令l 控制類(lèi)指令3 33.1x86指令的格式與尋址方式l 指令是讓計(jì)算機(jī)完成某種操作的命令,指令的集合稱(chēng)作指令系統(tǒng),不同系列計(jì)算機(jī)有不同的指令系統(tǒng)。l 指令系統(tǒng)與計(jì)算機(jī)硬件有著對(duì)應(yīng)關(guān)系,用指令進(jìn)行編程能夠充分開(kāi)發(fā)計(jì)算機(jī)硬件資源,它的程序目標(biāo)代碼短、運(yùn)行速度快。4 43.1.1 86系列匯編語(yǔ)言指令語(yǔ)句格式系列匯編語(yǔ)言指令語(yǔ)句格式l 匯編語(yǔ)言指令語(yǔ)句格式:匯編語(yǔ)言指令語(yǔ)句格式:l 命名規(guī)則:命名規(guī)則:(1)由字母,數(shù)字或)由字母,數(shù)字或、-、?組成。組成。(2)第一個(gè)字符必須是字母

2、或)第一個(gè)字符必須是字母或、-、?,但,但?不能單獨(dú)做不能單獨(dú)做標(biāo)識(shí)符。標(biāo)識(shí)符。(3)標(biāo)識(shí)符有效長(zhǎng)度為)標(biāo)識(shí)符有效長(zhǎng)度為31 。 標(biāo)號(hào):標(biāo)號(hào):操作碼操作碼操作數(shù)操作數(shù);注釋?zhuān)蛔⑨? 53.1.2 尋址方式尋址方式l 指令系統(tǒng)設(shè)計(jì)了多種操作數(shù)的來(lái)源,尋找操作數(shù)的過(guò)程就是操作數(shù)的尋址方式。l 操作數(shù)采取哪一種尋址方式,會(huì)影響機(jī)器運(yùn)行的速度和效率。8086CPU8086CPU允許從寄存器、存儲(chǔ)器中獲得操作允許從寄存器、存儲(chǔ)器中獲得操作數(shù)數(shù)n尋找操作數(shù)的有效地址EA:Effective Address,有效地址6 6說(shuō)明:l 按指令格式,一條指令可占一到六個(gè)字節(jié),從形式上可分單操作數(shù),雙操作數(shù),無(wú)操作

3、數(shù)指令。l 雙操作數(shù)指令不能同為存儲(chǔ)器操作數(shù)l 指令不同,尋址方式不同,指令執(zhí)行時(shí)間不同,時(shí)間和計(jì)算機(jī)主頻(時(shí)鐘周期)還有關(guān)。7 7操作數(shù)操作數(shù)操作數(shù)包含在指令中,即指令中的操作數(shù)包含在指令中,即指令中的操作數(shù)部分直接給出操作數(shù)本身,操操作數(shù)部分直接給出操作數(shù)本身,操作數(shù)隨指令一起從存儲(chǔ)器中取出來(lái)后作數(shù)隨指令一起從存儲(chǔ)器中取出來(lái)后就可以參加運(yùn)算,稱(chēng)為立即數(shù)。就可以參加運(yùn)算,稱(chēng)為立即數(shù)。操作數(shù)在操作數(shù)在CPUCPU的某個(gè)寄存器中,由指令的某個(gè)寄存器中,由指令給出寄存器的編碼來(lái)指出操作數(shù)在哪個(gè)給出寄存器的編碼來(lái)指出操作數(shù)在哪個(gè)寄存器中,稱(chēng)為寄存器操作數(shù)。寄存器中,稱(chēng)為寄存器操作數(shù)。操作數(shù)在內(nèi)存數(shù)據(jù)

4、區(qū)中,指令中操作數(shù)在內(nèi)存數(shù)據(jù)區(qū)中,指令中的操作數(shù)部分給出此操作數(shù)地址的的操作數(shù)部分給出此操作數(shù)地址的計(jì)算方法,稱(chēng)為存儲(chǔ)器操作數(shù)。計(jì)算方法,稱(chēng)為存儲(chǔ)器操作數(shù)。8 8(1)立即數(shù)尋址l 8086 CPU指令系統(tǒng)中,有一部分指令所用的8位或16位操作數(shù)就在指令中提供,這種方式叫立即數(shù)尋址方式。l 立即尋址主要用于給存儲(chǔ)器或寄存器賦初值?!纠俊纠?MOV AX MOV AX,080AH080AH,其尋址如圖所示。,其尋址如圖所示。操作碼操作碼高址高址0AH08HAH ALAX圖圖 立即尋址示意圖立即尋址示意圖操作碼操作碼立即數(shù)低字節(jié)立即數(shù)低字節(jié)立即數(shù)高字節(jié)立即數(shù)高字節(jié)9 9立即數(shù)尋址演示1010說(shuō)

5、明:說(shuō)明:l 立即數(shù)尋址因?yàn)椴僮鲾?shù)可以從指令中直接取得,不需要運(yùn)行總線周期,所以,立即數(shù)尋址方式的顯著特點(diǎn)就是速度快。l 立即數(shù)可以為8位,也可以為16位;規(guī)定立即數(shù)只能是整數(shù),不能是小數(shù)、變量或者其他類(lèi)型的數(shù)據(jù);另外還要注意,立即數(shù)只能作為源操作數(shù)。1111(2) 寄存器尋址寄存器尋址l 如果操作數(shù)就在CPU的內(nèi)部寄存器中,那么寄存器名可在指令中指出。這種尋址方式就叫寄存器尋址方式。l 對(duì)16位操作數(shù),寄存器可以是AX、BX、CX、DX、SI、DI、SP或BP,而對(duì)8位操作數(shù),寄存器可以是AH、AL、BH、BL、CH、CL、DH、DL?!纠俊纠?MOV AX MOV AX,BX BX 執(zhí)

6、行過(guò)程如圖所示。執(zhí)行過(guò)程如圖所示。AXBX圖圖 寄存器尋址示意圖寄存器尋址示意圖采用寄存器尋址方式的指令在執(zhí)行時(shí),操作就在采用寄存器尋址方式的指令在執(zhí)行時(shí),操作就在CPU內(nèi)部進(jìn)行,不需要內(nèi)部進(jìn)行,不需要使用總線周期,因此,使用總線周期,因此,。1212寄存器尋址演示寄存器尋址演示11313寄存器尋址演示寄存器尋址演示2: MOV DS,AX(8E08)1414(3)直接尋址(存儲(chǔ)器直接尋址)l 使用直接尋址方式時(shí),數(shù)據(jù)總是在存儲(chǔ)器中,存儲(chǔ)單元的有效地址EA由指令直接指出,所以直接尋址是對(duì)存儲(chǔ)器進(jìn)行訪問(wèn)時(shí)可采用的最簡(jiǎn)單的方式。 1515需要注意:需要注意:(1)采用直接尋址方式時(shí),如果指令前面沒(méi)

7、有用前綴指明操作數(shù)在哪一段,則默認(rèn)為段寄存器是數(shù)據(jù)段寄存器DS。(2)如果要對(duì)其它段寄存器所指出的存儲(chǔ)區(qū)進(jìn)行直接尋址,則本條指令前必須用前綴指出段寄存器名。例如:例如:MOV AX,1070H;將;將DS段的段的1070H和和1071H兩單元內(nèi)容取到兩單元內(nèi)容取到AX中中設(shè)設(shè)DS2000H,則執(zhí)行過(guò)程是將絕對(duì)地址為,則執(zhí)行過(guò)程是將絕對(duì)地址為21070H和和21071H兩單兩單元的內(nèi)容取出送元的內(nèi)容取出送AX例如:例如:MOV BX,CS:3000H;將;將CS段的段的3000H和和 3001H兩單元的內(nèi)容送兩單元的內(nèi)容送BX1616直接尋址演示直接尋址演示1(MOV AX,DS:2000H)1

8、717直接尋址演示直接尋址演示21818(4)l 采用寄存器間接尋址方式時(shí),操作數(shù)一定在存儲(chǔ)器中,存儲(chǔ)單元的有效地址由寄存器指出,這些寄存器可以為BX,BP,SI和DI之一l 即有效地址等于其中某一個(gè)寄存器的值。BXEA BP SI DI 1919寄存器間接尋址 (情況一) 以BX寄存器進(jìn)行間接尋址 以SI和DI寄存器進(jìn)行間接尋址若以若以SISI、DIDI、BXBX間接尋址,操作數(shù)通常在現(xiàn)行數(shù)據(jù)段中,即間接尋址,操作數(shù)通常在現(xiàn)行數(shù)據(jù)段中,即DSDS中的值中的值左移四位加上左移四位加上SISI、DIDI或或BXBX中的有效地址即為操作數(shù)的物理地址。中的有效地址即為操作數(shù)的物理地址?!纠俊纠?

9、MOV AX MOV AX,SI SI 執(zhí)行過(guò)程如圖所示。執(zhí)行過(guò)程如圖所示。( (變址尋址變址尋址) ) 2020數(shù)據(jù)段內(nèi),寄存器間接尋址(演示1)2121數(shù)據(jù)段內(nèi),寄存器間接尋址(演示2)2222l 以BP寄存器進(jìn)行間接尋址若以若以BPBP間接尋址,則操作數(shù)在堆棧段中,即操作數(shù)的物理間接尋址,則操作數(shù)在堆棧段中,即操作數(shù)的物理地址位堆棧段寄存器地址位堆棧段寄存器SSSS中的值左移四位與中的值左移四位與BPBP相加。相加。 2323*寄存器間接尋址的分類(lèi)(重要)寄存器間接尋址的分類(lèi)(重要)BXEA BP + 8位位移量SI 16位位移量DI l 寄存器間接尋址可分為以下4種: 以BX寄存器進(jìn)行

10、間接尋址數(shù)據(jù)段基址尋址 以BP寄存器進(jìn)行間接尋址堆棧段基址尋址 以SI和DI寄存器進(jìn)行間接尋址變址尋址 BX,BP和SI,DI寄存器組合起來(lái)進(jìn)行間接尋址基址加變址尋址 采用寄存器間接尋址的時(shí)候,允許指定一個(gè)位移量,采用寄存器間接尋址的時(shí)候,允許指定一個(gè)位移量,EAEA可可以通過(guò)寄存器的內(nèi)容加上一個(gè)位移量獲得。位移量可以為以通過(guò)寄存器的內(nèi)容加上一個(gè)位移量獲得。位移量可以為8 8位位或或1616位。位。2424(1)基址尋址 EA=BXBP+8 8位偏移量位偏移量16位偏移量位偏移量數(shù)據(jù)段基址尋址數(shù)據(jù)段基址尋址堆棧段基址尋址堆棧段基址尋址以以BX和和BP寄存器進(jìn)行間接尋址寄存器進(jìn)行間接尋址2525

11、l 用BX寄存器進(jìn)行間接尋址時(shí),默認(rèn)的段寄存器為DS,因?yàn)锽X稱(chēng)為基址寄存器,如果要對(duì)其它段寄存器所指的區(qū)域進(jìn)行基址尋址,則必須在指令前用前綴指出段寄存器名。例如:MOV CX,ES:BX 設(shè)ES3000H,BX4000H,則本指令在執(zhí)行時(shí),將34000H和34001H兩單元的內(nèi)容送CX。l 如果以寄存器BP對(duì)操作數(shù)進(jìn)行間接尋址,操作數(shù)默認(rèn)在堆棧段中,該尋址方式通常稱(chēng)為堆棧段基址尋址。例如:MOV BX,BP 設(shè)SS5000H,BP4000H,則本指令在執(zhí)行時(shí),將54000H和54001H兩單元的內(nèi)容送BX。2626(2)變址尋址l 以SI和DI寄存器進(jìn)行間接尋址。l SI和DI寄存器分別稱(chēng)為

12、源變址寄存器和目的變址寄存器,所以用這兩個(gè)寄存器來(lái)進(jìn)行間接尋址也叫變址尋址。l 變址尋址通常用于對(duì)數(shù)組元素、字符串等進(jìn)行操作,操作過(guò)程中,指令會(huì)自動(dòng)修改變址寄存器中的地址,以指向下一個(gè)操作數(shù)。EA=SIDI+8 8位偏移量位偏移量1616位偏移量位偏移量2727 2828(3)的尋址l 將BX,BP和SI,DI寄存器組合起來(lái)進(jìn)行間接尋址。l 通常將BX和BP稱(chēng)為基址寄存器,將SI和DI稱(chēng)為變址寄存器。8086指令系統(tǒng)允許把基址寄存器和變址寄存器組成起來(lái)構(gòu)成一種新的尋址方式,叫基址加變址的尋址。EA=BXBP+8 8位偏移量位偏移量1616位偏移量位偏移量SIDI+例如:例如: MOV AX,B

13、X+SI設(shè)設(shè)DS1000H,BX5000H,SI2000H,則上面指令在執(zhí)行時(shí),有效,則上面指令在執(zhí)行時(shí),有效地址為地址為7000H,本指令將,本指令將17000H和和17001H兩單元的內(nèi)容取到兩單元的內(nèi)容取到AX中。中。2929 303031313232l 基址加變址尋址方式使用起來(lái)很靈活,特別是為堆棧中數(shù)基址加變址尋址方式使用起來(lái)很靈活,特別是為堆棧中數(shù)組的訪問(wèn)過(guò)程提供了極大的方便。組的訪問(wèn)過(guò)程提供了極大的方便?;芳幼冎穼ぶ贩绞皆L問(wèn)堆棧數(shù)組基址加變址尋址方式訪問(wèn)堆棧數(shù)組在訪問(wèn)堆棧數(shù)組時(shí):(1)在BP中存放堆棧頂?shù)牡刂?;?)位移量表示數(shù)組第一個(gè)元素到棧頂?shù)木嚯x,(3)變址寄存器SI(也

14、可為DI)指出數(shù)組某個(gè)元素。通過(guò)修改通過(guò)修改SI可遍歷整個(gè)數(shù)組可遍歷整個(gè)數(shù)組3333(5)I/O端口尋址端口尋址端口尋址I/O直接端口尋址直接端口尋址間接端口尋址間接端口尋址由指令直接給出輸入輸由指令直接給出輸入輸出設(shè)備的端口地址。規(guī)出設(shè)備的端口地址。規(guī)定端口地址為定端口地址為8 8位,能尋位,能尋址址256256個(gè)端口。個(gè)端口。由寄存器由寄存器DXDX給出輸入輸出給出輸入輸出設(shè)備的端口地址。由于設(shè)備的端口地址。由于DXDX是是1616位,因此能尋址位,因此能尋址64K64K個(gè)個(gè)端口。端口。【例】【例】 IN AL IN AL,20H20H;將地址為;將地址為20H20H的外設(shè)的內(nèi)容讀入的外設(shè)

15、的內(nèi)容讀入ALAL中中 OUT DX OUT DX,AL AL ;將;將ALAL中內(nèi)容輸出給以中內(nèi)容輸出給以DXDX的內(nèi)容為地址的外的內(nèi)容為地址的外設(shè)設(shè)3434尋址方式小結(jié)尋址方式小結(jié)(1)“”:匯編語(yǔ)言中,常將“”方括號(hào)中的內(nèi)容作為存儲(chǔ)單元的地址。如:BX、DI、2056H(2)除立即數(shù)尋址和寄存器尋址外,其他尋址方式都有隱含的段寄存器,操作數(shù)實(shí)際的物理地址是由段寄存器的內(nèi)容和指令碼中求得的有效地址的相加來(lái)求得。(3)上述尋址方式同樣適用于與存儲(chǔ)器統(tǒng)一編址的IO端口。若IO端口采用獨(dú)立編址的方式,則對(duì)IO端口的尋址有以下兩種方式: 直接端口尋址端口地址用8位地址碼表示,它是指令的一部分。如:

16、IN AL,21H 間接端口尋址此時(shí)IO端口的地址由16位表示,并規(guī)定存放在DX寄存器中。如輸出指令OUT DX,AL, 表示將AL中的內(nèi)容輸出到地址由DX寄存器內(nèi)容所指定的端口中。3535尋址方式補(bǔ)充尋址方式補(bǔ)充1數(shù)據(jù)串尋址用于數(shù)據(jù)串操作指令。數(shù)據(jù)串尋址用于數(shù)據(jù)串操作指令。【例】【例】 MOVSB執(zhí)行后:執(zhí)行后: DI SI SISI1 DIDI1 3636練習(xí)練習(xí)【例】設(shè)(BX)3158H,(SI)12A8H,(DS)2100H,并假定沒(méi)有使用段前綴,即把DS作為操作數(shù)對(duì)應(yīng)的段寄存器。并且內(nèi)存單元情況如圖所示,試分析下列程序執(zhí)行后AX的內(nèi)容。 MOV AX,1000H MOV AX,BX

17、MOV AX,SI MOV AX,BX+SI+100HDS22000H24158H222A8H25500H12H34H56H78H90H1AH1BH1CH371、指出下列指令的尋址方式:、指出下列指令的尋址方式:(1) MOV CX,100(2) MOV AX,25SI(3) MOV DIBX,AX(4) ADD AX,ADDR(5) MUL BL(6) INC WORD PTR BX+25(7) SUB AX,BP6(8) JMP BX(9) IN AL,20H38383.2 傳送類(lèi)指令傳送類(lèi)指令l 傳送類(lèi)指令是指令系統(tǒng)中最活躍的一類(lèi)指令,也是條數(shù)最傳送類(lèi)指令是指令系統(tǒng)中最活躍的一類(lèi)指令,也

18、是條數(shù)最多的一類(lèi)指令,多的一類(lèi)指令,主要用于數(shù)據(jù)的保存及交換等場(chǎng)合主要用于數(shù)據(jù)的保存及交換等場(chǎng)合。l 傳送類(lèi)指令可以分為傳送類(lèi)指令可以分為4種:種:通用數(shù)據(jù)傳送指令通用數(shù)據(jù)傳送指令目標(biāo)地址傳送指令目標(biāo)地址傳送指令標(biāo)志位傳送指令標(biāo)志位傳送指令I(lǐng)/O數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令39393.2.1 通用數(shù)據(jù)傳送指令通用數(shù)據(jù)傳送指令通用數(shù)據(jù)傳通用數(shù)據(jù)傳送指令送指令MOVMOV指令指令堆棧操作堆棧操作指令指令數(shù)據(jù)交換數(shù)據(jù)交換XCHG查表轉(zhuǎn)換查表轉(zhuǎn)換XLAT壓棧壓棧PUSH出棧出棧POP40401. 最基本的傳送指令最基本的傳送指令MOVn指令格式:指令格式:MOV OPMOV OP目,目,OPOP源源n指令

19、功能:將源操作數(shù)傳送到目的操作數(shù)中。指令功能:將源操作數(shù)傳送到目的操作數(shù)中。nOPOP目表示目的操作數(shù),可以是寄存器、存儲(chǔ)器。目表示目的操作數(shù),可以是寄存器、存儲(chǔ)器。nOPOP源表示源操作數(shù),可以是寄存器、存儲(chǔ)器和立即數(shù)。源表示源操作數(shù),可以是寄存器、存儲(chǔ)器和立即數(shù)。 4141l 例如:例如:MOV AX,BUF MOV BH,DIES : MOV DI, SIMOV BP,3BX+SIMOV BUFA,DLMOV BP,AXDS: MOV BP,DLMOV BUF,DSMOV ES ,BUF4242l MOV指令的幾點(diǎn)說(shuō)明:指令的幾點(diǎn)說(shuō)明:(1)雙操作數(shù)指令不允許兩個(gè)操作數(shù)同時(shí)為段寄存器或存

20、儲(chǔ)器操作數(shù) MOV seg ,seg ;錯(cuò)誤 MOV mem ,mem ;錯(cuò)誤 (2)立即數(shù)不能傳送到段寄存器中。 MOV seg ,imm ; 錯(cuò)誤(3)目的操作數(shù)不允許使用段寄存器。(4)指令指針I(yè)P,不能作為MOV指令的操作數(shù)(5)dest與src必須類(lèi)型匹配,即同時(shí)是字節(jié)或字類(lèi)型。(6)MOV指令不影響標(biāo)志寄存器的值。4343l 寄存器具有明確的類(lèi)型,例如,AL、AX分別為字節(jié)、字類(lèi)型。若立即數(shù)沒(méi)有明確的類(lèi)型,MASM負(fù)責(zé)將立即數(shù)擴(kuò)展為與目的操作數(shù)位數(shù)相同。l 有時(shí)MASM不能確定內(nèi)存操作數(shù)的類(lèi)型,需要用byte ptr和word ptr明確指出是字節(jié)或字類(lèi)型。l 如,判斷下述指令是否

21、正確: MOV 2345H,124444l MOV AX,BL l MOV DS,1000Hl MOV BX ,SIl MOV ES,CSl MOV CS,AX;類(lèi)型不匹配;類(lèi)型不匹配;不允許立即數(shù)送段寄存器;不允許立即數(shù)送段寄存器;不允許內(nèi)存操作數(shù)之間傳送;不允許內(nèi)存操作數(shù)之間傳送;不允許段寄存器之間傳送;不允許段寄存器之間傳送; CS不能作為目的操作數(shù)不能作為目的操作數(shù);錯(cuò)誤,類(lèi)型不匹配;錯(cuò)誤,類(lèi)型不匹配;正確,;正確,MASM可以判斷出要送字節(jié)可以判斷出要送字節(jié)0l MOV AX,B l MOV AL,0 4545練習(xí)練習(xí)l 用用MOV指令實(shí)現(xiàn)兩內(nèi)存字節(jié)單元內(nèi)容的交換指令實(shí)現(xiàn)兩內(nèi)存字節(jié)單

22、元內(nèi)容的交換,要求使用要求使用直接尋址和寄存器尋址兩種方式來(lái)實(shí)現(xiàn)。直接尋址和寄存器尋址兩種方式來(lái)實(shí)現(xiàn)。 2035H 2045H 01H . 02H4646l 解答解答1.用直接尋址方式實(shí)現(xiàn)用直接尋址方式實(shí)現(xiàn)MOV BL, 2035;MOV CL,2045H;MOV 2045H,BL;MOV 2035H,CL;2.2.用寄存器尋址方式實(shí)現(xiàn)用寄存器尋址方式實(shí)現(xiàn)MOV SI , 2035H;MOV DI, 2045H;MOV AH, SI;MOV AL, DI;MOV 2035H,AL;MOV 2045H,AH;47472. 交換指令交換指令XCHGl 交換指令交換指令XCHG可以實(shí)現(xiàn)字節(jié)交換,也可

23、以實(shí)現(xiàn)字交換??梢詫?shí)現(xiàn)字節(jié)交換,也可以實(shí)現(xiàn)字交換。l 格式:格式: XCHG DEST ,SRC;將源操作數(shù)與目的操作數(shù)的內(nèi)容互換。l 交換過(guò)程可以在CPU的內(nèi)部寄存器之間進(jìn)行,也可以在內(nèi)部寄存器和存儲(chǔ)單元之間進(jìn)行,但不能在兩個(gè)存儲(chǔ)單元之間執(zhí)行數(shù)據(jù)交換過(guò)程。XCHGAL,BL XCHGBX,CX XCHG2530,CX48483. 換碼指令換碼指令XLATl XLAT是一條完成字節(jié)翻譯功能的指令,它可以使累加器中的一個(gè)值變換為內(nèi)存表格中的某一個(gè)值,一般用來(lái)實(shí)現(xiàn)編碼制的轉(zhuǎn)換。:XLAT將(BX)為首址(AL)為位移量的字節(jié)存儲(chǔ)單元中的數(shù)據(jù)送AL寄存器。即(BX+AL)AL。l 使用換碼指令時(shí),要

24、求BX寄存器指向表的首地址,AL的內(nèi)容為表中某一項(xiàng)與表格首地址之間的偏移量,指令執(zhí)行時(shí),會(huì)將BX和AL中的值相加,把得到的值作為地址,然后將此地址所對(duì)應(yīng)的單元中的值取到AL中去。4949l XLAT指令就是通過(guò)查表方式來(lái)完成翻譯功能的,因此,指令就是通過(guò)查表方式來(lái)完成翻譯功能的,因此,在執(zhí)行該指令之前,必須建立好一張翻譯表,該表的最在執(zhí)行該指令之前,必須建立好一張翻譯表,該表的最大容量為大容量為256字節(jié)。字節(jié)。5050 xlatxlat指令執(zhí)行演示指令執(zhí)行演示5151XLAT指令的應(yīng)用(教材指令的應(yīng)用(教材p117)l 執(zhí)行執(zhí)行XLAT指令可將任意一個(gè)十進(jìn)制數(shù)翻譯成指令可將任意一個(gè)十進(jìn)制數(shù)翻

25、譯成7段段顯示碼,其操作步驟如下:顯示碼,其操作步驟如下:(1) 將譯碼表定位到某個(gè)邏輯段的一片連續(xù)地址中,將譯碼表定位到某個(gè)邏輯段的一片連續(xù)地址中, 并將并將其表首址的偏移地址置入其表首址的偏移地址置入BX寄存器中。寄存器中。(2) 將待翻譯的十進(jìn)制數(shù)字送入將待翻譯的十進(jìn)制數(shù)字送入AL寄存器中。寄存器中。(3) 執(zhí)行執(zhí)行XLAT指令。指令。l 例如,假設(shè)這段數(shù)據(jù)存放在偏移地址為例如,假設(shè)這段數(shù)據(jù)存放在偏移地址為2000H開(kāi)開(kāi)始的內(nèi)存中,取出始的內(nèi)存中,取出“3”所對(duì)應(yīng)的所對(duì)應(yīng)的7段碼,用如下段碼,用如下幾條程序助記符即可完成:幾條程序助記符即可完成:MOVBX,2000HMOVAL,3XLA

26、T52524. 堆棧操作指令l 壓棧指令壓棧指令指令格式:指令格式:PUSH OPPUSH OP指令功能:將寄存器或存儲(chǔ)器單元的內(nèi)容送入堆棧指令功能:將寄存器或存儲(chǔ)器單元的內(nèi)容送入堆棧OPOP為為1616位的寄存器或存儲(chǔ)器操作數(shù)。位的寄存器或存儲(chǔ)器操作數(shù)。操作過(guò)程:操作過(guò)程:(SP) (SP)-2(SP)+1,(,(SP) (SRC)5353l 出棧指令出棧指令指令格式:指令格式:POP OPPOP OP指令功能:將指令功能:將SPSP所指向的堆棧棧頂?shù)囊粋€(gè)字彈到寄存器所指向的堆棧棧頂?shù)囊粋€(gè)字彈到寄存器 或存儲(chǔ)單元中。或存儲(chǔ)單元中。OPOP為為1616位操作,可以是寄存器或存儲(chǔ)器操作數(shù)。位操作

27、,可以是寄存器或存儲(chǔ)器操作數(shù)。操作過(guò)程:操作過(guò)程:(DST)(SP)+1,(,(SP)(SP) (SP)+25454PUSH/POP演示演示5555例題例題堆棧堆棧SS:01F8SS:01FASS:01FCSS:01FESPAA BB(執(zhí)行(執(zhí)行PUSH AX之前)之前)1101H1試分析如下兩條指令執(zhí)行后,試分析如下兩條指令執(zhí)行后,SP的變化情況的變化情況: 5656例題例題n將16位通用寄存器CX的內(nèi)容壓入堆棧,已知:n(SS)0200H,n(SP)0008H,n(CX)12FAH。5757n彈出棧頂至彈出棧頂至CX中中58583.2.2l 這是一類(lèi)專(zhuān)用于傳送地址碼的指令,可用來(lái)傳送操作數(shù)

28、的這是一類(lèi)專(zhuān)用于傳送地址碼的指令,可用來(lái)傳送操作數(shù)的段地址或偏移地址,共包含以下段地址或偏移地址,共包含以下3條指令:條指令:1取有效地址指令 LEA2取偏移地址及數(shù)據(jù)段首址指令 LDS3取偏移地址及附加數(shù)據(jù)段指令 LES5959指令格式:指令格式:LEA OPLEA OP目,目,OPOP源源指令功能:指令功能:將源操作數(shù)的有效地址將源操作數(shù)的有效地址EAEA送到目的操作數(shù)送到目的操作數(shù)( (指定寄存器指定寄存器) )【例【例4-214-21】LEA BXLEA BX,BP+SI BP+SI ;BP+SIBXBP+SIBX LEA DI LEA DI,TABLE TABLE ;取;取TABLE

29、TABLE的有效地址送入的有效地址送入DIDI注意注意本指令處理的是變量的地址(偏移量),不是變量的值本指令處理的是變量的地址(偏移量),不是變量的值。它等效于傳送有效地址的。它等效于傳送有效地址的MOVMOV指令,但指令,但MOVMOV指令必須在變指令必須在變量名前使用量名前使用OFFSETOFFSET操作符。操作符。LEA指令格式中,要求源操作數(shù)必須為內(nèi)存單元地址源操作數(shù)必須為內(nèi)存單元地址,目的操作數(shù)必須為一個(gè)16位的通用寄存器。6060LEA 指令與MOV 指令的區(qū)別:LEA SI,BUFF;執(zhí)行后:(執(zhí)行后:(SI)=0002HBUFF =0123454800FEFF段起始地址段起始地

30、址MOV SI,BUFF;執(zhí)行后:(執(zhí)行后:(SI)=0048HLEA SI,BUFF MOV SI,BUFF;將標(biāo)號(hào)將標(biāo)號(hào)BUFF的偏移地址送入寄存器中的偏移地址送入寄存器中;將標(biāo)號(hào)將標(biāo)號(hào)BUFF所指存儲(chǔ)單元的內(nèi)容送入所指存儲(chǔ)單元的內(nèi)容送入SI61612. 將地址指針裝到DS和指定寄存器指令LDSl 什么是地址指針?什么是地址指針?(段地址:偏移地址段地址:偏移地址)l 語(yǔ)句格式:語(yǔ)句格式:LDS OPDLDS OPD,OPSOPSl 功能:功能: 把把4個(gè)字節(jié)地址指針(包括一個(gè)段地址和一個(gè)偏個(gè)字節(jié)地址指針(包括一個(gè)段地址和一個(gè)偏移地址)從源操作數(shù)指定的移地址)從源操作數(shù)指定的4個(gè)存儲(chǔ)單元取

31、出,低地址的個(gè)存儲(chǔ)單元取出,低地址的兩字節(jié)送目的操作數(shù),高地址的兩字節(jié)送兩字節(jié)送目的操作數(shù),高地址的兩字節(jié)送DS段寄存器。段寄存器。OPS高 16 位 DS(隱含)低 16 位 DEST的REG (32位, 4字節(jié))6262l LDS或LES指令將源操作數(shù)指定的4個(gè)連續(xù)字節(jié)單元內(nèi)容分別送入指令指定的寄存器以及DS或ES中。l 其中:低16位送到一個(gè)指定的字寄存器,高16位送到DS或ES中57H13H68H24H例:(例:(DS)=C000H,(,(C2480H)=1357H,(,(C2482H)=2468HDS:2480HDS:2481HDS:2482HDS:2483H 13 57 SI 24

32、 68 DSLDS SI,24806363LDS、LES演示演示64643. 將地址指針裝到將地址指針裝到ES和指定寄存器指令和指定寄存器指令LESl LES指令與指令與LDS指令的操作基本相同指令的操作基本相同l 語(yǔ)句格式:語(yǔ)句格式:LES OPDLES OPD,OPSOPSl 區(qū)別:區(qū)別:將源操作數(shù)所指向地址指針中的段基址將源操作數(shù)所指向地址指針中的段基址(后兩個(gè)后兩個(gè)字節(jié)字節(jié))傳送到傳送到ES段寄存器,而不是段寄存器,而不是DS段寄存器。段寄存器。65653.2.3 標(biāo)志位傳送指令標(biāo)志位傳送指令1 1讀取標(biāo)志指令LAHF可完成標(biāo)志位傳送的指令共有可完成標(biāo)志位傳送的指令共有4條:條:2 2

33、設(shè)置標(biāo)志指令SAHF3 3標(biāo)志寄存器進(jìn)棧指令標(biāo)志寄存器進(jìn)棧指令PUSHF4 4標(biāo)志寄存器出棧指令POPFPOPF66661. 讀取標(biāo)志指令讀取標(biāo)志指令l 功能:將標(biāo)志寄存器的低:將標(biāo)志寄存器的低8 8位送入位送入AHAH寄存器。寄存器。l 即(即(FLAGSFLAGS)7-0AH7-0AH。讀取標(biāo)志指令讀取標(biāo)志指令LAHF被執(zhí)行時(shí),被執(zhí)行時(shí),將標(biāo)志寄存器中的低將標(biāo)志寄存器中的低8位傳送到位傳送到AH中。中。l 該指令的執(zhí)行對(duì)標(biāo)志位該指令的執(zhí)行對(duì)標(biāo)志位影響。影響。l 語(yǔ)句格式:LAHFLAHF67672. 設(shè)置標(biāo)志指令設(shè)置標(biāo)志指令SAHFl 功能:將功能:將AHAH的內(nèi)容送入標(biāo)志寄存器的低的內(nèi)容

34、送入標(biāo)志寄存器的低8 8位,高位,高8 8位不位不變。即變。即(AH) FLAGS7-0. .。l 設(shè)置標(biāo)志指令設(shè)置標(biāo)志指令SAHF被執(zhí)行后,標(biāo)志寄存器內(nèi)容改變,被執(zhí)行后,標(biāo)志寄存器內(nèi)容改變,該指令的執(zhí)行該指令的執(zhí)行會(huì)影響PSWl 語(yǔ)句格式:語(yǔ)句格式:SAHFSAHFl 從該指令功能可看出,從該指令功能可看出,SAHF為L(zhǎng)AHF的逆過(guò)程。68683. 對(duì)對(duì)PSW的壓入堆棧和彈出堆棧指令的壓入堆棧和彈出堆棧指令l PUSHF和和POPF指令一般用在子程序和中斷處理程序的指令一般用在子程序和中斷處理程序的首尾,起保存主程序標(biāo)志和恢復(fù)主程序標(biāo)志的作用。首尾,起保存主程序標(biāo)志和恢復(fù)主程序標(biāo)志的作用。l

35、 PUSHF指令將標(biāo)志寄存器的值壓入堆棧頂部,同時(shí),堆指令將標(biāo)志寄存器的值壓入堆棧頂部,同時(shí),堆棧指針棧指針SP的值減的值減2l POPF指令的功能正好相反,此指令在執(zhí)行時(shí)從堆棧中彈指令的功能正好相反,此指令在執(zhí)行時(shí)從堆棧中彈出一個(gè)字送到標(biāo)志寄存器中,同時(shí)堆棧指針出一個(gè)字送到標(biāo)志寄存器中,同時(shí)堆棧指針SP的值加的值加2。6969l 注:LAHF/SAHF指令是寄存器AH與標(biāo)志寄存器PSW的低字節(jié)之間完成的字節(jié)型數(shù)據(jù)傳送。PUSHF/POPF指令是標(biāo)志寄存器PSW與堆棧間進(jìn)行的字型數(shù)據(jù)傳送。指令SAHF/POPF將影響標(biāo)志位。70703.2.4 輸入輸入/輸出數(shù)據(jù)傳送指令輸出數(shù)據(jù)傳送指令CPU外

36、設(shè)外設(shè)I/OI/O1 1輸入指令輸入指令I(lǐng)NIN2 2輸出指令輸出指令OUTOUTl 直接尋址直接尋址IO指令(端口地址只能指令(端口地址只能 8 位,最多位,最多256個(gè))個(gè)) IN AL ,50H;OUT 44H , AL; IN AX ,80H;OUT 70H , AX; l 間接尋址間接尋址IO指令(端口地址是指令(端口地址是16 位,也可位,也可8 位。)位。) MOV DX,0FFF2H IN AL ,DX 71711輸入指令輸入指令I(lǐng)Nl 輸入指令用來(lái)從指定的外設(shè)寄存器取信息送入累加器。輸入指令用來(lái)從指定的外設(shè)寄存器取信息送入累加器。它有四種形式:它有四種形式:(1)語(yǔ)句格式:I

37、NAL,PORT 功能:(PORT)AL(2)語(yǔ)句格式:INAX,PORT 功能:(PORT)AX(3)語(yǔ)句格式:INAL,DX 功能:(DX)AL(4)語(yǔ)句格式:INAX,DX 功能:(DX)AL72722. 輸出指令 OUT(1)語(yǔ)句格式:OUT PORT,AL 功能:(AL) PORT(2)語(yǔ)句格式:OUT PORT,AX 功能:(AX) PORT(3)語(yǔ)句格式:OUT DX,AL 功能:(AL) DX(4)語(yǔ)句格式:OUT DX,AX 功能:(AX) DXl 輸出指令用來(lái)把累加器的內(nèi)容送往指定的外設(shè)存儲(chǔ)器,輸出指令用來(lái)把累加器的內(nèi)容送往指定的外設(shè)存儲(chǔ)器,它有四種形式:它有四種形式:73

38、73l間接間接OUTOUT指令(端口地址是指令(端口地址是16 16 位,也可位,也可8 8 位。)位。) MOV DX MOV DX,87FEH MOV DX 87FEH MOV DX ,80H80H MOV AL MOV AL ,40H OUT DX 40H OUT DX ,ALAL OUT DX OUT DX ,ALALl 間接間接ININ指令(端口地址是指令(端口地址是16 16 位,也可位,也可8 8 位。)位。) MOV DXMOV DX,0FFF2H0FFF2H IN AL IN AL ,DXDX 7474傳送類(lèi)指令小結(jié)傳送類(lèi)指令小結(jié)指令類(lèi)型指令格式指令功能狀態(tài)標(biāo)志位備注O S

39、Z A P C通用數(shù)據(jù)通用數(shù)據(jù)傳送傳送MOV 目標(biāo),源PUSH 源POP 目標(biāo)XCHG 目標(biāo),源XLAT傳送字節(jié)或字字壓入堆棧字彈出堆棧交換字節(jié)或字字節(jié)翻譯 . . . . . . 源:R、M、立即數(shù) 目標(biāo):R、M源:R、M目標(biāo):R(CS除外)、M源:通用R、M 目標(biāo):通用R、M目標(biāo)地址目標(biāo)地址傳送傳送LEA 目標(biāo),源LDS目標(biāo),源LES目標(biāo),源裝入有效地址裝入數(shù)據(jù)段指針到DS裝入附加段指針到ES 源:內(nèi)存操作數(shù) 目標(biāo):16位通用R源:內(nèi)存操作數(shù) 目標(biāo): 16位通用R源:內(nèi)存操作數(shù) 目標(biāo): 16位通用R標(biāo)志位傳標(biāo)志位傳送送LAHFSAHFPUSHFPOPF把FR低字節(jié)裝入AH把AH內(nèi)容裝入FR

40、低字節(jié)把FR內(nèi)容壓入堆棧從堆棧中彈出FR內(nèi)容 I/O數(shù)據(jù)傳數(shù)據(jù)傳送送IN 累加器,端口OUT 端口,累加器輸入字節(jié)或字輸出字節(jié)或字 累加器:AL或AX端口:地址0255或間接寄存器DX75753.3 數(shù)據(jù)操作類(lèi)指令數(shù)據(jù)操作類(lèi)指令數(shù)據(jù)操作類(lèi)指令包括以下幾種類(lèi)型的指令:數(shù)據(jù)操作類(lèi)指令包括以下幾種類(lèi)型的指令:l 3.3.1 算術(shù)運(yùn)算指令算術(shù)運(yùn)算指令加法指令加法指令減法指令減法指令乘法指令乘法指令除法指令除法指令BCD碼運(yùn)算(十進(jìn)制調(diào)整)指令碼運(yùn)算(十進(jìn)制調(diào)整)指令*l 3.3.2 邏輯運(yùn)算和移位指令邏輯運(yùn)算和移位指令邏輯運(yùn)算指令邏輯運(yùn)算指令移位指令移位指令循環(huán)移位指令循環(huán)移位指令76763.3.1

41、算術(shù)運(yùn)算指令算術(shù)運(yùn)算指令1. 加法指令加法指令l 不帶進(jìn)位的加法 ADD格式:格式: ADD DEST,SRC; DEST+SRC DESTl 帶進(jìn)位的加法 ADC格式:格式: ADC DEST,SRC; DEST+SRC+CF DESTl 加 1 指令 INC格式:格式: INC DEST; DEST+1 DEST (不影響(不影響CF)注:注:SRC:n,通用通用REG,M三種尋址方式三種尋址方式 DEST:通用通用REG,M兩種尋址方式兩種尋址方式 立即數(shù)不能做目的操作數(shù),立即數(shù)不能做目的操作數(shù),DEST,SRC不能同為存儲(chǔ)器尋址方式,不能同為存儲(chǔ)器尋址方式, 類(lèi)型要一致,段寄存器不能做

42、操作數(shù)。類(lèi)型要一致,段寄存器不能做操作數(shù)。 l說(shuō)明:這在三條指令運(yùn)算結(jié)果將影響狀態(tài)標(biāo)志位,但是INC指令不影響標(biāo)志CF。7777(1) 不帶進(jìn)位位的加法指令A(yù)DDADD用來(lái)執(zhí)行兩個(gè)字或兩個(gè)字節(jié)的相加操作,結(jié)果放在原用來(lái)執(zhí)行兩個(gè)字或兩個(gè)字節(jié)的相加操作,結(jié)果放在原來(lái)存放目的操作數(shù)的地方。來(lái)存放目的操作數(shù)的地方。ADDBX+DI,AXADDDI,SI例如:例如:ADDAL,50H7878(2) 帶進(jìn)位位的加法指令A(yù)DC指令被執(zhí)行時(shí),將進(jìn)位標(biāo)志指令被執(zhí)行時(shí),將進(jìn)位標(biāo)志CF的值加在和中。的值加在和中。例如:例如:ADCAX,SIADCDX,SI7979練習(xí)l 編寫(xiě)程序?qū)崿F(xiàn)兩個(gè)4字節(jié)的無(wú)符號(hào)數(shù)相加,這兩個(gè)

43、數(shù)分別存放在2000H和3000H開(kāi)始的存儲(chǔ)單元中,低位在前,高位在后,進(jìn)行加法運(yùn)算后得到的和放入2000H開(kāi)始的內(nèi)存單元中。 CLCMOVSI,2000HMOVAX,SIMOVDI,3000HADDAX,DIMOVSI,AXMOVAX,SI+2ADCAX,DI+2MOVSI+2,AX8080練習(xí)l 編寫(xiě)程序?qū)崿F(xiàn)兩個(gè)4字節(jié)的無(wú)符號(hào)數(shù)相加,這兩個(gè)數(shù)分別存放在2000H和3000H開(kāi)始的存儲(chǔ)單元中,低位在前,高位在后,進(jìn)行加法運(yùn)算后得到的和放入2000H開(kāi)始的內(nèi)存單元中。 CLCMOVSI,2000HMOVAX,SIMOVDI,3000HADDAX,DIMOVSI,AXMOVAX,SI+2ADCA

44、X,DI+2MOVSI+2,AX8181(3) 增量指令I(lǐng)NCn INC INC只有只有1 1個(gè)操作數(shù),指令在執(zhí)行時(shí),將操作數(shù)的內(nèi)容個(gè)操作數(shù),指令在執(zhí)行時(shí),將操作數(shù)的內(nèi)容加加1 1,再送回該操作數(shù)。,再送回該操作數(shù)。INCALINCCXINCBYTE PTRBX+DI+500在編程中要注意,在編程中要注意,INC指令不影響進(jìn)位標(biāo)志指令不影響進(jìn)位標(biāo)志CF的狀態(tài)。的狀態(tài)。n 一般用在循環(huán)程序中一般用在循環(huán)程序中修改指針修改指針和和循環(huán)次數(shù)循環(huán)次數(shù)。例如:例如:82822. 減法指令n 除除DECDEC不影響不影響CFCF外,其他都按一般規(guī)則影響狀態(tài)標(biāo)志位外,其他都按一般規(guī)則影響狀態(tài)標(biāo)志位 。l不帶

45、借位減法不帶借位減法 SUB SUB 格式:格式:SUB DESTSUB DEST,SRCSRC; DEST - SRC DESTDEST - SRC DESTl 帶借位減法帶借位減法SBBSBB 格式:格式:SBB DESTSBB DEST,SRCSRC; DEST - SRC - CF DESTDEST - SRC - CF DESTl 減減 1 1 指令指令DECDEC 格式:格式: DEC DEST DEC DEST ; DEST - 1 DESTDEST - 1 DESTl 比較指令比較指令 CMP CMP 格式:格式: CMP DESTCMP DEST,SRCSRC; DEST -

46、 SRCDEST - SRC(不回送結(jié)果)(不回送結(jié)果)l 取補(bǔ)指令取補(bǔ)指令NEGNEG 格式:格式: NEG DEST NEG DEST ; 0-DEST DEST 0-DEST DEST8383(1) 不帶借位的減法指令SUB SUBSUB完成兩個(gè)字節(jié)或兩個(gè)字的相減,結(jié)果存于目的地址,源完成兩個(gè)字節(jié)或兩個(gè)字的相減,結(jié)果存于目的地址,源地址內(nèi)容不變。地址內(nèi)容不變。例如:例如:SUBSUBBXBX,CXCXSUBSUBBP+2BP+2,CLCL SUBSUBALAL,2020SUBSUBWORD PTR WORD PTR DIDI,1000H1000H8484(2) 帶借位的減法指令SBBSB

47、BAX,2030HSBBWORD PTR DI+2,1000Hl SBB在執(zhí)行減法運(yùn)算時(shí),用被減數(shù)減去減數(shù),并減去低位字在執(zhí)行減法運(yùn)算時(shí),用被減數(shù)減去減數(shù),并減去低位字節(jié)相減時(shí)產(chǎn)生的借位。節(jié)相減時(shí)產(chǎn)生的借位。l SBB在形式上和功能上都和在形式上和功能上都和SUB指令類(lèi)似,只是指令類(lèi)似,只是SBB指令在指令在執(zhí)行減法運(yùn)算時(shí),還要減去執(zhí)行減法運(yùn)算時(shí),還要減去CF的值。的值。例如:例如:8585(3) 減量指令減量指令DECl DEC只有只有1個(gè)操作數(shù)。個(gè)操作數(shù)。l DECDEC指令是一個(gè)單操作數(shù)指令,操作數(shù)可以是寄存器或指令是一個(gè)單操作數(shù)指令,操作數(shù)可以是寄存器或存儲(chǔ)器操作數(shù)。存儲(chǔ)器操作數(shù)。l

48、減減1 1指令指令DECDEC也一般用于對(duì)計(jì)數(shù)器和地址指針的調(diào)整。也一般用于對(duì)計(jì)數(shù)器和地址指針的調(diào)整。DECAXDECBLDECBYTE PTR DI+2l 功能:將目的操作數(shù)減功能:將目的操作數(shù)減1 1,結(jié)果送目的地址。,結(jié)果送目的地址。 例如:例如:8686(4) 取補(bǔ)指令取補(bǔ)指令NEGl 功能:將目的操作數(shù)的每一位求反(包括符號(hào)位)后功能:將目的操作數(shù)的每一位求反(包括符號(hào)位)后加加1 1,結(jié)果送目的地址。,結(jié)果送目的地址。NEGALNEGCXl 因?yàn)閷?duì)一個(gè)操作數(shù)取補(bǔ)碼相當(dāng)于用因?yàn)閷?duì)一個(gè)操作數(shù)取補(bǔ)碼相當(dāng)于用0減去此操作數(shù),所減去此操作數(shù),所以以NEG指令執(zhí)行的也是減法操作。指令執(zhí)行的也是

49、減法操作。n例如:例如:8787CMPl 功能:執(zhí)行目的操作數(shù)減源操作數(shù),結(jié)果功能:執(zhí)行目的操作數(shù)減源操作數(shù),結(jié)果只影響標(biāo)志位,不送回相減的結(jié)果。CMPAX,2000HCMPAL,50H CMPAX,BX+DI+100CMPDX,DIl 一般情況,一般情況,CMP指令后面經(jīng)常會(huì)有一條條件轉(zhuǎn)移指令,指令后面經(jīng)常會(huì)有一條條件轉(zhuǎn)移指令,用來(lái)檢查標(biāo)志位的狀態(tài)是否滿足了某種關(guān)系。用來(lái)檢查標(biāo)志位的狀態(tài)是否滿足了某種關(guān)系。例如:例如:88883. 乘法指令MUL/IMULl 乘法運(yùn)算是乘法運(yùn)算是雙操作數(shù)運(yùn)算雙操作數(shù)運(yùn)算,但是,在指令中卻只指定,但是,在指令中卻只指定一個(gè)操作數(shù),另一個(gè)操作數(shù)是一個(gè)操作數(shù),另一

50、個(gè)操作數(shù)是隱含規(guī)定的。的。l 其中的操作數(shù)可以是寄存器操作數(shù)或存儲(chǔ)器操作數(shù),其中的操作數(shù)可以是寄存器操作數(shù)或存儲(chǔ)器操作數(shù),而隱含的為而隱含的為AL或或AX,乘積存放在AH:AL或DX:AX中。無(wú)符號(hào)數(shù)乘法 MUL SRC ;(;(AX) (AL)*(SRC)字節(jié)乘法)字節(jié)乘法 ;(;(DX,AX) (AX)*(SRC)字乘法)字乘法帶符號(hào)數(shù)乘法 IMUL SRC;操作同上;操作同上指令格式:指令格式:8989乘法運(yùn)算規(guī)則乘法運(yùn)算規(guī)則注意注意對(duì)于字節(jié)乘法,當(dāng)對(duì)于字節(jié)乘法,當(dāng)AHAH為為ALAL的符號(hào)擴(kuò)展時(shí),的符號(hào)擴(kuò)展時(shí),CF=OF=0,CF=OF=0,否則否則CF=OF=1CF=OF=1;對(duì)于字

51、乘法,當(dāng);對(duì)于字乘法,當(dāng)DXDX為為AXAX的符號(hào)擴(kuò)展時(shí),的符號(hào)擴(kuò)展時(shí),CF=OF=0CF=OF=0,否則,否則CF=OF=1CF=OF=1。9090乘法指令演示乘法指令演示9191乘法指令運(yùn)算結(jié)果只影響狀態(tài)標(biāo)志乘法指令運(yùn)算結(jié)果只影響狀態(tài)標(biāo)志CFCF、OFOF。注:注:SRCSRC只能是通用只能是通用REGREG或或M M尋址,不能是立即數(shù)。尋址,不能是立即數(shù)。只能是字節(jié)乘字節(jié)或字乘字只能是字節(jié)乘字節(jié)或字乘字存儲(chǔ)器尋址時(shí)加類(lèi)型說(shuō)明,如存儲(chǔ)器尋址時(shí)加類(lèi)型說(shuō)明,如 MUL BYTE PTR BXMUL BYTE PTR BX,MUL WORD PTR BXMUL WORD PTR BX92924.

52、 除法指令除法指令DIV指令格式:指令格式:DIV OPDIV OP指令功能:指令功能: 完成兩個(gè)不帶符號(hào)的二進(jìn)制數(shù)的除法運(yùn)算。完成兩個(gè)不帶符號(hào)的二進(jìn)制數(shù)的除法運(yùn)算。 指令中給出的操作數(shù)是除數(shù)指令中給出的操作數(shù)是除數(shù),它可以是,它可以是8 8位位/16/16位通位通 用寄存器及存儲(chǔ)器;用寄存器及存儲(chǔ)器;被除數(shù)隱含在被除數(shù)隱含在AXAX(字節(jié)除)或(字節(jié)除)或 DX DX、AXAX(字除法)中(字除法)中。操作過(guò)程:操作過(guò)程: 字節(jié)除法字節(jié)除法 AX/ OP AL AX/ OP AL AX MOD OPAH AX MOD OPAH 字除法字除法 (DXDX、AXAX)/OP AX/OP AX (

53、DXDX、AXAX)MOD OP MOD OP DXDX9393指令格式:指令格式: IDIV OP IDIV OP指令功能:指令功能: 完成兩個(gè)帶符號(hào)的二進(jìn)制數(shù)的除法運(yùn)算。商完成兩個(gè)帶符號(hào)的二進(jìn)制數(shù)的除法運(yùn)算。商 的符號(hào)根據(jù)代數(shù)規(guī)則確定,的符號(hào)根據(jù)代數(shù)規(guī)則確定,余數(shù)的符號(hào)與被余數(shù)的符號(hào)與被 除數(shù)相同除數(shù)相同( (余數(shù)始終往余數(shù)始終往0 0靠攏靠攏) )。操作數(shù)的規(guī)定。操作數(shù)的規(guī)定同同DIVDIV指令。指令。注意注意本指令在完成字節(jié)相除時(shí)最大的商為本指令在完成字節(jié)相除時(shí)最大的商為+127+127(7FH7FH),),最小的商為最小的商為-128-128(80H80H);在完成字相除時(shí)最大的商為

54、);在完成字相除時(shí)最大的商為+32767+32767(7FFFH7FFFH),最小的商為),最小的商為-32768-32768(8000H8000H)。若商)。若商超出此范圍,則將產(chǎn)生一個(gè)類(lèi)型超出此范圍,則將產(chǎn)生一個(gè)類(lèi)型0 0的中斷。的中斷。9494除法運(yùn)算規(guī)則除法運(yùn)算規(guī)則在除法運(yùn)算中,如果除數(shù)8位的,則要求被除數(shù)是16位的;如果除數(shù)是16位的,則要求被除數(shù)是32位的。帶符號(hào)數(shù)除法運(yùn)算中,當(dāng)被除數(shù)位數(shù)不夠時(shí),可進(jìn)行擴(kuò)展。9595除法指令演示除法指令演示9696(3)符號(hào)擴(kuò)展指令1 1)字節(jié)擴(kuò)展指)字節(jié)擴(kuò)展指令令2 2)字?jǐn)U展指令)字?jǐn)U展指令指令格式:指令格式: CBW CBW指令功能:指令功能

55、: 將將ALAL中的單字節(jié)數(shù)的符號(hào)擴(kuò)展到中的單字節(jié)數(shù)的符號(hào)擴(kuò)展到AHAH中。中。若若AL80HAL80H,則,則0AH0AH;若;若AL80HAL80H,則,則OFFH AHOFFH AH。指令格式:指令格式:CWDCWD指令功能:將指令功能:將AXAX中的數(shù)的符號(hào)擴(kuò)展到中的數(shù)的符號(hào)擴(kuò)展到DXDX中。若中。若AX8000HAX8000H, 則則0DX0DX;若;若AX8000HAX8000H,則,則OFFFFH DXOFFFFH DX。注意注意這兩條符號(hào)擴(kuò)展指令常常放在這兩條符號(hào)擴(kuò)展指令常常放在IDIVIDIV指令之前,對(duì)標(biāo)指令之前,對(duì)標(biāo)志位沒(méi)有影響。志位沒(méi)有影響。9797符號(hào)擴(kuò)展指令演示符號(hào)

56、擴(kuò)展指令演示98985. 十進(jìn)制運(yùn)算調(diào)整指令所謂未組合的十進(jìn)制數(shù)所謂未組合的十進(jìn)制數(shù),就是一個(gè)字節(jié)中只包含一位十進(jìn),就是一個(gè)字節(jié)中只包含一位十進(jìn)制數(shù),也即十進(jìn)制數(shù)字的制數(shù),也即十進(jìn)制數(shù)字的ASCIIASCII碼的高四位置為碼的高四位置為0 0以后所形以后所形成的數(shù)碼。成的數(shù)碼。當(dāng)兩個(gè)以當(dāng)兩個(gè)以ASCIIASCII碼表示的碼表示的BCDBCD數(shù)相加時(shí),也應(yīng)分兩步操作數(shù)相加時(shí),也應(yīng)分兩步操作: 先用先用ADDADD指令按二進(jìn)制規(guī)則進(jìn)行加法運(yùn)算;再用指令按二進(jìn)制規(guī)則進(jìn)行加法運(yùn)算;再用AAAAAA指令對(duì)指令對(duì)ALAL中內(nèi)容進(jìn)行修正。中內(nèi)容進(jìn)行修正。為什么要十進(jìn)制調(diào)整?為什么要十進(jìn)制調(diào)整? 兩個(gè)未組合的

57、十進(jìn)制數(shù)可以直接用ADD指令相加,但要得到正確的未組合的十進(jìn)制結(jié)果,必須在加法指令以后,緊接著用一條AAA指令來(lái)加以校正,于是在AX中就可以得到正確的結(jié)果。9999(1 1)非組合)非組合BCDBCD碼的加法調(diào)整指令碼的加法調(diào)整指令指令格式:指令格式: AAA AAA 指令功能:指令功能: 對(duì)對(duì)ALAL中的由兩個(gè)非組合中的由兩個(gè)非組合BCDBCD碼相加所得的結(jié)果碼相加所得的結(jié)果 進(jìn)行調(diào)整,并將調(diào)整后的結(jié)果存于進(jìn)行調(diào)整,并將調(diào)整后的結(jié)果存于AXAX中。中。操作過(guò)程:操作過(guò)程: 如果如果ALAL的低的低4 4位表示的數(shù)大于位表示的數(shù)大于9 9或者或者AF=1,AF=1,則則 將將ALAL加加6 6

58、,AHAH加加1,1,將將AFAF和和CFCF標(biāo)志置標(biāo)志置1 1,清除,清除ALAL的的 高四位;高四位;否則清除否則清除ALAL的高的高4 4位以及位以及AFAF和和CFCF標(biāo)志。標(biāo)志。 100100以上這兩條指令使用時(shí)必須緊跟在以上這兩條指令使用時(shí)必須緊跟在ADDADD或或ADCADC指令之指令之后。而且,這兩條指令只能對(duì)后。而且,這兩條指令只能對(duì)ALAL中的結(jié)果進(jìn)行調(diào)整中的結(jié)果進(jìn)行調(diào)整,因此對(duì)多字節(jié)的十進(jìn)制數(shù)運(yùn)算,只能從低字節(jié)開(kāi),因此對(duì)多字節(jié)的十進(jìn)制數(shù)運(yùn)算,只能從低字節(jié)開(kāi)始逐個(gè)字節(jié)的進(jìn)行運(yùn)算和調(diào)整。始逐個(gè)字節(jié)的進(jìn)行運(yùn)算和調(diào)整。101101lDAA指令會(huì)根據(jù)累加器指令會(huì)根據(jù)累加器AL中的中

59、間結(jié)果和中的中間結(jié)果和AF、CF標(biāo)志標(biāo)志位的狀態(tài)決定對(duì)累加器位的狀態(tài)決定對(duì)累加器AL的中間結(jié)果進(jìn)行修正,有的中間結(jié)果進(jìn)行修正,有4種修種修正情況,正情況, 即加即加00(不修正不修正)、06、60、 66(修正修正)。 102102 例:試求以下兩個(gè)試求以下兩個(gè)2位位BCD碼之和:碼之和:24H+53H; 28H+53H; 91H+85H; 45H+57H。1031033.3.2 邏輯運(yùn)算和移位指令邏輯運(yùn)算和移位指令 1. 邏輯運(yùn)算指令邏輯運(yùn)算指令n求反指令求反指令NOTNOTn邏輯乘指令邏輯乘指令A(yù)NDANDn測(cè)試指令測(cè)試指令TESTTESTn邏輯加指令邏輯加指令ORORn按位加指令按位加指

60、令XORXOR注:uAND,OR和XOR指令都是雙操作數(shù)指令,即可對(duì)指令都是雙操作數(shù)指令,即可對(duì)8位數(shù)操位數(shù)操作,也可對(duì)作,也可對(duì)16位數(shù)操作。位數(shù)操作。u當(dāng)有兩個(gè)操作數(shù)時(shí)當(dāng)有兩個(gè)操作數(shù)時(shí),不能同時(shí)都為存儲(chǔ)器操作數(shù)。不能同時(shí)都為存儲(chǔ)器操作數(shù)。u無(wú)論是目的操作數(shù)無(wú)論是目的操作數(shù),還是源操作數(shù)還是源操作數(shù),都不能是段寄存器。都不能是段寄存器。104104l AND指令主要用來(lái)屏蔽掉一個(gè)數(shù)中某些位,以便對(duì)剩下的主要用來(lái)屏蔽掉一個(gè)數(shù)中某些位,以便對(duì)剩下的其它位進(jìn)行某些處理。其它位進(jìn)行某些處理。l 對(duì)兩個(gè)操作數(shù)都是對(duì)兩個(gè)操作數(shù)都是1的位,目的操作數(shù)相對(duì)應(yīng)位就是的位,目的操作數(shù)相對(duì)應(yīng)位就是1,其,其它各種

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論