




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 第2章 指令系統(tǒng)與尋址方式 2.1 指令的基本格式指令的基本格式 本節(jié)主要介紹指令的格式以及與指令相關(guān)的基本概念。 下圖給出了計(jì)算機(jī)指令系統(tǒng)中每條指令的一般格式。其中OP表示操作碼,Di表示操作數(shù)。一個(gè)符號(hào)“”表示一個(gè)機(jī)器位或二進(jìn)制位。1. 指令系統(tǒng):計(jì)算機(jī)所能執(zhí)行的全部指令的集合(沒(méi)有的需編程實(shí)現(xiàn))。2. 等長(zhǎng)指令系統(tǒng)與不等長(zhǎng)指令系統(tǒng) 等長(zhǎng)指令系統(tǒng)指所有的指令定為相同的長(zhǎng)度,結(jié)構(gòu)簡(jiǎn)單,可簡(jiǎn)化譯碼。 不等長(zhǎng)指令系統(tǒng),在讀取可變長(zhǎng)指令時(shí),PC計(jì)數(shù)器在每次取指令后必根據(jù)指令的長(zhǎng)度進(jìn)行更新,速度慢,但這種指令格式可以構(gòu)成功能較強(qiáng)的指令。3. 操作碼的長(zhǎng)度:無(wú)論是 ,其操作碼的長(zhǎng)度都是可以固定長(zhǎng)度或
2、改變 長(zhǎng)度的。4. 字長(zhǎng):處理機(jī)的運(yùn)算器一次能夠完成的二進(jìn)制數(shù)運(yùn)算的位數(shù)。如果一臺(tái)計(jì)算機(jī)系統(tǒng)的指令字長(zhǎng)度與計(jì)算機(jī)的字長(zhǎng)相等,那么不僅可以簡(jiǎn)化機(jī)器的讀寫(xiě)操作,而且可以提高機(jī)器的運(yùn)算速度。固定長(zhǎng)指令可變長(zhǎng)指令匹配字長(zhǎng)簡(jiǎn)化讀寫(xiě),提高速度指令字長(zhǎng)度單字指令字長(zhǎng)指令字長(zhǎng)度一次訪存2指令字長(zhǎng)度倍字長(zhǎng)雙字長(zhǎng)指令二次訪存指令字長(zhǎng)度多倍字長(zhǎng)多字長(zhǎng)指令多次訪存(但這種方式可以提供足夠多的操作數(shù)地址形式,有助于增強(qiáng)指令的功能) 指令系統(tǒng)中的指令是指機(jī)器指令。由于機(jī)器指令與匯編語(yǔ)言的指令是一一對(duì)應(yīng)的,所以可以借助匯編語(yǔ)言的相應(yīng)環(huán)境了解計(jì)算機(jī)指令系統(tǒng)的初步知識(shí)。在Windows操作系統(tǒng)桌面,點(diǎn)擊“開(kāi)始”然后選擇“運(yùn)行”
3、,接下來(lái)按下述操作: cmd DEBUG.EXE 下圖是執(zhí)行DEBUG.EXE 命令后進(jìn)入?yún)R編編輯環(huán)境時(shí)的操作示意圖。 在匯編編輯環(huán)境下,常用的操作命令有:R:寄存器的查找、修改命令U:反匯編命令A(yù):輸入代碼命令D:顯示內(nèi)存命令E:修改內(nèi)存命令Q:退出DEBUG編輯環(huán)境的命令EXIT:退出Windows命令環(huán)境,轉(zhuǎn)入Windows桌面環(huán)境。2.2 尋址方式尋址方式2.2.1 基本概念術(shù)語(yǔ) 本節(jié)主要介紹與尋址方式有關(guān)的一些基本概念和術(shù)語(yǔ)。1.尋址方式:指令中用于說(shuō)明操作數(shù)所在物理地址的方法。2.邏輯地址:程序員編程時(shí)所使用的空間地址。3. 物理地址:程序在內(nèi)存的實(shí)際地址。4. 實(shí)存、主存、內(nèi)存:
4、程序執(zhí)行時(shí)所在的程序空間。(本章舉例圴以1MB內(nèi)存為例,B表示字節(jié),即byte之意)。5. 虛存、輔存、外存:程序長(zhǎng)期存儲(chǔ)的不依賴(lài)是否帶電而存在的空間。6. 程序裝入時(shí)的兩種定位技術(shù): 靜態(tài)再定位:程序裝入主存時(shí),用軟件的方法直接修改邏輯地址生成相應(yīng)的物理地址。 動(dòng)態(tài)再定位:只記住基地址a,不作任何修改便裝入主存,在具體執(zhí)行時(shí)判斷是加a或不加a。 下圖是不同用戶的程序在計(jì)算機(jī)內(nèi)存中的定位過(guò)程示意圖。不妨假設(shè)在上圖中的A道程序其大致的邏輯地址空間示意圖如下圖。 通過(guò)上圖與該圖觀察發(fā)現(xiàn),在上圖中的A用戶程序中的加法指令所表示的加地址g指令以及要轉(zhuǎn)移到地址s指令,改圖中加的不是g地址中內(nèi)容,轉(zhuǎn)移地址
5、也不是地址s,所以產(chǎn)生了錯(cuò)誤。因?yàn)檫壿嫷刂穏、s在程序被裝入內(nèi)存后已經(jīng)變成絕對(duì)物理地址a+g和a+s,但這一轉(zhuǎn)變并沒(méi)有在程序執(zhí)行過(guò)程中被很好地認(rèn)知到,所以產(chǎn)生錯(cuò)誤。 為了克服類(lèi)似的錯(cuò)誤現(xiàn)象,人們通過(guò)讓計(jì)算機(jī)記住每道程序在內(nèi)存的起始地址,例如基地址a和基地址b,并結(jié)合不同的尋址方式,對(duì)上述錯(cuò)誤現(xiàn)象進(jìn)行了有效的糾正。方法是: 這種通過(guò)加基址的方法就叫程序的靜態(tài)再定位技術(shù)。它雖然避免了程序?qū)ぶ愤^(guò)程中產(chǎn)生的地址錯(cuò)現(xiàn)象,但它也存在著一定的不足,如:由于自身的失誤可能會(huì)破壞其他程序的正常執(zhí)行;也妨礙了程序的可再入性;難以找到故障點(diǎn)。基于上述原因,后來(lái)又有了效率較高的動(dòng)態(tài)再定位技術(shù),如下圖所示。 2.2.2
6、 有效地址EA與段超越 存儲(chǔ)器的存儲(chǔ)單元的物理地址=段地址16+在該段的偏移地址(EA)。 段地址:要求從0號(hào)地址開(kāi)始,每16個(gè)字節(jié)為一個(gè)小段,每個(gè)小段的前4位十六進(jìn)制的地址是段地址。 以1M內(nèi)存、16位字長(zhǎng)的機(jī)器為例加以說(shuō)明。1MB內(nèi)存空間示意圖如下圖所示。 1MB=1024KB= 10241024B= 210210=220B 所以,應(yīng)該有20根地址總線。 例如如果一個(gè)地址空間有四根地址總線,那么它可以有多少個(gè)不同的地址空間?顯然共有16個(gè)不同的地址空間,即從0000,0001,0002,0003,0004,0005,一直到1111這16個(gè)不同的物理地址。 由于16個(gè)字節(jié)為一個(gè)小段,那么在1
7、M個(gè)字節(jié)的內(nèi)存空間中共有個(gè)小段,也說(shuō)明共有641024個(gè)不同的段地址。K642221621642020 為什么要分段?因?yàn)樽珠L(zhǎng)是16位的,且處理器內(nèi)部的寄存器等也都是16位的,那么指令也好,數(shù)據(jù)也好,或堆棧等,他們的地址都要通過(guò)這種分段技術(shù)加以尋址。所以,借助這樣的硬件條件,以某一地址為基準(zhǔn),向上或向下只能尋址各64KB的大小空間,這與系統(tǒng)本身具有的1MB空間的能力不相符合(1MB64KB16)。所以,為了尋址整個(gè)1MB的內(nèi)存空間,提出了地址分段技術(shù)。段地址的確定有個(gè)默認(rèn)約定:由有效地址規(guī)定的基地址寄存器來(lái)確定段寄存器。 BX,BP,SI,DI例如: BPSSDS其余當(dāng)然串處理指令有其特殊的規(guī)
8、定 通常存放段地址的寄存器有四個(gè):CS , DS, SS 和 ES 存放代碼,存放數(shù)據(jù),存放堆棧,存放串?dāng)?shù)據(jù) 當(dāng)然這種默認(rèn)可以被打破,這就是段超越。 例如: MOV AL, 2000 MOV AL, ES:2000 下表給出了段地址與段超越情況的默認(rèn)約定。 2.2.3 與數(shù)據(jù)有關(guān)的尋址方式 尋址方式所尋找的不僅可以是指令的地址也可以是操作數(shù)的地址。本節(jié)介紹與尋找操作數(shù)有關(guān)的尋址方式,稱(chēng)之為與數(shù)據(jù)有關(guān)的尋址方式。與數(shù)據(jù)有關(guān)的尋址方式可以分成七種,在介紹七種尋址方式之前,有必要先了解操作數(shù)的基本屬性。 如果操作數(shù)就在指令中,那么這樣的操作數(shù)可以稱(chēng)之為立即數(shù)操作數(shù)。如果操作數(shù)放在寄存器中,那么這樣的
9、操作數(shù)可以稱(chēng)之為寄存器操作數(shù)。如果操作數(shù)是在存儲(chǔ)器中的,那么這樣的操作數(shù)就叫存儲(chǔ)器操作數(shù)。由于存在三種不同屬性的操作數(shù),那么根據(jù)七種與數(shù)據(jù)有關(guān)的尋址方式的特點(diǎn),我們可以發(fā)現(xiàn)七種尋址方式中的前兩種尋址方式所尋找的操作數(shù)的屬性一個(gè)屬于立即數(shù)操作數(shù),一個(gè)屬于寄存器操作數(shù),其它的五種都屬于存儲(chǔ)器操作數(shù)。 1. 立即尋址: 這種尋址方式表示的操作數(shù)都是常數(shù),有8位或16位兩種,且只能用于源操作數(shù)的尋址方式中。 立即尋址的含義:當(dāng)指令取出后,指令所需要的操作數(shù)就同時(shí)得到了。例如: MOV AL, 23H MOV AX, 1234H MOV BL, count ;count是通過(guò)EQU等偽指令定義過(guò)的常量標(biāo)
10、識(shí)符 下圖是立即尋址示意圖。2.寄存器尋址: 操作數(shù)就存放在某個(gè)寄存器中,是哪個(gè)寄存器?則由指令指明。其尋址方式如下圖所示。例如: MOV AX, BX MOV BX, AX MOV AL, BH MOV AL, 23H MOV BL, 23 MOV AL, BL 3.直接尋址 這種尋址方式給出的是操作數(shù)所在內(nèi)存單元的有效地址,即EA。其尋址方式如下圖所示。例21: MOV AX, 2000H,指令執(zhí)行前,若DS=3000H,AX7835H,(32000H)50H,(32001H)30H 則物理地址=DS16+EA =3000H16+2000H =32000H 那么指令執(zhí)行后,AX3050H,
11、其余不發(fā)生變化。其邏輯操作形式如下圖所示。 例22 count1 DB 2 count2 DW 2 count2 EQU 2則: MOV BL, count1 不加方括號(hào)是立即尋址,加括號(hào)則直接尋址 MOV BX, count2 與上述相同 MOV BL, count3 立即尋址可以段超越: MOV AX, ES:2000H MOV AX, SS:2000H4.寄存器間接尋址: 操作數(shù)的有效地址在基址寄存器BX、BP中或變址寄存器SI、DI中。其尋址方式如下圖所示。物理地址=DS16+DISIBX=SS16+BP 例23: MOV AX, BX ;注意:沒(méi)方括號(hào)時(shí),尋址方式與運(yùn)算結(jié)果不一樣若執(zhí)
12、行指令前: DS=2000H,BX=1000H,物理地址=21000H AX=8040H (21000H)=A0H (21001H)=50H 執(zhí)行后: AX=50A0H, 其余不變例24 : MOV AX, CX MOV BX, AX 是否正確?錯(cuò)誤,因?yàn)檫@二個(gè)寄存器是不可以間接尋址的。 5.寄存器相對(duì)尋址也叫直接變址尋址。其尋址方式如下圖所示。816BXBPEASIDI位小偏移量位 其中8位或16位的小偏移量是補(bǔ)碼表示的有符號(hào)數(shù),當(dāng)為8位時(shí),與前面寄存器內(nèi)容而相加時(shí),要進(jìn)行符號(hào)擴(kuò)展,否則會(huì)出錯(cuò)。 81616BXDSSIDI位物理地址小偏移量位81616SSBP位小偏移量位例25: MOV A
13、X, countSI 或 MOV AX, SI+count 其中, count為符號(hào)地址??蛇M(jìn)行表格處理,表格的首地址可設(shè)為count,利用修改基地址或變址寄存器的內(nèi)容對(duì)表格的某些項(xiàng)逐一操作。假設(shè)在指令執(zhí)行前,DS=3000H,SI=2000H,count=8000H,AX=5678H,那么指令執(zhí)行結(jié)束后,AX=1234H,其余不變。其過(guò)程如下圖所示。 6. 基址變址尋址方式 有效地址來(lái)自于二個(gè)不同的寄存器,一個(gè)是基址寄存器,另一個(gè)是變址寄存器。基址寄存器是指:BX或BP,變址寄存器是指SI或DI。即: DISIBXEA或 DISIBPEA,其它組合錯(cuò)誤??梢哉f(shuō)有效地址EA由二部分構(gòu)成,一部分
14、是EA ,一部分是EA 。S 16SIDBXDI物理地址S 16SISBPDI物理地址其尋址方式如下圖所示。 7. 相對(duì)基址變址尋址: 在基址變址的基礎(chǔ)上加8位或16位小的偏移量。其中8位或16位小偏移量仍然是補(bǔ)碼表示的有符號(hào)數(shù),具有正、負(fù)性。 例: MOV AX, MASK BXSI MOV AX, MASK BX+SI MOV AX, MASK+BX+SI 這三條指令的源操作數(shù)的尋址方式都是相對(duì)基址變址尋址。其中符號(hào)MASK就是所提到的8位或16位小偏移量,如下圖所示。 有效地址是16位的,如果在相加過(guò)程中,超出了16所能承載的內(nèi)容,則自動(dòng)丟掉高位所產(chǎn)生的進(jìn)位。 例如,如果 BX=8000
15、H SI=7000H MASK=2500H 則 EA=8000H+7000H+2500H=1500H 思考:若MASK=D8H呢?所生成的有效地址是多少?應(yīng)該是EFD8H。2.2.4 與轉(zhuǎn)移指令的偏移地址有關(guān)的尋址方式 與轉(zhuǎn)移指令有關(guān)的尋址方式可以分成四類(lèi)。分別是段內(nèi)直接尋址、段內(nèi)間接尋址、段間直接尋址與段間間接尋址。1. 段內(nèi)直接尋址 一頁(yè)內(nèi)的跳轉(zhuǎn)在內(nèi)存中的指令格式如下圖(左)所示。其有效地址的生成過(guò)程如下圖(右)所示。例26: JMP short OUEST,其指令執(zhí)行過(guò)程中跳轉(zhuǎn)的方向示例如下圖。 X補(bǔ)=D8H =11011000B X=-00101000 =-(25+23) =-40 X
16、是負(fù)的,表明向回跳,即向小地址的方向跳。EA=IP當(dāng)+DISP的符號(hào)擴(kuò)展 =2198H+FFD8H =2170H -40=-28H 2198H=-40=2198H- 28H=2170H 如果是16位的近跳轉(zhuǎn),內(nèi)存指令示意圖及有效地址生成過(guò)程如下圖所示。 有效地址EA=IP當(dāng)+DISP16 近跳轉(zhuǎn)指令所跳轉(zhuǎn)的距離比短跳轉(zhuǎn)指令所實(shí)現(xiàn)的跳轉(zhuǎn)距離大。 例如下面這段程序表明,采用8位的跳轉(zhuǎn)指令,跳轉(zhuǎn)的相對(duì)距離是-128到+127之間的位移量。但如果把指令JMP SHORT改成JMP NEAR PTR,那么跳轉(zhuǎn)的相對(duì)距離為-32768到+32767之間。 但是如果跳轉(zhuǎn)距離超過(guò)64KB,那么就需用段間轉(zhuǎn)移指
17、令,我們這里講的段內(nèi)轉(zhuǎn)移指令無(wú)法實(shí)現(xiàn)超過(guò)64KB距離的跳轉(zhuǎn)。優(yōu)點(diǎn):這種尋址方式具有再定位的特點(diǎn)。即這段程序無(wú)論是放在偏移量是2000H還是4000H的位置都不會(huì)出錯(cuò),都能保證程序的正常執(zhí)行。 通常情況下:shortNEARPTR條件轉(zhuǎn)移指令:子程序調(diào)用:無(wú)條件轉(zhuǎn)移:上述條件均可 2. 段內(nèi)間接尋址:有效地址EA存儲(chǔ)在16位寄存器中或兩個(gè)連續(xù)的存儲(chǔ)單元中。例如 JMP BXBXPTRWORDJMPBXJMP其中WORD PTR可省略 先來(lái)觀察有效地址在16位的寄存器中的情況。假設(shè)指令執(zhí)行前:BX=2652H,IP=2100H,那么指令執(zhí)行后:BX=2652H,IP=2652H。再觀察有效地址在存
18、儲(chǔ)單元里存放的情況。 例6: JMP TABLEBX,假設(shè)指令執(zhí)行前,各個(gè)相應(yīng)的信息為: DS=3000H BX=2150H TABLE=2060H物理地址=DS16+TABLE+BX =341B0H (341B0H)=7AH (341B1H)=30H CS=4000H IP=2100H 那么指令執(zhí)行后,IP=307AH,其它均不變。其過(guò)程示意圖如右圖所示。 3. 段間直接尋址:在轉(zhuǎn)移指令中給出新指令的IP值和新指令的CS值。格式:JMP FAR PTR 符號(hào)地址;其中FAR PTR不可省略段間直接尋址是5字節(jié)指令,其在內(nèi)存的表現(xiàn)形式如下圖所示。 例7:JMP FAR PTR NEXTPOIN
19、T例7的指令執(zhí)行過(guò)程示意圖如圖下圖所示。4.段間間接尋址:用兩個(gè)相繼的字存儲(chǔ)單元(4個(gè)字節(jié))存放新的IP值和CS值。格式:JMP DWORD PTR BX ;BX只能采用存儲(chǔ)器操作數(shù)尋址方式 JMP DWORD PTR BX ;尋址方式錯(cuò)誤 例8:JMP DWORD PTR INTER+BX假設(shè)指令執(zhí)行前:DS=3000HBX=1200HINTER=0020H物理地址=DS16+1200H+0020H=31220H(31220H)=40H(31221H)=01H(31222H)=00H(31223H)=10H CS=0000H IP=1000H 那么根據(jù)指令功能,指令執(zhí)行后:CS=1000H;
20、IP=0140H。例8的指令執(zhí)行過(guò)程如下圖所示。 2.3 指令系統(tǒng)指令系統(tǒng) 計(jì)算機(jī)內(nèi)部的指令系統(tǒng)是指在計(jì)算機(jī)硬件的最底層可以支持高級(jí)語(yǔ)言實(shí)現(xiàn)的機(jī)器語(yǔ)言指令所組成的指令集。由于匯編語(yǔ)言的指令(不包括偽指令)與機(jī)器語(yǔ)言的指令存在著一一對(duì)應(yīng)的關(guān)系,為方便介紹,在此以匯編語(yǔ)言為例介紹機(jī)器的指令系統(tǒng)??梢园阎噶钕到y(tǒng)按功能分成七大類(lèi)。 2.3.1 數(shù)據(jù)傳送指令 由于指令系統(tǒng)的各指令在執(zhí)行過(guò)程中經(jīng)常會(huì)用到寄存器,所以在下圖中給出了8086/8088CPU內(nèi)部的可編程寄存器組的結(jié)構(gòu)圖,便于了解與掌握這些常用的寄存器。 1. 通用數(shù)據(jù)傳送指令(1)格式:MOV DST, SRC;B/W不影響標(biāo)志位,允許段超越
21、MOV指令的目的操作數(shù)與源操作數(shù)在尋址方式中的所有規(guī)定與約束條件在下圖中給出了形象的說(shuō)明。必須是字。必須是字。寄存器之間傳送要求必需等長(zhǎng)。要求二個(gè)操作數(shù)之間類(lèi)型應(yīng)相互匹配。8位16位可以。 16位8位不可以。內(nèi)存是2000H時(shí),具有二義性,但11221234BUFDBHBUFDWH沒(méi)有二義性。 MOV BX, 05; MOV word PTR BX, 05 MOV Byte PTR BX, 05 MOV BL, 05 MOV BYTE PTR BL, 05 MOV BX, 05H MOV BX, 0805H (2)堆棧操作類(lèi)指令 PUSH指令的執(zhí)行示意圖如下圖所示。 例210:PUSH 200
22、0H; PUSH 2000H; 但壓入的是DS:2000H上的字內(nèi)容,而非2000H例211:PUSH BETABXSI 且 DS=2000H BX=2100H SI=2520H BETA=F4H EA=BX+SI+BETA =2100H+2520H+0FFF4H =4614H(產(chǎn)生的進(jìn)位自動(dòng)丟掉) 則:物理地址=DS16+EA =20000H+4614H =24614H 根據(jù)具體的數(shù)值信息,例10的執(zhí)行過(guò)程與結(jié)果示意圖如下圖所示例212: POP CS POP CS:BXSI POP SP ;但很少這么做,原因如下圖所示。 下面的兩條指令都是正確的,但由于尋址方式不同,所以指令執(zhí)行后的結(jié)果也
23、是不同的。 (3)交換指令例213:XCHG AX,DS XCHG AX,BX XCHG AX,BX XCHG DX,BPSi 2.換碼指令格式:操作:例214:求數(shù)字0,1,29,A,BF中的任何一位十六進(jìn)制數(shù)所對(duì)應(yīng)的七段數(shù)碼管代碼。這里不防假設(shè)求字符A的七段數(shù)碼管的代碼是多少?設(shè)七段數(shù)碼管所采用的七個(gè)控制位分別用字母a到g表示,且存在于一個(gè)字節(jié)中,對(duì)應(yīng)于該字節(jié)的第0到第6位,由于第7位不用,所以定義該位恒為0,如下圖所示。 根據(jù)0亮1滅的原則,在內(nèi)存中存放的一位十六進(jìn)制的數(shù)0到F所對(duì)應(yīng)的數(shù)碼管編碼如下圖所示。 假設(shè)指令執(zhí)行前:AL=0AH,BX=0200H,DS=4000H,則指令XLAT
24、執(zhí)行后:AL=08H,而08H正是字母A所對(duì)應(yīng)的七段數(shù)碼編碼。為此,該條指令正確完成了十六進(jìn)制數(shù)“A”到它的七段數(shù)碼管編碼的轉(zhuǎn)換。 3. 地址傳送類(lèi)指令(1)操作:REGEASRC例215: LEA BX,VABLE LEA DS,VABLE LEA DX,BX LEA SP,BX MOV SP,BX LEA DS,BETABX;傳的是有效地址,若想傳地址中 的內(nèi)容應(yīng)采的指令是MOV DX,BETABX(2) 例217:LDS BX,ADDRSI假設(shè)指令執(zhí)行前:DS=2000H (21020H)=80H SI=1000H (21021H)=10H ADDR=0020H (21022H)=00H
25、 物理地址=21020H (21023H)=40H BX=6D50H 那么指令執(zhí)行前、后的內(nèi)存及各寄存器的狀態(tài)如下圖所示。 (3)例17:LES DI,BX4標(biāo)志寄存器傳送類(lèi)指令(1) 16位PSW狀態(tài)寄存器中各位含義如下圖所示,該條命令的含義是將PSW的低8位信息傳送給AH寄存器。(2)SAHF ;B (不影響條件碼)操作:PSW的低位字節(jié) AH 恢復(fù)S、Z、A、P、C的原來(lái)數(shù)值指令執(zhí)行前、后的內(nèi)存狀態(tài)示意圖如右圖所示。 (4)POPF ;W 影響全部條件碼2.3.2算術(shù)運(yùn)算類(lèi)指令1.加減運(yùn)算類(lèi)指令CFOF同一種數(shù)據(jù)類(lèi)型加減運(yùn)算指令規(guī)定,它們適用于有符號(hào)數(shù)和無(wú)符號(hào)數(shù)運(yùn)算,但要有兩個(gè)前提無(wú):用
26、不同的方法檢測(cè)溢出有:無(wú)符號(hào)數(shù)表示范圍如下: 8位:0255 00FFH 16位:065535 0000FFFFH有符號(hào)數(shù)表示范圍為: 8位:-128,-127-1,0,1,02H+127 80H,81H,F(xiàn)FH ,00,01H,02H,7FH 16位:-32768,-32767,-1,0,+1,+32767 8000H ,8001H,F(xiàn)FFFH,0,0001H ,7FFFH 例219:MOV AL,0FFH MOV BL,01H ADD AL,BL 它們的二進(jìn)制運(yùn)算過(guò)程:11111111+00000001100000000CF=1 OF=0把它們看成無(wú)符號(hào)數(shù):運(yùn)算結(jié)果出錯(cuò),所以,也代表結(jié)果有
27、溢出。有它們看成有符號(hào)數(shù):運(yùn)算結(jié)果正確,所以,也代表結(jié)果無(wú)溢出。如果是單操作數(shù),不允許是立即數(shù)和段寄存器。如果是雙操作數(shù),則其表現(xiàn)形式為:加、減運(yùn)算指令的總體規(guī)則:有符號(hào)數(shù)和無(wú)符號(hào)數(shù)都采用同一套加、減運(yùn)算指令。指令影響標(biāo)志位(但分ADD、ADC和CMP等的不同影響)。無(wú)符號(hào)數(shù)的溢出用CF=1進(jìn)行判斷,溢出并不算錯(cuò)。有符號(hào)數(shù)的溢出用OF=1進(jìn)行判斷,溢出算錯(cuò)。(1)加法指令 加法指令共有三條,分別是加法指令A(yù)DD、帶進(jìn)位的加法指令A(yù)DC和加1指令I(lǐng)NC。操作:DST(DST)+(SRC)例220:ADD WORD PTR BX, 9F76H 假設(shè)指令執(zhí)行前:DS=2000H BX=3000H (
28、23000H)=88H (23001H)=A9HA988H + 9F76H 148FEH23000H =FEH 23001H =48H則:指令執(zhí)行后:() ()CF=1OF=1SF=0PF=0AF=0ZF=0條件碼狀態(tài)如下:主要用于進(jìn)行多字節(jié)(多字)運(yùn)算例221:INC 0DH; X INC AL; INC DS;X INC BX; INC BYTE PTR BX+DI+2;,其中BYTE PTR不可省略 -22256 MOV AL 00HLABLEINCAL JC NEXT JMP LABLENEXT HLT例2:該段程序用于循環(huán)次,對(duì)否?,: :答:錯(cuò)誤,因?yàn)镮NC指令不影響CF標(biāo)志位,所
29、以,該段程序會(huì)產(chǎn)生死循環(huán)。(2) 減法指令 減法指令共有五條,分別是減法指令SUB、帶借位的減法指令SBB、減1指令DEC、求相反數(shù)指令NEG和比較指令CMP。例2-24:DEC AX DEC CL DEC WORD PTR SI NEG OPR;B/W,影響6個(gè)條件碼,其余規(guī)定同INC 特點(diǎn):只有對(duì)0求補(bǔ),CF=0,其余CF1。求補(bǔ)為變反+1,所以對(duì)-128和-32768求補(bǔ)后,其值不會(huì)發(fā)生變化。但此時(shí)OF的值為1了。 0- 128 =+128+127OF=1() OPR1OPR實(shí)質(zhì):求相反數(shù)可以通過(guò)將變反加 求的相反數(shù)。操作:(OPR1)(OPR2)關(guān)于比較指令需要注意:如果是無(wú)符號(hào)數(shù),只
30、要CF=0,OPR1OPR2 CF=1,OPR1 OPR2,如果是相等,再加上ZF=1的判斷就可以了。如果是有符號(hào)數(shù),只要:例227:OPR1=BFH=(-65) ,(OPR1)(OPR2)=-65(+85)=150 OPR2=55H=(+85) BFH55H 6AH 6AHOF=1SF=06AHOFSF=1ABBFH 55H由于兩個(gè)負(fù)數(shù)求和,結(jié)果為正數(shù)(),顯然,又因(是正數(shù)),所以,所以(有符號(hào)數(shù))。但做為無(wú)符號(hào)數(shù)時(shí),即。2乘、除指令1)乘法指令A(yù)H=00MUL CF=OF=10DX=0CFOF兩字節(jié)相乘的積,若,否則:兩個(gè)字相乘的積,若CF=OF=0IMULCF=OF=1如果乘積的高一半
31、是低一半的符號(hào)擴(kuò)展,則,否則例228:MUL BX; MUL 23H; MUL BX;例229:MUL BL 設(shè)AL=B4H, BL=11H例230:IMUL BL 設(shè)AL=B4H,BL=11H2)除法指令(對(duì)全部標(biāo)志位影響不定)DIV與IDIV指令的注意事項(xiàng):IDIV32 16-32768+327670OF=1 168-128+127對(duì)指令,當(dāng)商的范圍越界時(shí),即后的商時(shí),產(chǎn)生 號(hào)中斷,而非使?;蚝蟮纳虒?duì)有符號(hào)數(shù)相除,被除數(shù)或除數(shù)為負(fù)時(shí),先將它們求補(bǔ),變成無(wú)符號(hào)數(shù),再除。 商的符號(hào)取決于被除數(shù)和除數(shù)二者。再根據(jù)結(jié)果的正負(fù)性情況決定是否再求補(bǔ)。AH0OF=1 DX而對(duì)于無(wú)符號(hào)數(shù),字節(jié)運(yùn)算時(shí),除之
32、前,一定小于除數(shù)否則產(chǎn)生 號(hào)中斷,而非。字運(yùn)算時(shí),除之前,一定小于除數(shù)該指令的二進(jìn)制相除的過(guò)程為:例232:若AX=0400H,BL=B4H,求IDIV BL?解:根據(jù)運(yùn)算規(guī)則,先將為負(fù)數(shù)的BL求補(bǔ),|BL|=4CH。由于AX本身為正,所以可以將這兩者進(jìn)行二進(jìn)制運(yùn)算,過(guò)程如下: 然后再考慮是否需要為商及余數(shù)繼續(xù)求補(bǔ)。因?yàn)楸怀龜?shù)為正、除數(shù)為負(fù),所以商為負(fù),故需對(duì)絕對(duì)值商|AL|AL|=0DHAL=F3H求補(bǔ),求補(bǔ)后得因?yàn)橛鄶?shù)的符號(hào)同被除數(shù),所以余數(shù)AH=(100100)2=24H。3十進(jìn)制調(diào)整指令BCD49587dBCD9587H48421BCD84BCD410010101ASCII9587d1
33、000400110111XXXXXXXXXXXXXXXX壓縮碼:用 位二進(jìn)制數(shù)表示一位十進(jìn)制數(shù)。 的壓縮碼為。低 位為碼非壓縮碼:用 位二進(jìn)制數(shù)表示一位十進(jìn)制數(shù),高 位無(wú)意義碼:位二進(jìn)制表示一位十進(jìn)制數(shù)也等同于數(shù)字的碼高 位都是 調(diào)整的原理和思想:十進(jìn)制的調(diào)整指令會(huì)根據(jù)CF(多字節(jié))或AF的值,以及4位二進(jìn)制數(shù)碼是否大于9來(lái)決定是滯加6調(diào)整。舉例說(shuō)明:8+7=15舉例說(shuō)明:9+9=181)壓縮的BCD碼調(diào)整指令(1)加法的十進(jìn)制調(diào)整 格式:DAA ;B,除OF外,其他5個(gè)受影響,前提是先執(zhí)行ADD或ADC,和放在AL中。調(diào)整方法:a.如AF=1,或AL中低4位是16進(jìn)制AF,則AL的內(nèi)容加06
34、H,置AF=1。b.如果CF=1,或AL高4位是16進(jìn)制AF,則AL中內(nèi)容加60H,置CF=1。被調(diào)整的8位二進(jìn)制數(shù)是通過(guò)一條DAA指令一次性調(diào)整的,而不是用一次DAA只調(diào)整4位。(2)減法調(diào)整指令 格式:DAS;B 除OF外,影響其余5個(gè)條件碼,前提是用SUB或SBB指令,差放在AL中。調(diào)整方法:a.如AF=1,或AL中低位4位是一個(gè)十六進(jìn)制AF,則AL中內(nèi)容減06H,置AF=1。b.如CF=1,或AL中高位4位是一個(gè)十六進(jìn)制AF,則AL中內(nèi)容減60H,置CF=1。 2)非壓縮的BCD碼的調(diào)整指令(1)加法ASCII碼調(diào)整指令 格式:AAA;B,只影響CF,OF,前提同DAA指令。例234:
35、已知AX=0535H,BL=39H,求下列兩條指令執(zhí)行結(jié)束后,AX中的值是多少?ADD AL,BL;AAA;分析:ADD指令執(zhí)行完后,AX=056EH,執(zhí)行完AAA指令后,AX=0604H,順利完成了兩個(gè)十進(jìn)制數(shù)55與9的求和運(yùn)算。 (2)減法的ASCII碼調(diào)整指令格式:AAS;B,只影響CF、OF,前提同DAS。2.3.3 邏輯運(yùn)算和移位指令 邏輯運(yùn)算指令是按位進(jìn)行的,可以是8位或16位的數(shù)據(jù),操作數(shù)時(shí)不能用段寄存器和立即數(shù)。1邏輯運(yùn)算指令MOVAX0SUBAXAXANDAX0XORAXAX,將累加器清零的四種方法:, 例235:實(shí)現(xiàn)AL中的最低位如果為1,則轉(zhuǎn)移到LABLE處。 TEST
36、AL,01H JNZ LABEL LABEL:2移位指令1)非循環(huán)移位 2)循環(huán)移位循環(huán)移位指令共有四條,它們都只影響CF、OF標(biāo)志位。 2.3.4 串操作指令1與REP前綴相配合工作的MOVS,STDS,LODS指令1MOVSDSTSRCB/WMOVSBMOVSW( ),;例237: 執(zhí)行串操作命令的幾個(gè)前提:DS、ES置好初值SI、DI置好初值CX存放好循環(huán)次數(shù)置好方向標(biāo)志DF但REP前綴指令在使用過(guò)程中有其局限性,它只能照搬照套,不方便在執(zhí)行過(guò)程中進(jìn)行相應(yīng)的種類(lèi)修改或改變等操作。 2與REPZ/REPE和REPNZ/REPNE聯(lián)合工作的CMPS和SCAS指令(1)串比較指令,影響6個(gè)條件
37、碼CMPS SRCDSTB/WSI -DISI 1DI 1CMPSBSI -DISI+2DI2CMPSW,;() (), ,只做差值計(jì)算,不保留結(jié)果() (),(2)串掃描指令,影響6個(gè)條件碼SCASDSTB/WAL -DIDI 1SCASBAX -DIDI2SCASW;()(),只做差值計(jì)算,不保留結(jié)果()(),步驟同上,只將ZF=0改成ZF=1就可以了。注意指令執(zhí)行完后指針的變化。例239:(詳見(jiàn)P64)REPE CMPSB 假設(shè)CX=10 例240:要從一串字符中找一指定字符,可以將要尋找字符的ASCII碼存于AL中,然后采用 下述指令序列即可。 MOV DI,0100H MOV AL,20H MOV CX,10H;串長(zhǎng)度 CLD REPNZ SCASB 2.3.5 輸入輸出類(lèi)指類(lèi)(該類(lèi)指令均不影響條件碼)1直接的輸入、輸出類(lèi)指令1)直接的輸入指令2)直接的輸出指令2間接的輸入、輸出類(lèi)指令1)間接輸入指令 IN AL,DX;B, AL(DX) 2)間接輸出指令OUT DX,AL;B (DX)ALOUT DX,AX;W (DX+1)(DX)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 公租房合租合同范例
- 鄉(xiāng)村道路維修合同范例
- 關(guān)于廠建合同范本
- 公司快遞貨運(yùn)合同范例
- 信息交換商鋪合同范例
- 再生石子購(gòu)銷(xiāo)合同范例
- 農(nóng)村老屋修繕合同范例
- 五金工具定采購(gòu)合同范例
- 會(huì)員售后合同范例
- 公司管理股合同范例
- 2025年青海省建筑安全員B證考試題庫(kù)
- 制種玉米種子質(zhì)量控制培訓(xùn)
- 竣工結(jié)算審計(jì)服務(wù)投標(biāo)方案(2024修訂版)(技術(shù)方案)
- 《森林資源資產(chǎn)評(píng)估》課件-森林資源經(jīng)營(yíng)
- 管道機(jī)器人研究綜述
- 《媒介社會(huì)學(xué)》課件
- 2024年考研政治真題及答案
- 2024年中國(guó)高軟化點(diǎn)瀝青市場(chǎng)調(diào)查研究報(bào)告
- 成人手術(shù)后疼痛評(píng)估與護(hù)理團(tuán)體標(biāo)準(zhǔn)
- 【數(shù)學(xué)】一元一次方程的應(yīng)用第2課時(shí)盈不足問(wèn)題課件-2024-2025學(xué)年北師大版數(shù)學(xué)七年級(jí)上冊(cè)
- 不說(shuō)臟話課件
評(píng)論
0/150
提交評(píng)論