




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
微機(jī)原理與接口技術(shù)2/3/20231第二章
內(nèi)容回顧2/3/20232第二章重點(diǎn)之一8086CPU內(nèi)部結(jié)構(gòu)2/3/20233目的變址寄存器DestinationIndexSIDIBPSPAX
累加器AccumulatorBX基址寄存器BaseCX計(jì)數(shù)寄存器CountDX數(shù)據(jù)寄存器DataAHBHCHDHALBLCLDLIPPSWDSESSSCS數(shù)據(jù)段寄存器DataSegment附加段寄存器ExtraSegment堆棧段寄存器StackSegment代碼段寄存器CodeSegment狀態(tài)標(biāo)志寄存器ProcessorStatusWord指令指針寄存器InstructionPointer變址寄存器段寄存器控制寄存器通用寄存器源變址寄存器SourceIndex基址指針寄存器BasePoint堆棧指針寄存器StackPoint指針寄存器數(shù)據(jù)寄存器第二章重點(diǎn)之二2/3/20234第二章重點(diǎn)之三邏輯地址的組成——段基址:偏移地址物理地址的形成——段基址×16+偏移地址段基址00001503210偏移地址150地址加法器物理地址190存儲(chǔ)器的分段管理2/3/20235第二章重點(diǎn)之四堆棧的概念及工作過程2/3/20236第三章8086的尋址方式和指令系統(tǒng)8086的尋址方式微機(jī)系統(tǒng)指令的機(jī)器碼表示方法8086的指令系統(tǒng)內(nèi)容提要2/3/20237§3-18086的尋址方式概述
§3-18086的尋址方式——概述
計(jì)算機(jī)的指令包括:操作碼+操作數(shù)↓↓操作的性質(zhì)操作的對(duì)象↓存放在
寄存器、存儲(chǔ)器、I/O端口地址、立即數(shù)(由尋址方式?jīng)Q定)尋址方式:指令中說明操作數(shù)所在地址的方法。指令分類:?jiǎn)尾僮鲾?shù)、雙操作數(shù)、無操作數(shù)。(雙操作數(shù)指令形式:操作碼目的操作數(shù),源操作數(shù))2/3/20238§3-18086的尋址方式——概述
各種尋址方式指令執(zhí)行速度不同:操作數(shù)在寄存器中指令執(zhí)行速度快:在CPU內(nèi)部立即執(zhí)行;立即數(shù)尋址指令執(zhí)行速度較快:直接從指令隊(duì)列中取數(shù);操作數(shù)在存儲(chǔ)器中指令執(zhí)行速度較慢:通過總線與CPU交換數(shù)據(jù)。CPU進(jìn)行讀/寫存儲(chǔ)器的操作:①把一個(gè)偏移量送到BIU,計(jì)算出20位物理地址;②執(zhí)行總線周期存取操作數(shù)。2/3/20239§3-18086的尋址方式——概述
尋址方式舉例:2/3/202310§3-18086的尋址方式——概述
8086指令的尋址方式類型:一、立即尋址方式二、寄存器尋址方式三、直接尋址方式四、寄存器間接尋址方式五、寄存器相對(duì)尋址方式六、基址變址尋址方式七、相對(duì)基址變址尋址方式八、其它2/3/202311§3-18086的尋址方式——立即尋址方式
一、立即尋址方式(ImmediateAddressing)
1.含義:操作數(shù)是立即數(shù)(即8位或16位的常數(shù)),直接包含在指令中。2.特點(diǎn):翻譯成機(jī)器碼時(shí),立即數(shù)是指令的一部分,緊跟在操作碼之后存放在代碼段內(nèi)。在取出指令的同時(shí)也就取出了操作數(shù),立即有操作數(shù)可用,所以稱之為立即尋址。l6位數(shù):高字節(jié)→代碼段的高地址單元,低字節(jié)→低地址單元;3.作用:常用于給寄存器賦初值。2/3/202312§3-18086的尋址方式——立即尋址方式
例MOVCX,2A50H
解:將立即數(shù)2A50H送到CX寄存器中。(又例:MOVCL,20H)4.注意:①立即數(shù)可以送到寄存器、一個(gè)存儲(chǔ)單元(8位)、兩個(gè)連續(xù)的存儲(chǔ)單元(16位)中去;MOVCX,2A50H②立即數(shù)只能作源操作數(shù),不能作目的操作數(shù);③以A~F打頭的數(shù)字出現(xiàn)在指令中時(shí),前面必須加數(shù)字0。以免與其它符號(hào)相混淆(如:0AF22H)。2/3/202313§3-18086的尋址方式——寄存器尋址方式
二、寄存器尋址方式
(RegisterAddressing)
1.含義:操作數(shù)包含在寄存器中,寄存器的名稱由指令指定。2.特點(diǎn):16位操作數(shù):寄存器可以是AX、BX、CX、DX、SI、DI、SP和BP等。8位操作數(shù):寄存器AH、AL、BH、BL、CH、CL、DH和DL。3.作用:寄存器之間傳遞數(shù)據(jù)。
例MOVDX,AX解:AX)送到CX寄存器中。(AX內(nèi)容不變)(又例:MOVBL,AL)4.注意:源操作數(shù)的長(zhǎng)度必須與目的操作數(shù)—致。(注:以下尋址方式下,指令的操作數(shù)在存儲(chǔ)器中,要先求物理地址才能獲得操作數(shù)。)2/3/202314§3-18086的尋址方式——直接尋址方式三、直接尋址方式(DirectAddressing)
1.含義:存儲(chǔ)單元的有效地址EA(即:操作數(shù)的偏移地址)直接由指令給出。2.特點(diǎn):機(jī)器碼中,有效地址存放在代碼段中指令的操作碼之后,而該地址單元中的數(shù)據(jù)總是存放在存儲(chǔ)器中。須先求出操作數(shù)的物理地址,再從存儲(chǔ)器中取得操作數(shù)。操作數(shù)的物理地址=16×DS+EA3.作用:實(shí)現(xiàn)對(duì)存儲(chǔ)單元的讀/寫操作。2/3/202315§3-18086的尋址方式——直接尋址方式
例MOVAX,[2000H]解:設(shè)DS=3000H;設(shè):(32000H)=1234H由指令得:EA=2000H(16位邏輯地址)物理地址=16×3000H+2000H=32000H(20位,20根地址線)則:AX=1234H指令執(zhí)行過程如圖所示。(注:如用AL替代AX,則AL=34H)2/3/202316§3-18086的尋址方式——直接尋址方式
2.段超越前綴MOV AX, ES:[500H]3.符號(hào)地址AREA1 EQU 0867H……MOV AX, AREA1等價(jià)為MOV AX, [AREA1]2/3/202317§3-18086的尋址方式——寄存器間接尋址方式四、寄存器間接尋址方式(RegisterIndirectAddressing)1.含義:操作數(shù)的有效地址放在寄存器中。2.特點(diǎn):使用寄存器:基址寄存器BX、BP,變址寄存器SI、DI。操作數(shù)的物理地址=16×DS+BX/SI/DI或=16×SS+BP3.作用:有效地址可以存放在寄存器中。
2/3/202318§3-18086的尋址方式——寄存器間接尋址方式例MOVBX,[SI]解:設(shè):DS=1000H,SI=2000H,(12000H)=318BH則:物理地址=16×DS+SI=10000H+2000H=12000H指令執(zhí)行后,BX=318BH,指令執(zhí)行過程如圖所示。2/3/202319
4.注意:▲寄存器名稱外必須加方括號(hào),以區(qū)別寄存器尋址方式;▲段超越前綴來從默認(rèn)段以外的段中取得數(shù)據(jù);例MOVBX,ES:[SI]▲關(guān)于默認(rèn)段:指定寄存器BX、SI或DI,默認(rèn)操作數(shù)存放在數(shù)據(jù)段DS中;(DS:BX,SI,DI)
指定寄存器BP,默認(rèn)操作數(shù)存放在數(shù)據(jù)段SS中;(SS:BP)
§3-18086的尋址方式——寄存器間接尋址方式2/3/202320§3-18086的尋址方式——寄存器相對(duì)尋址方式五、寄存器相對(duì)尋址方式(RegisterRelativeAddressing)
1.含義:操作數(shù)的有效地址是基址或變址寄存器的內(nèi)容與8位或16位位移量(Displacement)之和。即
[BX]/[BP]EA=+8位偏移量/16位偏移量[SI]/[DI]2.特點(diǎn):使用:BX、BP、SI、DI。操作數(shù)的物理地址=16×DS+BX/SI/DI+COUNT或=16×SS+BP+COUNT
2/3/202321§3-18086的尋址方式——寄存器相對(duì)尋址方式例MOVBX,COUNT[SI];或:MOVBX,[COUNT+SI]解:設(shè):DS=3000H,SI=2000H,位移量COUNT=4000H,(36000H)=318BH則:物理地址=16×DS+SI+COUNT=30000H+2000H+4000H=36000H指令執(zhí)行后,BX=318BH4030002/3/202322
3.注意:▲寄存器名稱外必須加方括號(hào),位移量可以在括號(hào)內(nèi),也可以在括號(hào)外;▲段超越前綴來從默認(rèn)段以外的段中取得數(shù)據(jù);例MOVDH,ES:ARRAY[SI]▲關(guān)于默認(rèn)段:指定寄存器BX、SI或DI,默認(rèn)操作數(shù)存放在數(shù)據(jù)段DS中;(DS:BX,SI,DI)
指定寄存器BP,默認(rèn)操作數(shù)存放在數(shù)據(jù)段SS中;
(SS:BP)
§3-18086的尋址方式——寄存器相對(duì)尋址方式2/3/202323§3-18086的尋址方式——基址變址尋址方式六、基址變址尋址方式(RegisterRelativeAddressing)1.含義:操作數(shù)的有效地址是一個(gè)基址寄存器(BX、BP)的內(nèi)容與一個(gè)變址寄存器(SI、DI)的內(nèi)容之和。2.特點(diǎn):使用的寄存器:基址寄存器BX、BP,變址寄存器SI、DI。操作數(shù)的物理地址=16×DS+BX+SI/DI或=16×SS+BP+SI/DI3.注意:▲寄存器SI和DI、BP和BX不能同時(shí)出現(xiàn)在[]中。2/3/202324§3-18086的尋址方式——基址變址尋址方式例MOVAX,[BX][SI];或:MOVBX,[BX+SI]解:設(shè):DS=3000H,SI=0500H,BX=1200H,(31700H)=0ABCDH則:物理地址=16×DS+SI+BX=30000H+0500H+1200H=31700H指令執(zhí)行后,AX=0ABCDH2/3/202325§3-18086的尋址方式——相對(duì)基址變址尋址方式七、相對(duì)基址變址尋址方式(RelativeBasedIndexedAddressing)
1.含義:操作數(shù)的有效地址是一個(gè)基址寄存器(BX、BP)和一個(gè)變址寄存器(SI、DI)的內(nèi)容,再加上8位或16位位移量之和。即[BX][SI]EA=++位移量[BP][DI]2.特點(diǎn):使用的寄存器:基址寄存器BX、BP,變址寄存器SI、DI。操作數(shù)的物理地址=16×DS+BX+SI/DI+8/16位位移量或=16×SS+BP+SI/DI+8/16位位移量3.注意:▲寄存器SI和DI、BP和BX不能同時(shí)出現(xiàn)在[]中。2/3/202326§3-18086的尋址方式——相對(duì)基址變址尋址方式例:MOVAX,MASK[BX][SI];或MOVBX,[MASK+BX+SI]解:設(shè):DS=3000H,SI=0300H,BX=1500H,MASK=0200H,(21A00H)=26BFH則:物理地址=16×DS+SI+BX+MASK=20000H+0300H+1500H+0200H=21A00H指令執(zhí)行后,AX=26BFH2/3/202327§3-18086的尋址方式——尋址方式總結(jié)
尋址方式總結(jié):▲帶方括號(hào)的地址表達(dá)式必須遵循下列規(guī)則:
1.立即數(shù)可以出現(xiàn)在方括號(hào)內(nèi),表示直接地址,如[2000H]。
2.只有BX、BP、SI、DI這四個(gè)寄存器可以出現(xiàn)在[]內(nèi),它們可以單獨(dú)出現(xiàn),也可以相加,或與常數(shù)相加,但:BX和BP寄存器、SI和DI寄存器不允許出現(xiàn)在同一個(gè)[]內(nèi)。
3.方括號(hào)表示相加,下面幾種寫法等價(jià):6[BX][SI];[BX+6][SI];[BX+SI+6]
2/3/202328§3-18086的尋址方式——尋址方式總結(jié)4.不同寄存器對(duì)應(yīng)不同的隱含段基址:SS:BP;DS:BX,SI,DI;物理地址=16×相應(yīng)段基址+EAEA=BX/BP+SI/DI+DISP(注:可以是單一寄存器、兩個(gè)寄存器組合、和DISP組合;DISP也可以為0)▲可用段超越前綴修改段基址。2/3/202329§3-18086的尋址方式——其它八、其它1.隱含尋址:指令中不指明操作數(shù),但有隱含規(guī)定的尋址方式。如:指令DAA;對(duì)寄存器AL中的數(shù)據(jù)進(jìn)行+進(jìn)制數(shù)調(diào)整,結(jié)果仍保留在AL中。2.I/O端口尋址:8086有直接端口和間接端口兩種尋址方式。
▲直接端口尋址方式:指令直接提供端口地址——8位立即數(shù)??稍L問端口00~FFH,即256個(gè)端口。例如,INAL,63H;表示將瑞口63H中的內(nèi)容送進(jìn)AL寄存器
2/3/202330§3-18086的尋址方式——其它
3.一條指令有多種尋址方式:源操作數(shù)和目的操作數(shù)同樣適用上述尋址方法。例MOV[BX],AL解:設(shè):BX=3600H,DS=1000H,AL=05H則:目的操作數(shù)的物理地址=16×DS+BX=10000H+3600H=13600H指令執(zhí)行結(jié)果為(13600H)=05H?!g接端口尋址方式:端口地址由寄存器DX提供,端口號(hào)為0000—FFFFH。例如,MOV DX,213H ;DX=口地址號(hào)213H INAL,DX ;AL←端口213H中的內(nèi)容2/3/202331例3.DS=1000H,ES=2000H,SS=3500H,SI=00A0H,DI=0024H,BX=0100H,BP=0200H,VAL=0030H(1)MOVAX, [100H]直接尋址方式,10100H
物理地址=DS×10H+100H=10000H+0100H=10100H(2)MOVAX, VAL直接尋址方式,10030H
物理地址=DS×10H+VAL=10000H+0030H=10030H
(3)MOVAX, [BX] 寄存器間接尋址,10100H
物理地址=DS×10H+BX=10000H+0100H=10100H(4)MOVAX, ES:[BX]寄存器間接尋址,20100H
物理地址=ES×10H+BX=20000H+0100H=20100H(5)MOVAX, [SI] 寄存器間接尋址,100A0H物理地址=DS×10H+SI=10000H+00A0H=100A0H2/3/202332(6)MOVAX, [BX+10H]寄存器相對(duì)尋址,10110H物理地址=DS×10H+BX+10H=10000H+0100H+10H=10110H(7)MOVAX, [BP] 寄存器間接尋址,35200H物理地址=SS×10H+BP=35000H+0200H=35200H(8)MOVAX, VAL[BP][SI] 相對(duì)基址變址尋址,352D0H物理地址=SS×10H+BP+SI+VAL=35000H+0200H+00A0H+0030H=352D0H(9)MOVAX, VAL[BX][DI] 相對(duì)基址變址尋址,10154H物理地址=DS×10H+BX+DI+VAL=10000H+0100H+0024H+0030H=10154H(10)MOVAX, [BP][DI] 基址變址尋址,35224H物理地址=SS×10H+BP+DI
=35000H+0200H+0024H=35224H2/3/202333§3-38086的指令系統(tǒng)
§3-38086的指令系統(tǒng)
——
分類
分為以下六類:
數(shù)據(jù)傳送指令
算術(shù)運(yùn)算指令
邏輯運(yùn)算和移位指令
字符串處理指令
控制轉(zhuǎn)移指令
處理器控制指令2/3/202334一、數(shù)據(jù)傳送指令注:◎數(shù)據(jù)傳送指令共14條;◎除SAHF和POPF指令外,對(duì)標(biāo)志位均沒有影響?!?-38086的指令系統(tǒng)
——數(shù)據(jù)傳送指令
2/3/202335指令的共同特點(diǎn)是:
1、除POPF和SAHF指令外,這類指令的操作結(jié)果不會(huì)影響FR寄存器中的標(biāo)志。
2、指令中有兩個(gè)操作數(shù),目的操作數(shù)和源操作數(shù),其執(zhí)行過程為:目的源,當(dāng)指令中僅列出一個(gè)操作數(shù)時(shí),另一操作數(shù)為隱含?!?-38086的指令系統(tǒng)
——數(shù)據(jù)傳送指令
2/3/2023361.通用數(shù)據(jù)傳送指令(GeneralPurposeDataTranfer):§3-38086的指令系統(tǒng)
——數(shù)據(jù)傳送指令
⑴MOV傳送指令(Move)指令格式:MOV目的,源指令功能:實(shí)現(xiàn)CPU的內(nèi)部寄存器間或寄存器與存儲(chǔ)器間的數(shù)據(jù)傳送。例:MOVAX,0FF00H;MOV[DI],AX;MOVCX,[1000H];MOVBL,40MOVWORDPTR[SI],01H;MOVAL,BL;2/3/202337格式1:MOVreg/mem,immMOVAX,2050HMOVCL,58HMOVBYTEPTR[BX],55HMOVWORDPTR[BX],55H格式2:MOVseg/reg/mem,regMOVDS,AXMOVES,AXMOVSS,AX§3-38086的指令系統(tǒng)
——數(shù)據(jù)傳送指令
2/3/202338
格式3:MOVseg/reg,memMOVDS,[BX]/MOVES,[BP+SI+25H]MOVAX,[2050H]/MOVAL,[2050H]注意:MOVmem,mem形式的指令是非法指令,也就是說,如果一條指令有兩個(gè)操作數(shù),不允許兩個(gè)操作數(shù)都是存儲(chǔ)器數(shù),如下列指令為非法指令:MOV[BX],[2050H]/MOV[2050H],[BX+SI]該項(xiàng)規(guī)定不僅適用于“MOV”類指令,也適用于其他各類指令(串操作除外)。記住:CS不能作目的操作數(shù)§3-38086的指令系統(tǒng)
——數(shù)據(jù)傳送指令
格式4:MOVreg/mem,segMOVAX,DS/MOVBX,ES/MOVAX,CSMOV[SI],DS/MOV[BX+SI],CSCS可以作源操作數(shù)2/3/202339§3-38086的指令系統(tǒng)
——數(shù)據(jù)傳送指令
注意:▲指令中至少要有—項(xiàng)明確說明傳送的是字節(jié)還是字,兩個(gè)操作數(shù)類型要匹配;▲IP寄存器不能用作源操作數(shù)或目的操作數(shù);▲立即數(shù)和CS寄存器不能用作目的操作數(shù);▲除了源操作數(shù)為立即數(shù)的情況外,兩個(gè)操作數(shù)中必有一個(gè)是寄存器,但不能都是段寄存器;這就是說,MOV指令不能在兩個(gè)存儲(chǔ)單元之間直接傳送數(shù)據(jù),也不能在兩個(gè)段寄存器之間直接傳送數(shù)據(jù)。2/3/202340§3-38086的指令系統(tǒng)
——數(shù)據(jù)傳送指令
通常,數(shù)據(jù)通常存放在數(shù)據(jù)段中。例如,某個(gè)程序的數(shù)據(jù)段:
DATA SEGMENT;數(shù)據(jù)段開始AREA1DB14H,3BH;定義字節(jié)變量AREA2DB3DUP(0);復(fù)制操作ARRAYDW3l00H,01A6H;定義字變量STRINGDB‘GOOD’
DATA
ENDS;數(shù)據(jù)段結(jié)束匯編后,DATA將被賦予一個(gè)具體的段地址。各變量將自偏移地址0000H開始依次存放,各符號(hào)地址等于它們?cè)跀?shù)據(jù)段中的偏移量。AREA1的偏移地址為0000H,AREA2的偏移地址為0002H,ARRAY的偏移地址為0005H,STRING的偏移地址為0009H。2/3/202341§3-38086的指令系統(tǒng)
——數(shù)據(jù)傳送指令
例MOVDX,OFFSETARRAY解:ARRAY的偏移地址DX。(OFFSET:取后面的符號(hào)偏移地址的值)設(shè):ARRAY的定義如上圖所示則:DX=0005H例MOVAL,AREA1
;ALAREA1中的內(nèi)容14HMOVAREA2,AL ;0002H單元14H例MOVAX,TABLE[BP][DI]解:將地址為l6×SS+BP+DI+TABLE的字存儲(chǔ)單元中的內(nèi)容送進(jìn)AX。2/3/2023422)PUSH進(jìn)棧指令指令格式:PUSH源操作數(shù)指令功能:將源操作數(shù)壓入堆棧操作數(shù)要求:可以是16位通用寄存器、段寄存器、存儲(chǔ)器中的數(shù)據(jù)字,但不能是立即數(shù)。棧中的存儲(chǔ)單元作為目的操作數(shù),指令操作如下:①SP←SP-1,SS:[SP]←src高8位②SP←SP-1,SS:[SP]←src低8位例1:PUSH[BX];(設(shè)DS:[BX]字單元數(shù)據(jù)為55AAH)xxHxxHxxHAAH55HxxHSS:[SP]指令執(zhí)行前指令執(zhí)行后SS:[SP]§3-38086的指令系統(tǒng)
——數(shù)據(jù)傳送指令
2/3/202343指令格式:POP目的操作數(shù)(不包括CS?。?!);指令功能:從堆棧棧頂彈出一個(gè)字到目的操作數(shù)目的操作數(shù)要求:可以是16位通用寄存器、段寄存器、存儲(chǔ)單元,但CS不能作目的操作數(shù)。堆棧中的單元看作源操作數(shù),指令操作如下:①dest低8位←SS:[SP],SP←SP+1②dest高8位←SS:[SP],SP←SP+1例2:POPBX;設(shè)接在例1后執(zhí)行。AAH55HxxHSS:[SP]指令執(zhí)行前AAH55HxxHSS:[SP]指令執(zhí)行后55AAHBX3)POP出棧指令§3-38086的指令系統(tǒng)
——數(shù)據(jù)傳送指令
2/3/202344使用堆棧指令:①堆棧操作是字操作指令,不要寫出“PUSHAL”等。②在“POP”指令中,“POPCS”為非法指令。③堆棧中的數(shù)據(jù)彈出后,數(shù)據(jù)并沒有在堆棧中消失,除非壓入新數(shù)據(jù),畫圖時(shí)注意。④堆棧操作指令不影響標(biāo)志。⑤使用堆棧指令保護(hù)和恢復(fù)現(xiàn)場(chǎng)時(shí),要注意指令的排列順序,如:PUSHAXPUSHBXPUSHDS......POPDSPOPBXPOPAX§3-38086的指令系統(tǒng)
——數(shù)據(jù)傳送指令
2/3/2023454)XCHG交換指令指令格式為:XCHG目的操作數(shù),源操作數(shù)指令功能:將目的操作數(shù)的內(nèi)容與源操作數(shù)的內(nèi)容交換OPRD:R,MEM注意:①操作數(shù)不能為立即數(shù);②源和目的不能同時(shí)為存儲(chǔ)單元;③段寄存器不能作為操作數(shù)?!?-38086的指令系統(tǒng)
——數(shù)據(jù)傳送指令
例
設(shè)AX=2000H,DS=3000H,BX=1800H,(3lA00H)=1995H。則執(zhí)行指令XCHGAX,[BX+200H]后,結(jié)果如何?解:把內(nèi)存中的一個(gè)字與AX中的內(nèi)容進(jìn)行交換。源操作數(shù)的物理地址=3000H×10H+1800H+200H=31A00H,指令執(zhí)行后:AX=1995H,(3lA00H)=2000H2/3/202346§3-38086的指令系統(tǒng)
——數(shù)據(jù)傳送指令
5)XLAT換碼指令(查表轉(zhuǎn)換) 指令格式:XLAT(轉(zhuǎn)換表)
指令功能:將[BX+AL]的內(nèi)容送到AL
XLAT指令使用步驟:使用之前必須先建立一個(gè)表格,表格中的內(nèi)容是所需要轉(zhuǎn)換的代碼;將轉(zhuǎn)換表的起始地址裝入BX寄存器;欲查的某項(xiàng)與表頭地址的位移量AL,即表格最多包含256個(gè)字節(jié);執(zhí)行XLAT指令后,根據(jù)位移量從表中查到轉(zhuǎn)換后的代碼值A(chǔ)L寄存器中。2/3/202347
§3-38086的指令系統(tǒng)
——數(shù)據(jù)傳送指令
例若十進(jìn)制數(shù)字0~9的LED七段碼對(duì)照表如下表所示,試用XLAT指令求數(shù)字5的七段碼值。解:程序如下:TABELDB40H,79H,24H,30H,19H ;建表,表格起始地址為TABLEDB12H,02H,78H,00H,18H ;七段碼存于對(duì)TABLE的;位移量為0~9的單元位移 ……………MOV AL,5 ;AL數(shù)字5的位移量MOV BX,OFFSETTABLE ;BX表格首地址XLATTABLE ;查表得:AL=12H2/3/202348
§3-38086的指令系統(tǒng)
——數(shù)據(jù)傳送指令
2.輸入輸出指令(InputandOutput):IN指令:指定端口中的數(shù)據(jù)→累加器OUT指令:累加器中的數(shù)據(jù)→指定端口⑴IN輸入指令(Input)
指令格式:
①INAL,端口地址;端口地址(00~FFH)直接包含在IN指令里或INAX,端口地址;共允許尋址256個(gè)端口。直接尋址
②INAL,DX;端口地址>0FFH時(shí),先將端口號(hào)送DX寄存器,再執(zhí)行輸入操作?;騃NAX,DX;共允許尋址64K個(gè)端口。間接尋址指令功能:從8位端口讀入一個(gè)字節(jié)到AL寄存器,或從16位端口讀一個(gè)字到AX寄存器。注意:
16位端口由兩個(gè)地址連續(xù)的8位端口組成。
16位端口輸入:先將給定端口中的字節(jié)送進(jìn)AL;再把端口地址加1,然后將該端口中的字節(jié)讀入AH。2/3/202349§3-38086的指令系統(tǒng)
——數(shù)據(jù)傳送指令
例INAL,0F1H
;AL從F1H端口讀入一個(gè)字節(jié)INAX,80H ;AL80H口的內(nèi)容,AH81H口的內(nèi)容MOVDX,310H
;端口地址310H先送入DX中INAL,DX
;AL310H端口的內(nèi)容
2/3/202350§3-38086的指令系統(tǒng)
——數(shù)據(jù)傳送指令
⑵OUT輸出指令(Output)指令格式:①OUT端口地址,AL;端口地址(00~FFH)直接包含在IN指令里,或OUT端口地址,AX;共允許尋址256個(gè)端口。直接尋址②OUTDX,AL;端口地址>0FFH時(shí),先將端口號(hào)送DX寄存器,;再執(zhí)行輸出操作?;騉UTDX,AX;當(dāng)共允許尋址64K個(gè)端口。間接尋址指令功能:
將AL中的一個(gè)字節(jié)寫到一個(gè)8位端口,或把AX中的一個(gè)字寫到一個(gè)16位端口。注意:對(duì)16位端口進(jìn)行輸出操作時(shí),是對(duì)兩個(gè)連續(xù)的8位端口進(jìn)行輸出操作。2/3/202351§3-38086的指令系統(tǒng)
——數(shù)據(jù)傳送指令
例OUT85H,AL ;85H端口AL內(nèi)容
MOVDX,0FF4H ;端口地址DX=0FF4H OUTDX,AL ;0FF4H端口AL內(nèi)容MOVDX,300H ;DX指向300HOUTDX,AX ;300H端口AL內(nèi)容,301H端口AH內(nèi)容2/3/2023523.地址目標(biāo)傳送指令(AddressObjectTransfers):
§3-38086的指令系統(tǒng)
——數(shù)據(jù)傳送指令
共三條指令:傳送地址碼??蓚魉筒僮鲾?shù)的段地址和偏移地址。⑴LEA取有效地址指令(LoadEffectiveAddress)
指令格式:LEA目的,源
指令功能:源操作數(shù)地址的偏移量→目的操作數(shù)所在寄存器
要求:
源操作數(shù):必須是存儲(chǔ)單元;
目的操作數(shù):必須是一個(gè)除段寄存器之外的16位寄存器。
注意:與MOV指令的區(qū)別。2/3/202353§3-38086的指令系統(tǒng)
——數(shù)據(jù)傳送指令
例假設(shè)SI=1000H,DS=5000H,(51000H)=1234H
LEABX,[SI]
;執(zhí)行完該指令后,BX=l000H
MOVBX,[SI];執(zhí)行完該指令后,BX=1234H例LEABX,TABLE
;可用MOV指令代替LEA指令
MOVBX,OFFSETTABLE ;兩條指令等價(jià)。
例某數(shù)組含20個(gè)元素,每個(gè)元素占一個(gè)字節(jié),符號(hào)為:0~19。設(shè)DI指向數(shù)組開頭處,把序號(hào)為6的元素的偏移地址送到BX中,用什么指令來實(shí)現(xiàn)?解:LEABX,6[DI];只能用LEA實(shí)現(xiàn),不能用MOV2/3/202354§3-38086的指令系統(tǒng)
——數(shù)據(jù)傳送指令
⑵LDS將雙字指針?biāo)偷郊拇嫫骱虳S指令(LoadPointerusingDS)指令格式:LDS 目的,源指令功能:源操作數(shù)指定的存儲(chǔ)單元中的4字節(jié)地址指針
→一對(duì)目的寄存器。其中:前兩個(gè)字節(jié)(偏移地址)→指定的目的寄存器;(常用SI寄存器)
后兩個(gè)字節(jié)(段地址)→DS寄存器。操作數(shù)要求:源操作數(shù):必須是存儲(chǔ)單元(該單元開始的連續(xù)4個(gè)字節(jié)存放一個(gè)變量的地址指針);目的操作數(shù):必須是16位寄存器,常用SI寄存器,但不能用段寄存器。例設(shè):DS=1200H,(12450H)=0F346H,(12452H)=0A90H。執(zhí)行指令LDSSI,[450H]后,結(jié)果如何?解:SI=0F346H,DS=0A90H2/3/202355§3-38086的指令系統(tǒng)
——數(shù)據(jù)傳送指令
⑶LES將雙字指針?biāo)偷郊拇嫫骱虴S指令(LoadPointerusingES)
指令格式:LES 目的,源指令功能:源操作數(shù)指定的存儲(chǔ)單元中的4字節(jié)地址指針
→一對(duì)目的寄存器。其中:前兩個(gè)字節(jié)(偏移地址)→指定的目的寄存器;(常用DI寄存器)
后兩個(gè)字節(jié)(段地址)→ES寄存器。例設(shè):DS=0100H,BX=0020H,(01020H)=0300H,(01022H)=0500H。執(zhí)行指令LESDI,[BX]后,結(jié)果如何?解:DI=0300H,ES=0500H2/3/202356
4.標(biāo)志傳送指令(FlagTransfers):
§3-38086的指令系統(tǒng)
——數(shù)據(jù)傳送指令
讀取標(biāo)志指令:LAHF
(5、3、1為任意值)--標(biāo)志寄存器低8位→AH設(shè)置標(biāo)志指令:SAHF--標(biāo)志寄存器低8位←AH把標(biāo)志寄存器的內(nèi)容壓入堆棧:PUSHF從堆棧彈出到標(biāo)志寄存器:POPF1511109876543210OFDFIFTFSFZFAFPFCFAHD7D6D4D2D0參見“處理器控制命令”2/3/202357§3-38086的指令系統(tǒng)
——數(shù)據(jù)傳送指令
⑴LAHF標(biāo)志送到AH指令(LoadAHfromFlag)指令格式:LAHF指令功能:標(biāo)志寄存器SF、ZF、AF、PF和CF→AH寄存器的位7、6、4、2和0。注意:◎位5、3、1的內(nèi)容未定義,是任意值?!驁?zhí)行這條指令后,標(biāo)志位本身并不受影響。1511109876543210OFDFIFTFSFZFAFPFCFAHD7D6D4D2D02/3/202358§3-38086的指令系統(tǒng)
——數(shù)據(jù)傳送指令
⑵SAHFAH送標(biāo)志寄存器(StoreAHintoFlags)
指令格式:SAHF
指令功能:
AH內(nèi)容
→標(biāo)志寄存器。注意:◎位5、3、1的內(nèi)容未定義,是任意值。◎執(zhí)行這條指令后,高位標(biāo)志并不受影響。
1511109876543210OFDFIFTFSFZFAFPFCFAHD7D6D4D2D02/3/202359§3-38086的指令系統(tǒng)
——數(shù)據(jù)傳送指令
⑶PUSHF標(biāo)志入棧指令(PushFlagontoStack)指令格式:PUSHF指令功能:整個(gè)標(biāo)志寄存器的內(nèi)容
→
堆棧;
修改堆棧指針,使SPSP-2;指令執(zhí)行后對(duì)標(biāo)志位無影響。⑷POPF標(biāo)志出棧指令(PopFlagoffStack)指令格式:POPF指令功能:堆棧指針SP所指的一個(gè)字
→
標(biāo)志寄存器PSW;
修改堆棧指針,使SPSP+2。注意:▲要成對(duì)使用PUSHF和POPF,可對(duì)標(biāo)志寄存器進(jìn)行保存和恢復(fù)。▲常用在:過程(子程序)調(diào)用,中斷服務(wù)程序,對(duì)主程序的狀態(tài)(即標(biāo)志位)進(jìn)行保護(hù)。▲也可用來改變追蹤標(biāo)志TF。在8086指令系統(tǒng)中沒有直接改變TF(D8位)的指令。2/3/202360§3-38086的指令系統(tǒng)
——算術(shù)運(yùn)算指令二、算術(shù)運(yùn)算指令概述:算術(shù)運(yùn)算指令可處理4種類型的數(shù)無符號(hào)二進(jìn)制整數(shù)帶符號(hào)二進(jìn)制整數(shù)無符號(hào)壓縮+進(jìn)制整數(shù)(PackedDecimal)無符號(hào)非壓縮+進(jìn)制整數(shù)(UnpackedDecimal)一個(gè)8位二進(jìn)制數(shù)可看成4種不同類型的數(shù),所表示的數(shù)值亦不同。2/3/202361§3-38086的指令系統(tǒng)
——算術(shù)運(yùn)算指令數(shù)的表示:
二進(jìn)制數(shù):可以是8位或16位,若是帶符號(hào)數(shù),則用補(bǔ)碼表示。壓縮+進(jìn)制數(shù):一個(gè)字節(jié)中存放兩個(gè)BCD碼+進(jìn)制數(shù)。非壓縮+進(jìn)制數(shù):—個(gè)字節(jié)的低半字節(jié)存放+進(jìn)制數(shù),高半字節(jié)為全零。例如,對(duì)+進(jìn)制數(shù)字58:壓縮+進(jìn)制數(shù)表示:只需一個(gè)字節(jié),即01011000B非壓縮+進(jìn)制數(shù)表示:需兩個(gè)字節(jié),即00000101B和00001000B。4種數(shù)的類型的表示方法如下:2/3/202362§3-38086的指令系統(tǒng)
——算術(shù)運(yùn)算指令注意:算術(shù)運(yùn)算指令處理的數(shù)都必須是有效的,否則會(huì)導(dǎo)致錯(cuò)誤的結(jié)果。8086/8088指令系統(tǒng)提供:加、減、乘、除四種基本運(yùn)算指令:處理無符號(hào)或帶符號(hào)絕大部分算術(shù)運(yùn)算指令都影響狀態(tài)標(biāo)志位。加法和減法運(yùn)算指令:帶符號(hào)數(shù)和無符號(hào)數(shù)的加法和減法的運(yùn)算可以用同一條加法或減法指令來完成。乘法和的8位/16位二進(jìn)制數(shù)的算術(shù)運(yùn)算;調(diào)整操作指令:進(jìn)行壓縮的或非壓縮的+進(jìn)制數(shù)的算術(shù)運(yùn)算;除法運(yùn)算:分別設(shè)置不同乘、除法指令。2/3/202363§3-38086的指令系統(tǒng)
——算術(shù)運(yùn)算指令算術(shù)運(yùn)算指令的種類:2/3/2023641.加法指令(Addition)⑴ADD加法指令(Addition)
指令格式:ADD目的,
源
指令功能:目的
源
+目的
⑵ADC帶進(jìn)位的加法指令(AdditionwithCarry)
指令格式:ADC目的,
源
指令功能:目的
源
+
目的
+CF操作數(shù)的要求:(包括上兩條指令)源操作數(shù):可以是寄存器、存儲(chǔ)器、立即數(shù);目的操作數(shù):只能用寄存器、存儲(chǔ)單元。注意:
★源、目的操作數(shù)不能同時(shí)為存儲(chǔ)器,且類型必須一致,即都是字節(jié)或字;
★這兩條指令影響的標(biāo)志位為:CF、OF、PF、SF、ZF和AF。§3-38086的指令系統(tǒng)
——算術(shù)運(yùn)算指令2/3/202365§3-38086的指令系統(tǒng)
——算術(shù)運(yùn)算指令
例兩種加法指令的實(shí)例ADDAL,18H ;ALAL+18H
ADCBL,CL ;BLBL+CL+CFADCAX,DX ;AXAX+DX+CF
ADDAL,COST[BX]
;AL內(nèi)容和地址=DS:(COST+BX);的存儲(chǔ)字節(jié)相加,結(jié)果送ALADDCOST[BX],BL
;將BL與物理地址=DS:(COST+BX)的存;儲(chǔ)字節(jié)相加,結(jié)果留在該存儲(chǔ)單元中
例用加法指令對(duì)兩個(gè)8位16進(jìn)制數(shù)5EH和3CH求和,并分析加法運(yùn)算指令執(zhí)行后對(duì)標(biāo)志位的影響。解:MOVAL,5EH ;AL=5EH(94)MOVBL,3CH ;BL=3CH(60)ADDAL,BL ;結(jié)果AL=9AH2/3/202366§3-38086的指令系統(tǒng)——算術(shù)運(yùn)算指令討論:
ADD對(duì)標(biāo)志位的影響▲兩個(gè)數(shù)的相加過程:010111105EH=94
+00111100即:+3CH=60100110109AH=154運(yùn)算后標(biāo)志位:ZF=0,AF=1,CF=0,SF=l,PF=1,OF=1。▲對(duì)標(biāo)志的解釋:人為決定①兩個(gè)加數(shù)都看成無符號(hào)數(shù)時(shí),運(yùn)算結(jié)果為9AH,即+進(jìn)制數(shù)154。在這種情況下,SF和OF都沒有意義,我們只關(guān)心ZF和CF標(biāo)志,在BCD碼運(yùn)算或奇偶校驗(yàn)時(shí)才考慮AF或PF標(biāo)志。②兩個(gè)加數(shù)都當(dāng)成帶符號(hào)數(shù)時(shí),符號(hào)標(biāo)志SF和溢出標(biāo)志OF很重要,而進(jìn)位標(biāo)志CF沒有意義。帶符號(hào)數(shù)能表示的范圍-128~+127,而本例中,兩個(gè)正數(shù)94和60相加,其和為154,由于154超過了范圍,即產(chǎn)生了溢出,OF=12/3/202367§3-38086的指令系統(tǒng)
——算術(shù)運(yùn)算指令⑶INC增量指令(Increment)
指令格式:INC目的指令功能:目的目的+1操作數(shù)的要求:通用寄存器、內(nèi)存。注意:▲這條指令主要用在循環(huán)程序中,對(duì)地址指針和循環(huán)計(jì)數(shù)器等進(jìn)行修改;▲指令執(zhí)行后影響AF、OF、PF、SF和ZF,但不影響進(jìn)位標(biāo)志CF。▲該指令只有一個(gè)操作數(shù)時(shí),如果要使內(nèi)存單元的內(nèi)容增1,程序中必須說明該存儲(chǔ)單元是字還是字節(jié)。2/3/202368INC指令的兩個(gè)應(yīng)用例子:
例INCBL ;BL寄存器中內(nèi)容增1INCCX ;CX寄存器中內(nèi)容增1例INCBYTEPRR[BX]
;內(nèi)存字節(jié)單元內(nèi)容增1INCWORDPTR[BX]
;內(nèi)存字單元內(nèi)容增1其中:PTR為類型說明符,前面加BYTE說明操作數(shù)類型為字節(jié),加WORD則說明操作數(shù)類型為字?!?-38086的指令系統(tǒng)
——算術(shù)運(yùn)算指令2/3/202369§3-38086的指令系統(tǒng)
——算術(shù)運(yùn)算指令⑷AAA加法的ASCII調(diào)整指令(ASCIIAdjustforAddition)指令格式:AAA指令功能:將AL寄存器中的運(yùn)算結(jié)果調(diào)整為1位非壓縮+進(jìn)制數(shù),仍保留在AL。如果AF=1,表示向高位有進(jìn)位,則進(jìn)到AH寄存器中。使用前提:用ADD或ADC指令對(duì)兩個(gè)非壓縮+進(jìn)制數(shù)或ASCII碼表示的+進(jìn)制數(shù)作加法,運(yùn)算結(jié)果已存在AL。(注:非壓縮+進(jìn)制數(shù)的高4位為全0,低4位為+進(jìn)制數(shù)字0~9。例如,將9表示成00001001)2/3/202370調(diào)整過程:若AL低4位>9或AF=1則:①ALAL+6②用與操作(∧)將AL高4位清0③AF置1,CF置1,AHAH+l否則:將AL寄存器的高4位清0。§3-38086的指令系統(tǒng)
——算術(shù)運(yùn)算指令2/3/202371§3-38086的指令系統(tǒng)
——算術(shù)運(yùn)算指令例若AL=BCD9,BL=BCD5,求兩數(shù)之和。解:設(shè)AH=0,則運(yùn)算過程如下:
ADD AL,BL; 00001001……09H ;+00000101……05H ;______________________________ AAA ; 00001110……低4位>9 ;+00000110……加6調(diào)整 ;______________________________ ; 00010100 ;∧00001111……清高4位 ;______________________________ ; 00000100……AL=04H ; CF=1,AF=1,AH=1 ;結(jié)果為AX=0104H,表示非壓縮+進(jìn)制數(shù)14
ASCII碼表示的+進(jìn)制數(shù),高半字節(jié)均為3,運(yùn)算時(shí)需用AND指令將它屏蔽。只要使用AAA指令,可以不必屏蔽高半字節(jié),便能在AX中得到一個(gè)正確的非壓縮+進(jìn)制數(shù)。2/3/202372§3-38086的指令系統(tǒng)
——算術(shù)運(yùn)算指令例求ASCII碼表示的數(shù)9(39H)與5(35H)之和。解:設(shè)AH=0,則運(yùn)算過程如下: MOV AL,‘9’ ;AL=39H MOV BL,‘5’ ;BL=35H ADD AL,BL ; 00111001……‘9’ ;+ 00110101……‘5’ ;______________________________ AAA ; 01101110……低4位>9 ;+ 00000110……加6調(diào)整 ;______________________________ ; 01110100 ;∧ 00001111……清高4位 ;______________________________ ; 00000100……AL=4 ; CF=1,AF=1,AH=1 ;結(jié)果為AX=0104H,表示非壓縮+進(jìn)制數(shù)14在AAA指令后加上一條“或”指令ORAX,3030H,便使AX中的結(jié)果變成了ACSII碼3134H。2/3/202373§3-38086的指令系統(tǒng)
——算術(shù)運(yùn)算指令⑸DAA加法的+進(jìn)制調(diào)整指令(DecimalAdjustforAddition)
指令格式:DAA指令功能:將兩個(gè)壓縮BCD數(shù)相加后的結(jié)果調(diào)整為正確的調(diào)整過程:壓縮BCD數(shù)。使用前提:相加后的結(jié)果必須在AL中,才能使用DAA指令。①若AL的低4位>9或AF=1,則ALAL+6,對(duì)低4位進(jìn)行調(diào)整;②若AL的高4位>9或CF=1,則ALAL+60H,對(duì)高4位進(jìn)行調(diào)整,并使CF置1,否則CF置0。2/3/202374§3-38086的指令系統(tǒng)
——算術(shù)運(yùn)算指令例若AL=BCD38,BL=BCDl5,求兩數(shù)之和。解:運(yùn)其過程如下: ADD AL,BL ; 00111000……38H ;+ 00010101……15H ;______________________________ DAA ; 01001101……低4位>9 ;+ 00000110……加6調(diào)整 ;______________________________ ; 01010011……AL=53H ;結(jié)果為:AL=BCD53,CF=0調(diào)整過程:①若AL的低4位>9或AF=1,則ALAL+6,對(duì)低4位進(jìn)行調(diào)整;②若AL的高4位>9或CF=1,則ALAL+60H,對(duì)高4位進(jìn)行調(diào)整,并使CF置1,否則CF置0。2/3/202375§3-38086的指令系統(tǒng)
——算術(shù)運(yùn)算指令例若AL=BCD88,BL=BCD49,求兩數(shù)之和。解:運(yùn)算過程為: ADD AL,BL ; 10001000……88H ;+ 01001001……49H ;______________________________ DAA ; 11010001……AF=1,低4位<9 ;+ 00000110……加6調(diào)整 ;______________________________ ; 11010111……調(diào)整后,高4位>9 ;+ 01100000……加60H調(diào)整 ;______________________________ ; 00110111……AL=37H ;結(jié)果為:AL=BCD37,CF=1調(diào)整過程:①若AL的低4位>9或AF=1,則ALAL+6,對(duì)低4位進(jìn)行調(diào)整;②若AL的高4位>9或CF=1,則ALAL+60H,對(duì)高4位進(jìn)行調(diào)整,并使CF置1,否則CF置0。2/3/202376§3-38086的指令系統(tǒng)
——算術(shù)運(yùn)算指令2.減法指令(Subtraction)
⑴SUB減法指令(Subtraction)
指令格式:SUB目的,源指令功能:目的目的-源例SUBAX,BX ;AXAX—BX
SUBDX,1850H ;DXDX—1850H
2/3/202377§3-38086的指令系統(tǒng)
——算術(shù)運(yùn)算指令⑵SBB帶借位的減法指令(SubtractwithBorrow)
指令格式:SBB目的,源指令功能:目的目的-源-CF(SBB主要用于多字節(jié)減法中)例SBBAL,CL ;ALAL-CL-CF⑶DEC減量指令(Decrement)
指令格式:DEC目的指令功能;目的目的一l例DECBX ;BXBX—1DECWORDPTR[BP] ;堆棧段中位于[BP]偏置處的字減12/3/202378§3-38086的指令系統(tǒng)
——算術(shù)運(yùn)算指令⑷NEG取負(fù)指令(Negate)
指令格式:NEG 目的指令功能:目的0-目的,即:對(duì)目的操作數(shù)取負(fù)例NEGAX ;將AX中的數(shù)取負(fù)
NEGBYTEPTR[BX];對(duì)數(shù)據(jù)段中位于[BX]偏置處的;字節(jié)取負(fù)
⑸CMP比較指令(Compare)
指令格式:CMP 目的,源指令功能:目的-源
注意:結(jié)果不回送到目的操作數(shù)中,僅反映在標(biāo)志位上。
用途:用在比較兩個(gè)數(shù)大小又不破壞原操作數(shù)的場(chǎng)合。
例CMPAL,80H ;AL與80H作比較
CMPBX,DATA1 ;BX與數(shù)據(jù)段中偏移量為;DATA1處的字比較
2/3/202379§3-38086的指令系統(tǒng)
——算術(shù)運(yùn)算指令減法指令小結(jié):(上述五種指令都做減法運(yùn)算)①對(duì)于雙操作數(shù)指令(SUB、SBB、CMP):▲源操作數(shù)可以是寄存器、存儲(chǔ)器或立即數(shù);▲目的操作數(shù)可以是寄存器、存儲(chǔ)器,但不能為立即數(shù);▲兩個(gè)操作數(shù)不能同時(shí)為存儲(chǔ)器。②對(duì)于單操作數(shù)指令(DEC、NEG):▲目的操作數(shù)可以是寄存器、存儲(chǔ)器,但不能為立即數(shù);▲如果是存儲(chǔ)器操作數(shù),還必須說明其類型是字節(jié)還是字。③運(yùn)算之后,除DEC指令不影響CF標(biāo)志外,它們均影響OF、SF、ZF、AF、PF和CF標(biāo)志。④在減法操作后,如果源操作數(shù)大于目的操作數(shù),需要借位時(shí),進(jìn)位/借位標(biāo)志CF將被置1。
2/3/202380§3-38086的指令系統(tǒng)
——算術(shù)運(yùn)算指令例設(shè)AL=10110001B,DL=01001010B,求AL-DL。解:SUBAL,DL;與加法操作一樣,對(duì)結(jié)果的解釋取決于參與運(yùn)算的數(shù)的性質(zhì)運(yùn)算過程如下: 二進(jìn)制減法 當(dāng)成無符號(hào)數(shù) 當(dāng)成帶符號(hào)數(shù) 10110001 177 - 79- 01001010 -74 -)+74---------------------- ------------- ----------------- 01100111 103 +103 運(yùn)算后標(biāo)志位:ZF=0,AF=1,CF=0,SF=0,PF=0,OF=1討論:▲兩數(shù)為無符號(hào)數(shù):表示177與74的差是103。CF=0表示沒有借位,SF和OF無意義。▲兩數(shù)為帶符號(hào)數(shù):表示-79-(+74),結(jié)果應(yīng)為-153。但結(jié)果卻為正數(shù)(103),這是由于-153溢出造成的。此時(shí),SF和OF有重要意義。
2/3/202381§3-38086的指令系統(tǒng)
——算術(shù)運(yùn)算指令⑹AAS減法的ASCII調(diào)整指令(ASCIIAdjustforSubtraction)指令格式:AAS指令功能:將AL寄存器中的運(yùn)算結(jié)果調(diào)整為正確的非壓縮+進(jìn)制數(shù)之差,仍保留在AL中。
使用前提:用SUB或SBB指令對(duì)兩個(gè)非壓縮+進(jìn)制數(shù)或ASCII碼表示的+進(jìn)制數(shù)作減法,運(yùn)算結(jié)果已存在AL。
調(diào)整過程:若AL寄存器的低4位>9或AF=1,
則:①ALAL-6,AF置1
②將AL寄存器高4位清零
③AHAH-l,CF置l否則:不需要調(diào)整2/3/202382§3-38086的指令系統(tǒng)
——算術(shù)運(yùn)算指令
例設(shè)AL=BCD3,CL=BCD8,求兩數(shù)之差。解:運(yùn)算過程如下: SUB AL,CL ; 00000011……BCD3 ;- 00001000……BCD8 ;______________________________ DAA ; 11111011……低4位>9 ;- 00000110……減6調(diào)整 ;______________________________ ; 11110101 ;∧
00001111……高4位清0 ;_______________________________ ; 00000101……AL=05H ;結(jié)果為BCD5,CF=1,表示向高位有借位注意:▲如果有借位,則CF置1;▲AAS指令必須緊跟在SUB或SBB指令之后。調(diào)整過程:若AL寄存器的低4位>9或AF=1,
則:①ALAL-6,AF置1
②將AL寄存器高4位清零
③AHAH-l,CF置l否則:不需要調(diào)整2/3/202383§3-38086的指令系統(tǒng)
——算術(shù)運(yùn)算指令⑺DAS減法的+進(jìn)制調(diào)整指令(DecimalAdjustforSubtraction)
指令格式:DAS
指令功能:將AL中兩個(gè)壓縮BCD數(shù)相減后的結(jié)果調(diào)整為正確的壓縮BCD數(shù)。高4位和低4位分別進(jìn)行調(diào)整。
使用前提:在兩個(gè)壓縮+進(jìn)制數(shù)用SUB或SBB相減后,結(jié)果必須在AL中。調(diào)整過程:
①如果AL寄存器的低4位>9或AF=1
則:ALAL-6,AF置1
②如果AL高半字節(jié)>9或標(biāo)志位CF=l
則:ALAL-60H,CF置12/3/202384§3-38086的指令系統(tǒng)
——算術(shù)運(yùn)算指令例設(shè)AL=BCD56,CL=BCD98,求兩數(shù)之差。解:運(yùn)算過程如下: SUB AL,CL ; 01010110……BCD56 ;- 10011000……BCD98 ;_
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 器材統(tǒng)計(jì)報(bào)告范文大全
- 二零二五年度農(nóng)業(yè)資產(chǎn)抵押合同協(xié)議書含農(nóng)產(chǎn)品價(jià)格保險(xiǎn)條款
- MySQL教程(新體系-綜合應(yīng)用實(shí)例視頻)(第4版)習(xí)題及答案 -第07章
- 2025年度智能機(jī)器人研發(fā)人員標(biāo)準(zhǔn)勞動(dòng)合同
- 2025年度股東對(duì)公司無息借款及國際市場(chǎng)拓展協(xié)議
- 二零二五年度信息技術(shù)代管正規(guī)委托書
- 2015版ISO9001理解和應(yīng)用之四
- 2025福建德化閩投抽水蓄能有限公司招聘15人筆試參考題庫附帶答案詳解
- 獸醫(yī)知識(shí)培訓(xùn)課件
- 教育管理學(xué)知到智慧樹章節(jié)測(cè)試課后答案2024年秋河南大學(xué)
- 大樹移栽合同范本
- 柔性印刷技術(shù)探索-深度研究
- 【正版授權(quán)】 IEC 63310:2025 EN Functional performance criteria for AAL robots used in connected home environment
- 2025屆新高考政治沖刺備考復(fù)習(xí)把握高考趨勢(shì)+科學(xué)高效命題
- 最終版附件1:“跨學(xué)科主題學(xué)習(xí)”教學(xué)設(shè)計(jì)(2025年版)
- 2024年春季學(xué)期低年級(jí)學(xué)雷鋒講奉獻(xiàn)主題班會(huì)
- 2025年度環(huán)保咨詢與評(píng)估服務(wù)合同范本模板
- 2025至2030年中國煙用接裝紙數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- (2024)云南省公務(wù)員考試《行測(cè)》真題及答案解析
- 2022年“正確認(rèn)識(shí)新疆四史”《民族團(tuán)結(jié)鑄牢中華民族共同體意識(shí)》全文解讀
- 靜脈治療護(hù)理技術(shù)操作標(biāo)準(zhǔn)解讀
評(píng)論
0/150
提交評(píng)論