版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1第3章80×86微處理器指令系統(tǒng)
張向東計(jì)算機(jī)科學(xué)與技術(shù)系2例:1000100011011000就是一條2字節(jié)的機(jī)器指令,指示計(jì)算機(jī)執(zhí)行:“把寄存器BL內(nèi)容復(fù)制到寄存器AL之中”
的操作。表示為:ALBL。3.1概述3.1.1指令(Instruction):
指令通常以二進(jìn)制代碼的形式提供給計(jì)算機(jī),這種指令稱為機(jī)器指令。指示計(jì)算機(jī)執(zhí)行什么操作的命令。33.1.3程序(Program):
完成某個(gè)特定任務(wù)而編制的一系列指令的有序集合。程序的執(zhí)行一般是按指令的先后次序一條一條執(zhí)行,但遇到轉(zhuǎn)移類指令時(shí)則可能改變指令的執(zhí)行次序。3.1.2指令系統(tǒng)(InstructionSystem):
計(jì)算機(jī)所能執(zhí)行的全部指令。43.1.4指令包含的基本內(nèi)容1.做什么操作由指令的操作碼字段規(guī)定。2.操作數(shù)的來源操作數(shù)來自于什么地方。由指令的操作數(shù)字段規(guī)定。5操作數(shù)的來源可以是:
①CPU內(nèi)的某個(gè)寄存器;②存儲(chǔ)器內(nèi)的某一個(gè)或幾個(gè)單元;③I/O端口;④立即數(shù)。63.操作結(jié)果的去向操作的結(jié)果將存放在何處。4.下一條指令的位置指示下一條指令是順序執(zhí)行還是轉(zhuǎn)移執(zhí)行。73.2指令的表示方法1.二進(jìn)制代碼表示—機(jī)器語言指令2.助記符表示—匯編語言指令例:1000100011011000例:MOVBL,ALMOV表示“傳送”助記符,BL(寄存器)表示結(jié)果存放的位置,AL(寄存器)表示數(shù)據(jù)的來源。8助記符表示的指令便于書寫、理解和記憶,但最終必須將助記符指令“翻譯”成機(jī)器指令才能被識(shí)別和執(zhí)行。這個(gè)過程叫“匯編”。助記符指令機(jī)器指令匯編9
3.38086CPU的尋址方式地址:數(shù)據(jù)和指令存放的位置。數(shù)據(jù)存放的位置可以是寄存器、存儲(chǔ)器或I/O端口,指令存放的位置只能是存儲(chǔ)器中的代碼段。尋址方式:尋找指令地址和操作數(shù)地址的方式。尋址過程:形成指令地址和操作數(shù)地址的過程。10結(jié)果AHAL1.固定尋址(隱含尋址)操作數(shù)在某個(gè)固定的寄存器中。這個(gè)固定的寄存器大多為AL或AX。例:AAA操作:對固定寄存器AL中的內(nèi)容進(jìn)行十進(jìn)制調(diào)整,結(jié)果仍在AL中。(可能影響AH的內(nèi)容)十進(jìn)制調(diào)整影響+1送回112.立即數(shù)尋址操作數(shù)作為立即數(shù)就在指令中給出。例:MOVAX,1234H操作:把立即數(shù)1234H送寄存器AX中。機(jī)器碼:B83412(低字節(jié)在地址小的單元)12AHALAX...B83412...5678代碼段
(存儲(chǔ)器中)操作碼(B8)操作數(shù)(1234H)
立即數(shù)一條指令指令執(zhí)行后,AX=1234H(原有的內(nèi)容被新的內(nèi)容替換)。1234MOVAX,1234H133.寄存器尋址操作數(shù)在某個(gè)寄存器中。例:INCBL操作:使BL中內(nèi)容加1后送回+1BL00若BL=00H,則執(zhí)行后BL=01HBL=FFH,則執(zhí)行后BL=00H(自動(dòng)溢出)01144.存儲(chǔ)器尋址操作數(shù)在存儲(chǔ)器中的一個(gè)或幾個(gè)單元中。在這種尋址方式下,要找到該操作數(shù),關(guān)鍵是必須找到該操作數(shù)所在單元的地址。由于8086采用存儲(chǔ)器段組織結(jié)構(gòu),內(nèi)存單元的地址由段起始地址
(基地址)和該單元與段起始地址之間的距離
(以字節(jié)數(shù)計(jì))兩部分共同決定。15段起始地址(基地址):某個(gè)段寄存器的內(nèi)容(又稱段基值)乘以16得到。段內(nèi)偏移量:該單元與段起始地址之間的距離(字節(jié)數(shù))
。又稱有效地址EA。有效地址EA待尋址的內(nèi)存單元(CS,DS,ES,SS)16
段基地址物理地址
=段基值16+EA
內(nèi)存單元物理地址168086規(guī)定,在執(zhí)行某種操作時(shí),采用的段寄存器有一個(gè)預(yù)先的約定。故指令中一般只需給出有關(guān)EA的信息,則CPU將能夠根據(jù)該次操作自動(dòng)選用段寄存器,并與EA一起形成物理地址。存儲(chǔ)器尋址的實(shí)質(zhì)就是如何形成有效地址EA。17(1)直接尋址方式指令中以偏移量方式直接給出操作數(shù)的有效地址。即EA=指令中給出的偏移量18例:MOVAX,[1234H]機(jī)器碼:A13412操作:把偏移量1234H作為EA,在數(shù)據(jù)段中找到相應(yīng)的字單元,再將字單元的內(nèi)容送AX。19本例執(zhí)行完后,AX=3050HEA=1234H設(shè)DS=3000H31234H
1234H
+
EA=1234H31234H56783050DS16=30000H30000H=3000H×16...A13412......5030...指令代碼段數(shù)據(jù)段AHALAXMOVAX,[1234H
]20①直接尋址的操作過程與立即尋址不同。為表示它們的區(qū)別,直接尋址的偏移量用一對“[]”表示。立即尋址:MOVAX,1234H直接尋址:MOVAX,[1234H]②段基值乘以16,相當(dāng)于段基值(二進(jìn)制表示)左移4位,或段基值(十六進(jìn)制表示)在末尾添一個(gè)0H。注:⑵寄存器間接尋址操作數(shù)有效地址EA直接從基址寄存器(BX或BP)或變址寄存器(SI或DI)中獲得。寄存器間接尋址就是事先將偏移量存放在某個(gè)寄存器(BX、BP、SI或DI)中,這些寄存器就如同一個(gè)地址指針。在程序運(yùn)行期間,只要對寄存器內(nèi)容進(jìn)行修改,就可以實(shí)現(xiàn)用同一條指令實(shí)現(xiàn)對不同存儲(chǔ)單元進(jìn)行操作。操作碼操作數(shù)ORORORBXDIBPSIEA操作數(shù)…...…...內(nèi)存段寄存器22(3)間接尋址方式以間接的方式得到有效地址EA,有幾個(gè)專用的寄存器可用于間接尋址:BX,BP,SI,DI。①基址尋址方式以BX作為基址尋址寄存器,操作數(shù)在數(shù)據(jù)段中。以BP作為基址尋址寄存器,操作數(shù)在堆棧段中。EA=BX或BP的內(nèi)容+8位或16位位移量23例:MOVAX,[BX]機(jī)器碼:8B04操作:以BX的內(nèi)容作為有效地址EA,在數(shù)據(jù)段中找到對應(yīng)的字單元,再將該字單元的內(nèi)容送AX中。EA=BX(位移量為0)24設(shè)DS=2000H,BX=1000H本例執(zhí)行后
AX=50A0HDS=2000HDS1620000H
EA=BX(=1000H)21000H
50
A0
8B......04A050代碼段數(shù)據(jù)段AX
AH
AL
這種尋址方式的優(yōu)點(diǎn)就在于可以隨時(shí)修改BX寄存器的內(nèi)容,而指向不同的存儲(chǔ)單元。故BX又稱為基址指針寄存器。25例:MOVAL,DATA[BP]
這里DATA是以符號表示的位移量。EA=BP+位移量DATA操作:以EA作為有效地址,在堆棧段中去尋址字節(jié)單元,再將該字節(jié)單元內(nèi)容送AL。26②變址尋址方式
以SI,DI寄存器作為間接尋址寄存器,操作數(shù)在數(shù)據(jù)段中。EA=SI或DI內(nèi)容+8位或16位位移量
例:ADDAX,[SI]EA=SI操作:以EA作為有效地址,在數(shù)據(jù)段中找到某個(gè)操作數(shù),再將該操作數(shù)與AX的內(nèi)容相加,結(jié)果存放在AX中。27③基址變址尋址方式既有基址寄存器(BX或BP),又有變址寄存器參與(SI或DI)尋址,操作數(shù)在基址寄存器所規(guī)定的段中。EA=BX或BP+SI或DI+8位或16位位移量基址尋址和變址尋址操作數(shù)的有效地址EA等于基地址分量或變址分量加上指令中給出的位移量。
指令中使用BX或BP時(shí)為基址尋址。指令中使用SI或DI時(shí)為變址尋址。操作碼尋址特征位移量ORORORBXDIBPSI段寄存器操作數(shù)…...…...內(nèi)存EAEA=基址+變址+位移量例:MOVAX,10H[SI]MOVTABLE[DI],AL注意:當(dāng)位移量為常數(shù)時(shí),不能加方括號。這兩種尋址方式只需通過改變寄存器的內(nèi)容就可用一條指令訪問不同的存儲(chǔ)單元,并且由于增加了一個(gè)位移量分量,因此它們能夠很方便地訪問數(shù)組和表格數(shù)據(jù)。由于這兩種尋址方式中寄存器中的內(nèi)容是相對于由位移量指定的初始單元。因此也叫寄存器相對尋址。段寄存器的隱含使用規(guī)則與寄存器間接尋址方式相同=>MOVAX,DS:10H[SI]=>MOVDS:TABLE[DI],AL30例:MOVAX,0260H[BX][SI]EA=BX+SI+0260H,操作數(shù)在數(shù)據(jù)段中MOVAX,INF[BP+DI]EA=BP+DI+位移量INF,操作數(shù)在堆棧段中*
以上兩種基址+變址的格式都是合法的。例如:MOVCX,100H[BX][DI]MOVTABLE[BX][DI],AX下面的用法是錯(cuò)誤的。MOVAX,ARRAY[BX][BP]MOVAX,TABLE[SI][DI]在基址變址尋址方式中,程序運(yùn)行期間有兩個(gè)地址分量可以修改。因此它是最靈活的一種尋址方式,可以方便地對二維數(shù)組進(jìn)行訪問。32基址變址尋址
基址變址尋址(BasedIndexAddressing)中的操作數(shù)的有效地址是一個(gè)基址寄存器(如BX、BP)和一個(gè)變址寄存器(如SI、DI)的內(nèi)容之和,兩個(gè)寄存器均由指令指出。操作數(shù)的段地址分配和前面所述相同,即使用默認(rèn)段基址或使用段超越前綴來指定段基址。
MOVAX,[BX][DI]
或MOVAX,[BX+DI]
設(shè)DS=2000HDI=1000HBX=8000H,則該指令表示將物理地址=20000H+8000H+1000H=29000H為首地址的一個(gè)字的內(nèi)容送AX中。
例33相對基址變址尋址
相對基址變址尋址(RelativeBasedIndexedAddressing)中操作數(shù)的有效地址是一個(gè)基址寄存器和一個(gè)變址寄存器的內(nèi)容和8位或16位位移量這三者之和。同樣地,當(dāng)使用基址寄存器BX時(shí),缺省的段寄存器是DS;當(dāng)使用基址寄存器BP時(shí),缺省的段寄存器是SS。
34(3)串操作指令尋址這類指令規(guī)定:源串操作數(shù)在數(shù)據(jù)段,且有效地址EA=SI目的串操作數(shù)在附加段,且有效地址EA=DI指令執(zhí)行后,自動(dòng)修改SI,DI的值,使之指向新的單元。358086的段約定8086在執(zhí)行某種操作時(shí),預(yù)先規(guī)定了采用的段寄存器和段,即有基本的段約定。如果要改變默認(rèn)的段約定,則需要在指令中明確指出來。368086/8088的段約定存儲(chǔ)器存取方式基本段約定允許修改的段偏移地址取指令堆棧操作源串目的串用BP作基址寄存器通用數(shù)據(jù)讀寫CSSSDSESSSDS無無ES,CS,SS無CS,DS,ESCS,ES,SSIPSPSIDIEAEA375.I/O端口尋址方式
(1)直接端口尋址操作數(shù)在某個(gè)8位或16位端口中。端口地址可以置于DX中,但不能置于其它寄存器中。端口的輸入、輸出數(shù)據(jù)只能置于累加器
AL或AX中。注:38②端口輸出OUTport,AL①端口輸入INAL,portport=端口地址
(8位,0~255)例:INAL,80H操作:從端口地址為80H的端口輸入一字節(jié)送AL。39(2)間接端口尋址可以把端口地址送入DX,然后進(jìn)行端口尋址:輸入:
INAL,DX輸出:
OUTDX,AL40注:①
若用AX代替AL,則表示16位數(shù)據(jù)的端口。②
端口地址大于255時(shí),必須將端口地址送入DX,即采用間接尋址端口方式。416.轉(zhuǎn)移類指令的尋址方式前面所述的各種尋址方式實(shí)際上是數(shù)據(jù)尋址方式,關(guān)鍵是如何找到操作數(shù)。轉(zhuǎn)移類指令尋址方式屬于程序存儲(chǔ)器尋址,關(guān)鍵是要找到下一條待執(zhí)行指令的地址。42尋址方式小結(jié):固定尋址:操作數(shù)固定在某個(gè)寄存器中寄存器尋址:操作數(shù)在某個(gè)寄存器中立即數(shù)尋址:操作數(shù)就是操作碼后跟的立即數(shù)存儲(chǔ)器操作數(shù)尋址方式中地址形成小結(jié)直接尋址寄存器間接尋址基址變址尋址基址(變址)尋址SIDIBXBP位移量BXBPSIDIEA20位物理地址ESCSDSSS×16EUBIU44(1)轉(zhuǎn)移范圍段內(nèi)轉(zhuǎn)移:轉(zhuǎn)移范圍在同一個(gè)段以內(nèi)段間轉(zhuǎn)移:從一個(gè)代碼段轉(zhuǎn)移至另一個(gè)代碼段(2)轉(zhuǎn)移條件無條件轉(zhuǎn)移有條件轉(zhuǎn)移
(轉(zhuǎn)移范圍僅為–128-+127)(3)轉(zhuǎn)移方式直接轉(zhuǎn)移
(轉(zhuǎn)移目標(biāo)直接在指令中給出)間接轉(zhuǎn)移
(轉(zhuǎn)移目標(biāo)預(yù)先放入某個(gè)寄存器或存儲(chǔ)器中)45存儲(chǔ)器尋址直接尋址間接尋址串操作尋址基址尋址變址尋址基址+變址尋址I/O端口尋址直接端口尋址間接端口尋址轉(zhuǎn)移類指令尋址46課堂練習(xí)與思考:1.請指出下列每條指令源操作數(shù)的尋址方式。(1)MOVAX,BX(2)MOVCH,3AH(3)MOVBX,[2000H](4)MOVDX,[BX](5)MOVCX,[BP+2](6)MOVAX,3[BX][DI](7)MOVAL,ES:[SI](8)MOVBX,DS:[BP];寄存器尋址,操作數(shù)在BX中;立即數(shù)尋址,操作數(shù)為3AH;直接尋址,EA=2000H,數(shù)在數(shù)據(jù)段;間接尋址,EA=BX,數(shù)在數(shù)據(jù)段;基址尋址,EA=BP+2,數(shù)在堆棧段;相對基址變址尋址,EA=BX+DI+3,數(shù)在數(shù)據(jù)段;含段超越的變址尋址,EA=SI,數(shù)在附加段;含段超越的基址尋址,EA=BP,數(shù)在數(shù)據(jù)段47課堂練習(xí)與思考:2.設(shè)BX=0123HDI=1000HDS=3200H,默認(rèn)DS作為操作數(shù)對應(yīng)的段寄存器(假定沒使用段前綴),試指出下列指令的尋址方式,并寫出其操作數(shù)的有效地址和物理地址。
(1)MOVAX,[1A38H]解:(1)直接尋址有效地址=1A38H,物理地址=32000H+1A38H=33A38H(2)MOVAX,[BX]解:(2)寄存器間接尋址有效地址=0123H,物理地址=32000H+0123H=32123H48課堂練習(xí)與思考:解:(5)相對基址變址尋址有效地址=0123H+1000H+1A38H=2B5BH,物理地址=32000H+2B5BH=34B5BH(3)MOVAX,[BX+1A38H]解:(3)寄存器相對基址尋址有效地址=0123H+1A38H=1B5BH,物理地址=32000H+1B5B=33B5BH(4)MOVAX,[BX+DI]
解:(4)基址變址尋址有效地址=0123H+1000H=1123H,物理地址=32000H+1123H=33123H(5)MOVAX,[BX+DI+1A38H]49
3.432位指令模式下的存儲(chǔ)器尋址方式在保護(hù)方式下,當(dāng)段描述符號中D位為“0”,設(shè)定16位指令模式;D位為“1”,設(shè)定為32位指令模式。32位尋址結(jié)構(gòu)由5部分組成。段址+基址+變址*比例因子+偏移量50其中基址寄存器或變址寄存器可以是除ESP以外的任何32位通用寄存器。當(dāng)基址寄存器為EAX、EBX、ECX、EDX、ESI、EDI時(shí),默認(rèn)段寄存器的DS存放段選擇符。當(dāng)基址寄存器為EBP時(shí),默認(rèn)段寄存器SS存放段選擇符。比例因子為1,2,4,8。偏移量為0位、8位,32位。當(dāng)偏移量為32位時(shí)。段內(nèi)可尋址范圍為字節(jié)地址空間如圖3-1所示。選擇符偏移量分段機(jī)制線性地址物理地址分頁機(jī)制:虛地址線性地址物理地址150310310310圖
線性地址的確定
選擇符32位基地址描述符表32位偏移量基址寄存器變址寄存器比例因子1,2,4,832位線性地址段基地址+531)直接尋址指令中包含操作數(shù)的32位有效地址為:
EA=32位有效地址2)間接尋址EA=
3)相對基址尋址EA=+位移量544)相對比例變址尋址
EA=*+位移量
5)相對比例基址變址尋址
EA=+*+位移量
55
3.4.2程序地址尋址方式表示指令轉(zhuǎn)移地址所在的方式稱程序地址尋址方式。用于轉(zhuǎn)移類指令和過程調(diào)用類指令的程序地址尋址方式有3種:相對尋址(存儲(chǔ)器尋址)、直接尋址和間接尋址(存儲(chǔ)器尋址)。1.直接尋址指令中直接給出轉(zhuǎn)移地址,通常給出的是符號地址——標(biāo)號,例如指令JMPSTART中的標(biāo)號START即轉(zhuǎn)移地址的符號表示。56指令中給出寄存器名,該寄存器的內(nèi)容即轉(zhuǎn)移的目的地址,僅用于段內(nèi)轉(zhuǎn)移。例如:指令JMPBX,該指令執(zhí)行時(shí)BX→IP,由于是段內(nèi)轉(zhuǎn)移CS值不變,為原段地址。作為目標(biāo)地址的寄存器可以是16位寄存器的AX—DX,SP,BP,SI,DI;在32位CPU中,擴(kuò)展存儲(chǔ)器也可以用作轉(zhuǎn)移指令的轉(zhuǎn)移地址。2.寄存器尋址
3.存儲(chǔ)器尋址與操作數(shù)尋址相同571.80386的三種工作方式1)實(shí)地址方式系統(tǒng)啟動(dòng)后,80386自動(dòng)進(jìn)入實(shí)地址方式。在此方式下,采用類似于8086的體系結(jié)構(gòu),其特點(diǎn)如下:①尋址方式、存儲(chǔ)器管理,中斷處理與8086一樣。②操作數(shù)默認(rèn)長度為16位,但允許訪問32位寄存器(在指令前加前綴)。
3.4.3保護(hù)方式下的尋址方式58③不用虛擬地址,最大地址范圍仍限于1MB,只采用分段方式,每段最大64KB。④存儲(chǔ)器中保留兩個(gè)固定的區(qū)域,一個(gè)是初始化程序區(qū)FFFFFH—FFFFOH,另一個(gè)為中斷向量表003FFH~00000H。⑤80386的4特權(quán)級,在實(shí)地址方式下,程序在最高級0級上執(zhí)行,80386指令集除少數(shù)指令外,絕大多數(shù)指令在實(shí)地址方式下都有效。592)保護(hù)方式所謂保護(hù)是指在執(zhí)行多任務(wù)操作時(shí),對不同任務(wù)使用的虛擬存儲(chǔ)器空間進(jìn)行完全的隔離,保護(hù)每個(gè)任務(wù)順利執(zhí)行。保護(hù)方式是80386最常用的方式,系統(tǒng)啟動(dòng)后先進(jìn)入實(shí)地址方式,完成系統(tǒng)初始化后立即轉(zhuǎn)到保護(hù)方式。這種方式提供了多任務(wù)環(huán)境下的各種復(fù)雜功能以及對復(fù)雜存儲(chǔ)器組織的管理機(jī)制。只有在保護(hù)方式下,80386才能發(fā)揮其強(qiáng)大的功能。在保護(hù)方式下,80386具有如下特點(diǎn):80386的保護(hù)環(huán)應(yīng)用程序常規(guī)擴(kuò)展系統(tǒng)服務(wù)內(nèi)核級別0級別1級別2級別361①存儲(chǔ)器采用虛擬地址空間、線性地址空間和物理地址空間三種方式來描述。在保護(hù)方式下,80386尋址機(jī)構(gòu)不同于8086,與80286類似,是通過描述符的數(shù)據(jù)結(jié)構(gòu)來實(shí)現(xiàn)對內(nèi)存的訪問的。②強(qiáng)大的尋址空間。在保護(hù)方式下,80386可以尋址的空間大于64TB。這個(gè)空間就是所謂的虛擬地址空間。③使用80386的4級保護(hù)功能,可實(shí)現(xiàn)程序與程序、用戶與用戶、用戶與操作系統(tǒng)之間的隔離和保護(hù),為多任務(wù)操作系統(tǒng)提供優(yōu)化支持。④在保護(hù)方式下,80386既可以進(jìn)行16位運(yùn)算,又可以進(jìn)行32位運(yùn)算。無論是16位,還是32位的運(yùn)算,只要在保護(hù)方式下,它就能啟動(dòng)其分頁單元,為支持虛擬內(nèi)存。623)虛擬8086方式8086及其以后的微機(jī)處理在80286已有的基礎(chǔ)上新增了“虛擬8086模式”。所謂虛擬8086模式是指一個(gè)多任務(wù)的環(huán)境,即模擬多個(gè)8086的工作方式。在這個(gè)模式下,80386被模擬多個(gè)8086CPU并行工作。虛擬8086模式允許80386將內(nèi)存劃分成若干部分,每一個(gè)部分由操作系統(tǒng)分配給不同的應(yīng)用程序,而應(yīng)用程序,數(shù)據(jù)以及內(nèi)存管理程序等部分則存放在所分配的內(nèi)存中。因此操作系統(tǒng)可根據(jù)時(shí)間上的平均分配或優(yōu)先權(quán),分給每個(gè)應(yīng)用程序的執(zhí)行時(shí)間。63虛擬8086方式的主要特點(diǎn)如下:①可執(zhí)行原來采用8086書寫的應(yīng)用程序。②段寄存器的用法與實(shí)地址方式一樣,即段寄存器內(nèi)容乘以16后加上偏移量可得到20位的線性地址。③可以使用分頁方式,將1MB分為256個(gè)頁面,分頁內(nèi)存是將內(nèi)存以4KB為單位進(jìn)行劃分,每一個(gè)4KB稱為一“頁”,因此可以比段尋址方式劃分要細(xì),從而可處理較小的應(yīng)用程序與數(shù)據(jù)段。盡管在V86方式下得到的線性地址是20位即1MB的空間,但由于線性地址可以通過頁表映射到任何32位物理地址,所以應(yīng)用程序可在80386現(xiàn)有實(shí)際內(nèi)存的任何地方執(zhí)行。64在80386多任務(wù)系統(tǒng)中,可以使其中一個(gè)或幾個(gè)任務(wù)使用虛擬8086方式。此時(shí),一個(gè)任務(wù)所用的全部頁面可以定位于某個(gè)物理地址空間,另一個(gè)任務(wù)的頁面可以定位于其他區(qū)域,即每個(gè)虛擬8086下的任務(wù)可以轉(zhuǎn)換到物理存儲(chǔ)器的不同位置,這樣,把存儲(chǔ)器虛擬化了,故稱之為虛擬8086方式。④在虛擬8086方式中,應(yīng)用程序在最低特權(quán)級3級上運(yùn)行,因此80386指令系統(tǒng)中的特權(quán)指令不能使用。65
2.保護(hù)方式下的存儲(chǔ)器地址方式在保護(hù)方式下,80386對存儲(chǔ)器的組織管理采用兩級存儲(chǔ)器管理的策略,即所謂的分段管理和分頁管理,分別由80386中的分段部件SU和分頁部件PU完成。分段部件功能是完成邏輯地址到線性地址的轉(zhuǎn)換,分頁部件的功能是完成線性地址到物理地址的轉(zhuǎn)換。由于80386有32條地址線,因此可直接尋址=4GB的物理地址空間,80386仍然采用分段方式,每一個(gè)段地址最大空間為4GB。由于段選擇子參與選擇描述符的有13位,且對應(yīng)兩個(gè)描述符表(GDT和LDT),因此80386的虛擬地址空間為。6680386物理地址的形成分成兩步計(jì)算,先將邏輯地址變換成線性地址,再將線性地址轉(zhuǎn)換為物理地址。1)從邏輯地址到線性地址的轉(zhuǎn)換80386下的實(shí)地址方式與保護(hù)方式在機(jī)制上的主要差別,在于分段部件將邏輯地址轉(zhuǎn)換為線性地址的方法不同。在實(shí)地址方式下,段寄存器中的值就是段地址,分段部件直接將其左移4位得到20位段基址再加上16位的偏移地址,就得20位的線性地址,由于實(shí)地址方式下無需分頁,因此,線性地址就是物理地址。也就是說,在實(shí)地址方式下,80386的地址形成與8086相同。671.邏輯地址轉(zhuǎn)換為線性地址在保護(hù)方式下,段寄存器中的值為段選擇子,通過段選擇子中的索引描述符表中的段描述符,然后從8個(gè)字節(jié)的描述符中找段基址(32位),最后將段基址與32位的偏移地址相對得到線性地址。具體操作說明如下。圖3-分段地址轉(zhuǎn)換過程圖TIRPL8字節(jié)描述符8字節(jié)描述符訪問權(quán)限(8位)GDOU段基址(32位)段限值(20位)10位10位12位10位頁目錄(號)10位頁面(號)12位偏移量描述符32位段基址+32位偏移量線性地址分段不分頁物理地址偏移量虛地址段選擇符INDEXTI=1TI=0GDT當(dāng)前LDTLDTR中32位基地址GDTR中32位基地址13位INDEX×8裝入描述符高速緩存器段寄存器150123031............GDTR32位基地址16位界限0#段描述符1#段描述符32位基地址20位界限權(quán)限等存儲(chǔ)器系統(tǒng)(數(shù)據(jù)段)
全局描述符表GDT0008DS1#0#1#段32位偏移量EA00008000H尋址單元FF00FF009200200000200000H0020FFFFH00208000H段描述符和段的關(guān)系
70(1)由執(zhí)行部件EU中的64位桶式移位寄存器(移位地址加法器)得到的兩個(gè)32位有效地址送到分段部件SU,有效地址包括了48位的邏輯地址,邏輯地址含有16位的段選擇子和32位的偏移地址。這恰恰是在指令中用到的邏輯地址。如前圖所示,分段部件接收到邏輯地址后,根據(jù)段選擇子的表指示器TI的值選擇全局描述符表(GDT)還是局部描述符表(LDT),當(dāng)TI=0時(shí)選中GDT,TI=1時(shí)選中LDT。71(2)選擇完描述符表后,通過段選擇子高13位的索引從被選中的描述符表中找出相應(yīng)的8個(gè)字節(jié)的段描述符(見圖),從中取出32位段基址(B31~B0),32位的段基地址與32位的偏移地址相加后就得到了32位的線性地址,從而完成了分段部件SU的主要任務(wù)。在找到段的描述符后,微處理器自動(dòng)將該段描述符裝入段描述符緩沖寄存器。利用描述符緩沖寄存器可大大提高微處理器尋址效率。72GDT的首地址
13位段選擇符8+找到某個(gè)段描述符步驟1⑶分段機(jī)制的尋址過程
73從描述符取出32位段基地址32位的偏移地址
+32位的線性地址步驟2虛擬地址指針GDT/LDT選擇符偏移量段描述符數(shù)據(jù)段描述符高速緩沖寄存器(不可見)數(shù)據(jù)段操作數(shù)DSEAX段式地址轉(zhuǎn)換段基址752.線性地址轉(zhuǎn)換為物理地址①線性地址:在保護(hù)模式下,由段寄存器(選擇子),段描述符和偏移地址所形成的32位全地址。②物理地址:對應(yīng)物理存儲(chǔ)器的實(shí)際地址。
不分頁時(shí),32位線性地址就是實(shí)際的物理地址,而在分頁管理下,32位線性地址需通過內(nèi)存分頁管理機(jī)制轉(zhuǎn)化為另外的物理地址。③線性地址的構(gòu)成76頁目錄地址頁表地址頁內(nèi)偏移地址3122211211010位10位12位
線性地址的構(gòu)成
頁目錄地址(10位):第31~22位。說明該頁表的序號(0#~1023#)。該值乘以4即為該頁表基地址在頁目錄表中的相對地址。
頁表地址(10位):第21~12位。說明該頁的序號(0#~
1023#)。該值乘以4即為該頁基地址在頁表中的相對地址。
頁內(nèi)偏移地址(占12位):第11~0位。說明某尋址單元的頁內(nèi)地址。
線性地址頁目錄目錄偏移量頁目錄項(xiàng)頁操作數(shù)頁CR3頁表頁表項(xiàng)頁表基址分頁機(jī)制78CR3的內(nèi)容頁目錄地址4
+找到某個(gè)目錄項(xiàng)步驟1⑶分頁機(jī)制的尋址過程
79從該目錄項(xiàng)中取出目錄基地址頁目錄地址4
+找到某個(gè)頁項(xiàng)步驟280從該頁項(xiàng)中取出頁基地址頁內(nèi)偏移地址+物理地址(32位)
步驟381基地址頁目錄表頁表+++頁目錄地址頁表地址頁內(nèi)位移地址4
4
物理地址CR3線性
地址PG=1
分頁P(yáng)G=0
禁止分頁物理地址82從線性地址映射成物理地址的過程簡單歸納如下:①求頁目錄描述符所在地址將CR3中的頁目錄基地址(CR3中的低12位清0)與DIR值的4倍相加求得頁目錄描述符所在地址。注意:頁目錄表將4GB的地址空間分成1024個(gè)頁組,每一組為4MB。②找出頁表基地址從頁目錄描述符中找出頁表首地址(有效位高20位,而低12位為0)。③合成頁描述符所在地址將上述頁表基地址與PAGE值的4倍相加得到頁描述符所在地址。一個(gè)頁表同樣占4KB,內(nèi)含1024個(gè)頁描述符項(xiàng),每一項(xiàng)占4個(gè)字節(jié)。83④找出頁面基地址從處到的頁描述符中找出頁面對應(yīng)的基地址(有效位高20位,低12位為0)。⑤合成頁物理地址將得到的頁面基地址與線性地址的低12位的頁內(nèi)偏移量相加,即可得到所需的32位物理地址。段選擇符偏移量GDT32位基地址段描述符頁目錄(號)頁目錄項(xiàng)頁表項(xiàng)頁表(號)偏移量指令或數(shù)據(jù)++++CR3虛地址高13位×8+TI=001503110位10位12位線性地址20位基地址左移12位20位基地址左移12位32位段基地址全局描述符表8K×8頁目錄表1024×4頁表1024×4×4×44K一頁圖3-20分段分頁地址轉(zhuǎn)換過程圖85虛擬86模式也啟用了386的分頁功能。由于虛擬86模式下任務(wù)的尋址范圍是1MB+64KB–16B,故線性地址的31~21位全為0,剩下低21位(20~0)對應(yīng)1MB+64KB–16B的地址空間。86課堂練習(xí)與思考:1.分段分頁的作用是什么?答:系統(tǒng)通過對分段、分頁這兩種機(jī)制的配制,實(shí)現(xiàn)支持單任務(wù)系統(tǒng)、多任務(wù)系統(tǒng)或者支持共享存儲(chǔ)器的多處理器系統(tǒng)。分段將處理器的可尋址存儲(chǔ)器空間分成叫做段的較小的保護(hù)地址空間,通過在段與段之間分界,來保證程序或任務(wù)之間不會(huì)互相干擾。分段機(jī)制還將段分類,這樣可以對某些特殊類型的段操作進(jìn)行限制。分頁支持"虛擬存儲(chǔ)器"環(huán)境,使得用少量的物理存儲(chǔ)器就能訪問很大的映射到磁盤存儲(chǔ)器的線性地址空間。872.什么是全局描述符表?什么是局部描述符表?
答:全局描述符表存放系統(tǒng)程序的段描述符、門描述符和局部描述符表的段描述符以及段選擇符。局部描述符表是獨(dú)立于全局描述符表的,存放某個(gè)任務(wù)擁有的段描述符或多個(gè)任務(wù)的描述符。
883.簡述頁目錄項(xiàng)表和頁表的作用。
答:目錄項(xiàng)表是頁目錄項(xiàng)的一組順序列表;頁表是頁表項(xiàng)的一組順序列表。4.如何通過頁目錄項(xiàng)和頁表項(xiàng)得到物理地址。
答:由頁目錄項(xiàng)可以得到頁表的基地址,再根據(jù)頁表項(xiàng)地址從頁表中找到頁表項(xiàng),從頁表項(xiàng)中可以得到在主存中的頁基址。將頁基址加上頁內(nèi)偏移量即可得到物理地址。893.5指令系統(tǒng)903.5.18086指令系統(tǒng)8086指令按功能分為六大類。8086/8088指令系統(tǒng)中的指令按功能可分為六類:數(shù)據(jù)傳送指令算術(shù)運(yùn)算指令邏輯運(yùn)算與移位指令串操作指令控制轉(zhuǎn)移指令處理機(jī)控制指令
91mem存儲(chǔ)器操作數(shù)
port輸入輸出端口,可用
數(shù)字或表達(dá)式表示opr表示操作數(shù)
[]存儲(chǔ)單元的內(nèi)容ac累加器操作數(shù)(AX或AL)reg寄存器src源操作數(shù)
segreg段寄存器dist目的操作數(shù)
count移位次數(shù),可以是
1或CL
data立即數(shù)
S_ins串操作指令disp8位或16位位移量本節(jié)中要用到的一些符號所表示的含義:923.5.1.1數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令能夠完成下列操作數(shù)的傳送任務(wù)。立即數(shù)存儲(chǔ)器段寄存器
CS,DS,ES,SS通用寄存器組
AX,BX,CX,DX
BP,SP,SI,DI(CS不能作目的)93
數(shù)據(jù)傳送指令分類名稱格式功能OSZAPC基本傳送指令MOVDST,SRC字、字節(jié)傳送不影響進(jìn)棧指令PUSHOPRD字壓入堆棧不影響出棧指令POPOPRD字彈出堆棧不影響交換指令XCHGDST,SRC字、字節(jié)交換不影響有效地址送寄存器指令LEAREG,SRC有效地址寄存器不影響指針?biāo)图拇嫫骷癉S指令LDSREG,SRC地址指針寄存器,DS不影響指針?biāo)图拇嫫骷癊S指令LESREG,SRC地址指針寄存器,ES不影響輸入指令I(lǐng)NAL,PORT外設(shè)數(shù)據(jù)AL不影響輸出指令OUTPORT,ALAL外設(shè)數(shù)據(jù)不影響換碼指令XLATAL中數(shù)據(jù)轉(zhuǎn)換不影響讀取標(biāo)志指令LAHFFlag低字節(jié)AH不影響設(shè)置標(biāo)志指令SAHFAHFlag低字節(jié)ZAPC標(biāo)志寄存器入棧指令PUSHF把Flag內(nèi)容壓入堆棧不影響標(biāo)志寄存器出棧指令POPF把Flag內(nèi)容彈出堆棧OSZAPC通用數(shù)據(jù)傳送指令地址傳送指令累加器專用指令標(biāo)志寄存器傳送指令941.通用數(shù)據(jù)傳送指令(1)MOVd,s功能:將源操作數(shù)s復(fù)制到目標(biāo)操作數(shù)d,源保持不變,目標(biāo)被源代替。95注:①
d,s不能同時(shí)為存儲(chǔ)器錯(cuò)誤指令:MOV[BX],[SI]×②d不能為立即數(shù)錯(cuò)誤指令:MOV1234H,AX×③d,s必須同時(shí)為字節(jié)型或字型錯(cuò)誤指令:MOVAX,BL×96指令后的分號“;”以后為注釋部分,對指令的執(zhí)行沒有任何影響,主要是便于閱讀或解釋指令的功能。97例:MOVAX,0;
AX0,AX清0
執(zhí)行后,AX=0MOVSI,BP;
SIBP,BP內(nèi)容送SI
執(zhí)行后,SI=BP,BP不變98MOVAL,BUFFERS;BUFFERS內(nèi)存
單元內(nèi)容送入AL這里,BUFFERS代表符號地址,從該地址單元中取出內(nèi)容送AL寄存器。相當(dāng)于直接尋址方式。EA=BUFFERS偏移量3030HBUFFERSAL99MOVAX,DATA[SI+BX]EA=SI+BX+DATA,在數(shù)據(jù)段中尋找字單元,取出該字單元的內(nèi)容送入AX。100設(shè)DS=3000H,SI=200H,BX=1000H,DATA的偏移量為100H,則EA=SI+BX+DATA=200H+1000H+100H=1300H物理地址=DS16+EA=30000H+1300H=31300H
即從31300H和31301H兩單元中取出內(nèi)容送AX。101DS1630000H123434H12HAXAHALEA=1300HDATASIBXDATA31300H31301HMOVAX,DATA[SI+BX]102DS1630000H123434H12HAXAHALEA=1300HDATASIBXDATA31300H31301HMOVAX,DATA[SI+BX]103例:PUSHBX;把BX內(nèi)容壓入堆棧設(shè)
SS=2000H,SP=0040H,BX=2340H則執(zhí)行后,2340H被保存到堆棧,同時(shí)SP=003EH,BX內(nèi)容不變SS1620000HSP=0040H
(初值)20040H2003EH4023SP=003EH
(壓棧后)XX2340BX104注:s和d只能為16位寄存器或存儲(chǔ)器錯(cuò)誤指令:PUSH1234HPOPAL××105(3)XCHGd,s;交換源和目標(biāo)操作數(shù)注:d=通用寄存器s=通用寄存器或存儲(chǔ)器例:XCHGAX,[SI+400H]執(zhí)行后,5678H被送到內(nèi)存單元AX=1234H3412SI+400H5678AHALAX34127856106(4)換碼指令XLAT功能:該指令通過AL和BX寄存器進(jìn)行表格查找,將8位數(shù)裝入AL中。它完成的操作為:AL←[BX+AL],XLAT指令常用于查表操作,即BX寄存器含有表格的起始地址,而AL中的值是作進(jìn)入表格中的偏移量,查出表格中的內(nèi)容送入AL中。例
設(shè)DS=3000H,AL=09H,BX=0080H執(zhí)行指令XLAT作用是:將存儲(chǔ)單元30089H的內(nèi)容送入AL中。107*XLAT;查表轉(zhuǎn)換注:①表首相對于段起始地址的偏移量預(yù)先送入BX中;②待查找的表內(nèi)某單元相對于表首的偏移量送入AL中;③以EA=BX+AL在表中(數(shù)據(jù)段)查找,將查得的數(shù)據(jù)再送回AL中。108例:設(shè)表首的偏移地址為2000H,要查找表內(nèi)第4號單元(從0號算起)的內(nèi)容并送回AL,則程序段如下:MOVBX,2000H
MOVAL,04H
XLAT設(shè)表中內(nèi)容如下頁圖所示,則執(zhí)行后,AL=09H10918H34H05H06H09H2000HBX
04HAL(表首)TABLE
DS1604
AL09
1102.目標(biāo)地址傳送指令對于任一個(gè)存儲(chǔ)器操作數(shù),由段地址和偏移地址確定了它們在存儲(chǔ)器中的位置。目標(biāo)地址傳送指令就用于獲得存儲(chǔ)器操作數(shù)的段地址或偏移地址。111(1)LEAd,s功能:取存儲(chǔ)器源操作數(shù)有效地址送入目標(biāo)dd=通用寄存器例:LEABX,COUNTER;
取COUNTER地址偏移量BX
若COUNTER地址偏移量為0002H,則執(zhí)行后BX=0002H112(2)LDSd,s功能:裝入地址指針,段地址DS,
偏移地址d這條指令往往改變了段寄存器DS的內(nèi)容,使得DS指向了另外一個(gè)數(shù)據(jù)段。113例:LDSSI,BASE設(shè)執(zhí)行前,DS=1000H,SI=0000H,BASE偏移地址為0004H,10004H~10007H單元內(nèi)容依次為00H,30H,00H,20H,則執(zhí)行后,DS=2000H,SI=3000H114003000200004HSI=3000H原DS所指向
的數(shù)據(jù)段新DS所指向
的數(shù)據(jù)段1000H1610000H
DS
BASE30002000SIDS2000H1620000H
DS
115(3)LESd,s功能:裝入地址指針,段地址
ES,偏移地址d1163.標(biāo)志位傳送指令(1)LAHF功能:將標(biāo)志寄存器低8位裝入AH寄存器SFZFAFPFCFFR7~0
AH117(2)SAHF功能:把AH的內(nèi)容送入標(biāo)志寄存器的低8位。118(3)PUSHF功能:把16位的標(biāo)志寄存器壓入堆棧保存,同時(shí)SP–2SP。119(4)POPF功能:將當(dāng)前SP所指內(nèi)容(2字節(jié))彈出至標(biāo)志寄存器,同時(shí)SP+2SP。1204.I/O數(shù)據(jù)傳送指令功能:從指定端口輸入數(shù)據(jù)至累加器acc(AL或AX),port=0~255(1)INacc,portAHALacc端口port
16位數(shù)據(jù)時(shí)121(2)INacc,DX功能:從DX指示的端口輸入數(shù)據(jù)至累加器acc,DX=0~65535122(3)OUTport,acc功能:將累加器的數(shù)據(jù)輸出至指定端口。123(4)OUTDX,acc功能:將累加器的數(shù)據(jù)輸出到DX所指示的端口。注:①
16位端口地址必須送入DX中。②
若采用AX,則表示16位數(shù)據(jù)傳送(輸入/輸出)1243.5.1.2算術(shù)運(yùn)算指令算術(shù)運(yùn)算指令的操作數(shù)可以是無符號數(shù),也可以是有符號數(shù)。算術(shù)運(yùn)算指令一般影響標(biāo)志位,而數(shù)據(jù)傳送指令一般不影響標(biāo)志位。125
算術(shù)運(yùn)算指令分類名稱格式功能OSZAPC加法指令A(yù)DDDST,SRC加法(字、字節(jié))OSZAPC帶進(jìn)位加法指令A(yù)DCDST,SRC帶進(jìn)位加法(字、字節(jié))OSZAPC加1指令I(lǐng)NCOPRD加1(字、字節(jié))OSZAP減法指令SUBDST,SRC減法(字、字節(jié))OSZAPC帶借位減法指令SBBDST,SRC帶借位減法(字、字節(jié))OSZAPC減1指令DECOPRD減1(字、字節(jié))OSZAP比較指令CMPDST,SRC比較(字、字節(jié))OSZAPC求補(bǔ)指令NEGOPRD求補(bǔ)碼OSZAPC無符號數(shù)乘法MULSRC不帶符號數(shù)乘法(字,字節(jié))OC帶符號數(shù)乘法IMULSRC帶符號數(shù)乘法(字,字節(jié))OC無符號數(shù)除法DIVSRC不帶符號數(shù)除法(字,字節(jié))帶符號數(shù)乘法IDIVSRC帶符號數(shù)除法(字,字節(jié))符號擴(kuò)展指令CBW擴(kuò)展AL中的符號不影響符號擴(kuò)展指令CWD擴(kuò)展AX中的符號不影響加法指令減法指令乘法指令除法指令十進(jìn)制調(diào)整指令1261.加法指令(1)ADDd,s功能:將s與d相加,結(jié)果在d中。根據(jù)操作結(jié)果設(shè)置標(biāo)志位。127例:ADD[BX+106BH],1234H設(shè)DS=2000H,BX=1200H,EA=1200H+106BH
=226BH物理地址:2000H16+226BH=2226BH
又設(shè)原來(2226BH)=90H,(2226CH)=30H則指令執(zhí)行后:3090H+1234H=42C4H即(2226BH)=C4H,(2226CH)=42H128又
42C4H=0100,0010,1100,0100B
標(biāo)志位:CF=0,ZF=0,SF=0
AF=0,PF=0(3個(gè)1),OF=0
129(2)ADCd,s功能:將s與d再與進(jìn)位CF相加,結(jié)果留在d中,ADC指令主要用于多字節(jié)相加。例:MOVAX,0FH;AX=000FHADDAL,0F1H;AL+F1HAL
ADCAH,0;AH+0+CFAH
最后結(jié)果:AH=01H,AL=00H注:若是立即數(shù),且最高位為數(shù)碼A~F,則必須在前面添加一個(gè)0,以避免混淆。130(3)INCd功能:將d加1后送回d。注:INC指令不影響進(jìn)位標(biāo)志CF。該指令經(jīng)常用于修改地址指針寄存器
(BX,BP,SI,DI),使之指向下一個(gè)單元。1312.減法指令(1)SUBd,s功能:d–sd,同時(shí)影響標(biāo)志位。(2)SBBd,s功能:d–s–CFd,同時(shí)影響標(biāo)志位。132(3)DECd功能:d–1d
該指令與INC相反操作,也不影響進(jìn)位標(biāo)志CF。133(4)NEGd功能:對d進(jìn)行求補(bǔ)運(yùn)算后送回
(按位求反再加1)。例:MOVAL,7FHNEGAL結(jié)果:AL=7F按位求反+1=80H+1=81H134(5)比較指令
CMPd,s功能:作一次減法運(yùn)算d–s,但不回送結(jié)果,只根據(jù)結(jié)果設(shè)置標(biāo)志位。比較指令往往用于判斷兩數(shù)是否相等,或兩數(shù)大小關(guān)系。若相等,則零標(biāo)志ZF=1。1353.乘法指令乘法指令在指令中只出現(xiàn)一個(gè)操作數(shù)s(乘數(shù)),另一個(gè)操作數(shù)固定在累加器(AX或AL)中。136(1)MULs功能:無符號數(shù)乘法指令①.8位乘法被乘數(shù)=AL,乘數(shù)=s積(16位)=AH:AL中,即在AX中AH為高8位,AL為低8位。AL(8位)s(8位)
AHAL(16位)137②16位乘法被乘數(shù)=AX,乘數(shù)=s積(32位)=DX:AXDX為高16位,AX為低16位。AX(16位)s(16位)
DXAX(32位)138例:MULBX
若執(zhí)行前
AX=0012H,BX=0066H
則執(zhí)行后
DX=0000H,AX=072CH
139(2)IMULs功能:有符號數(shù)乘法指令8086規(guī)定,有符號數(shù)一般采用補(bǔ)碼表示。故有符號數(shù)作乘法運(yùn)算時(shí),必須先把它們轉(zhuǎn)變?yōu)樵a數(shù)相乘,積也為原碼數(shù),再將原碼數(shù)轉(zhuǎn)變?yōu)檠a(bǔ)碼數(shù)。這個(gè)工作由CPU自動(dòng)完成。140例:MOVAL,88H;
88H為
–120的補(bǔ)碼MOVBL,2IMULBL結(jié)果:AX=FF10H;FF10H為–240的補(bǔ)碼若直接用MULBL指令,則AX=0110H1414.除法指令(1)DIVs功能:無符號數(shù)相除①.字節(jié)除被除數(shù)=AX,除數(shù)=s(s0)結(jié)果:商=AL,余數(shù)=AHALAHAL(8位)(16位)...AH(8位)s(8位)商余數(shù)142②.字除被除數(shù)=DX:AX,除數(shù)=s(s0)結(jié)果:商=AX,余數(shù)=DXAXDXAX(16位)(32位)...DX(16位)s(16位)商余數(shù)143注:如果除數(shù)太小,使得商超出了一個(gè)字節(jié)或字所能表示的范圍,則會(huì)產(chǎn)生“被0除”錯(cuò)誤。例:MOVAX,800H
MOVBL,2
DIVBL結(jié)果錯(cuò)誤,“被0除”
144(2)IDIVs功能:帶符號數(shù)除法采用的固定寄存器與DIV相同。145(3)CBW和CWDCBW:字節(jié)除法的符號擴(kuò)展指令功能:若AL為正數(shù)(D7=0)則
AH=00H
AL為負(fù)數(shù)(D7=1)則
AH=FFH
146CWD:字除法的符號擴(kuò)展指令功能:若AX為正數(shù)(D15=0)則
DX=0000H
AX為負(fù)數(shù)(D15=1)則
DX=FFFFH
CBW和CWD一般用于帶符號數(shù)除法指令之前。147課堂練習(xí)與思考:AX
DX
2、假設(shè)(DS)=0B000H,(BX)=080AH,(0B080AH)=05AEH,(0B080CH)=4000H,當(dāng)執(zhí)行指令“LESDI,[BX]”后,(DI)=
,(ES)=
。05AEH
4000H
1.用DIV指令進(jìn)行無符號數(shù)的雙字/字相除時(shí),所得的商和余數(shù)也是無符號數(shù),分別放在
和
中。1483、根據(jù)以下要求選用相應(yīng)的指令或指令序列
⑴把DATA的段地址和編移地址裝入DS和BX中。⑵把附加段偏移量為0500H字節(jié)存儲(chǔ)單元的內(nèi)容送BX寄存器。⑶AL的帶符號數(shù)乘以BL的帶符號數(shù),結(jié)果存入AX中。
⑷寄存器AL中的高、低四位交換。
MOVCL,4;ROLAL,CLIMULBL
MOVBX,ES:[0500H]
LDSBX,DATA1494.把附加段偏移量為0500H字節(jié)存儲(chǔ)單元的內(nèi)容送BX寄存器。
5.AL的帶符號數(shù)乘以BL的帶符號數(shù),結(jié)果存入AX中。
6.寄存器AL中的高、低四位交換。MOVBX,ES:[0500H]
IMULBL
MOVCL,4ROLAL,CL
1505.十進(jìn)制調(diào)整指令運(yùn)算器按二進(jìn)制規(guī)律進(jìn)行運(yùn)算,如果參與運(yùn)算的是BCD碼數(shù),則需要對結(jié)果進(jìn)行調(diào)整。100010010000100100001000組合的BCD碼數(shù)未組合的BCD碼數(shù)899(低位)8(高位)代表
89151十進(jìn)制調(diào)整指令前面提到的所有運(yùn)算指令都是二進(jìn)制數(shù)的運(yùn)算指令,怎樣得到十進(jìn)制的運(yùn)算結(jié)果呢?8088提供了一套十進(jìn)制調(diào)整指令。1.十進(jìn)制數(shù)的表示
BCD碼——用二進(jìn)制編碼的十進(jìn)制數(shù)。
壓縮00000001001000110100010101100111100010010123456789
非壓縮UUUU0000UUUU0001UUUU0010UUUU100101291522.調(diào)整原理以加法調(diào)整為例。
701111101+6+0110+01101311010011D0001001113(H)
不同的運(yùn)算指令的調(diào)整方法不同,但道理是一樣的。
1153(1)AAA功能:對未組合型BCD碼加法的結(jié)果進(jìn)行校正(調(diào)整)。校正(調(diào)整)方法:若AL中低4位數(shù)值
>9或
AF=1,則:①AL+6AL,且
AL高4位清0
②AH+1AH
否則不作調(diào)整。154例:MOVAH,
0MOVAL,
00000110B ;代表6ADDAL,
00000111B ;代表7AAA00000110 6+000001117調(diào)整
+00000110000011010001001100000011AL清000000000+1=00000001AH
最后結(jié)果
AH=01H,AL=03H155(2)DAA功能:對組合型BCD碼加法的結(jié)果進(jìn)行校正(調(diào)整)。DAA同時(shí)對AL中低4位和高4位進(jìn)行調(diào)整。156例.組合BCD碼調(diào)整
MOVAL,
00100111B ;代表27ADDAL,
10000110B ;代表86DAA157+1000011000100111調(diào)整
+0110011010101101100010011進(jìn)位1調(diào)整后結(jié)果:CF=1,AL=00010011(代表13)進(jìn)位位與AL合成結(jié)果:
113158(3)AAS功能:對未組合型BCD的減法結(jié)果進(jìn)行調(diào)整。功能:對組合型BCD的減法結(jié)果進(jìn)行調(diào)整。(4)DAS159最后結(jié)果
AL=00110110B(代表36),CF=0例:MOVAL,
01110011B(代表73)MOVBL,
00110111B(代表37)SUBAL,
BL01110011001101110011110000110110DAS相減調(diào)整00000110160(5)AAM功能:對未組合型BCD的乘法結(jié)果進(jìn)行調(diào)整。161例:MOVAL,
00001000B(代表8)MOVBL,
00001001B(代表9)MULBLAAM1620000100000001001AL=01001000AH=00000000最后結(jié)果
AH=00000111B(代表7)對結(jié)果進(jìn)行調(diào)整:AX/00001010B=00000111BAH
余數(shù)=00000010BALAL=00000010B(代表2)AH,AL中表示未組合型BCD碼72。163(6)AAD功能:對未組合型BCD碼(在AX中)進(jìn)行除法前的校正。它是在除法運(yùn)算前進(jìn)行的,并完成一次這樣的運(yùn)算:10*(AH)+(AL)→(AL),0→(AH)。164例:MOVAX,
0000011100000010B(代表72)AAD調(diào)整前,
AH=00000111AL=00000010調(diào)整后,
AH=00000000AL=00000111B00001010B+00000010B=01001000B
7D10D2D72D=48HAAD相當(dāng)于將兩個(gè)未組合型BCD碼數(shù)合并為一個(gè)二進(jìn)制數(shù)。165
例2設(shè)有兩數(shù)X,Y,且X=85,Y=6,用分離BCD數(shù)完成X/Y。我們有如下的程序:
BCD1DB05H,08H;高位在高字節(jié)
BCD2DB06H;BCD3DB3DUP(?);…MOVAH,0;MOVAL,BCD1+1;(AL)=08MOVBL,BCD2;(BL)=06166
DIVBL;(AX)/(BL)→(AL)=01,(AH)=02;MOVBCD3+1,AL;商的高位送BCD3+1MOVAL,BCD1;(AL)=05;AAD;(AL)=(AH)*10+(AL)=25,0→(AH);DIVBL;(AX)/(BL)→(AL)=04,(AH)=01;MOVBCD3,AL;商的低位送BCD3MOVBCD3+2,AH;余數(shù)送BCD3+21673.5.1.3邏輯運(yùn)算和移位循環(huán)指令
邏輯指令在底層軟件中提供了對二進(jìn)制位的控制??梢詫ξ贿M(jìn)行置位、清0或取反。常用于控制系統(tǒng)的I/O設(shè)備。1681.邏輯運(yùn)算指令(1)ANDd,s功能:s和
d按位相“與”,結(jié)果在
d中。AND指令通常用于使某些位清0,而另一些位保持不變。169例:ANDBX,
0F0FH若BX=5555H,則執(zhí)行后
BX=0505H0101,0101,0101,0101B0000,1111,0000,1111B0000,0101,0000,0101BAND170(2)ORd,s功能:s和
d按位相“或”,結(jié)果送
d。OR操作經(jīng)常用于將某些位置位,其它位不變。171(3)XORd,s功能:s和
d按位相“異或”,結(jié)果送
d。XOR操作經(jīng)常用于將某些位取反,其它位不變。0101,0101,0101,0101B0000,1111,0000,1111B0101,1010,0101,1010BXOR例:172(4)NOTd功能:將
d按位求反后送回。173(5)TESTd,s功能:s和
d按位相“與”,但不送結(jié)果,只根據(jù)結(jié)果設(shè)置標(biāo)志位。TEST指令通常用于測試某些位是為0還是為1。1742.移位指令和循環(huán)移位指令(1)算術(shù)移位①.算術(shù)左移CF0101101010CF0011010101175左移
1次:
SALd,1左移多次:
SALd,CL(CL中為移位次數(shù))例:MOVBL,
10001001BSALBL,
1結(jié)果:
CF=1,BL=00010010B0CF注:移位多次時(shí),移位次數(shù)必須預(yù)先置入CL中。176右移
1次:
SARd,1右移多次:
SARd,CL②算術(shù)右移CF符號位177(2)邏輯移位①.邏輯左移
SHL與SAL等價(jià)。②.邏輯右移
SHRd,1
SHRd,CLCF0178(3)循環(huán)左移①不帶進(jìn)位循環(huán)左移
ROLd,1 ROLd,CLCF179②帶進(jìn)位循環(huán)左移
RCLd,1 RCLd,CLCF180(4)循環(huán)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- “史詩級”投資賽道!3分鐘詳解碳中和本質(zhì)良機(jī)不可錯(cuò)過
- 房地產(chǎn) -郫都區(qū)唐昌街道崇寧文廟商業(yè)街打造概念方案
- 油品檢測員述職報(bào)告
- 頸椎病相關(guān)知識(shí)講座
- 班主任月安全工作總結(jié)
- 腱鞘炎的中醫(yī)治療
- 黑龍江省-2023年-社區(qū)網(wǎng)格員-上半年筆試真題卷
- 2024年從事戶籍工作兩個(gè)月的心得體會(huì)(4篇)
- 2024年學(xué)生會(huì)競選骨干演講稿(2篇)
- 2024年人口計(jì)生宣傳教育工作總結(jié)(3篇)
- 新概念二單詞表
- 全國職業(yè)院校技能大賽高職組(酒水服務(wù)賽項(xiàng))備賽試題庫(含答案)
- 國有企業(yè)采購管理規(guī)范 T/CFLP 0027-2020
- GA 667-2020防爆炸透明材料
- 幼兒園《警察職業(yè)介紹》PPT
- 壓路機(jī)維修服務(wù)合同協(xié)議書范本簡約版
- 如何當(dāng)好一名合格的項(xiàng)目經(jīng)理課件
- 新形勢下如何創(chuàng)新統(tǒng)計(jì)工作
- 民航服務(wù)心理學(xué)課程標(biāo)準(zhǔn)-
- 《premiere視頻編輯》課程標(biāo)準(zhǔn)
- 物業(yè)管理服務(wù)的整體設(shè)想及策劃
評論
0/150
提交評論