微機原理與接口技術(shù)課件_第1頁
微機原理與接口技術(shù)課件_第2頁
微機原理與接口技術(shù)課件_第3頁
微機原理與接口技術(shù)課件_第4頁
微機原理與接口技術(shù)課件_第5頁
已閱讀5頁,還剩53頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第六講杭州電子科技大學(xué)微機原理與接口技術(shù)10/18/20221§3-38086的指令系統(tǒng)

按功能可分為以下六類:數(shù)據(jù)傳送指令算術(shù)運算指令邏輯運算和移位指令串操作指令轉(zhuǎn)移指令處理器控制指令10/18/20222§3-38086的指令系統(tǒng)一、數(shù)據(jù)傳送指令(14條)通用數(shù)據(jù)傳送指令地址目標(biāo)傳送指令MOV字節(jié)或字的傳送LEA裝入有效地址PUSH如棧指令LDS裝入數(shù)據(jù)段寄存器POP出棧指令LES裝入附加段寄存器XCHG交換字或字節(jié)標(biāo)志傳送指令XLAT表轉(zhuǎn)換LAHF標(biāo)志寄存器低字節(jié)裝入AH輸入輸出指令SAHFAH內(nèi)容裝入標(biāo)志寄存器低字節(jié)IN輸入PUSHF標(biāo)志寄存器入棧指令OUT輸出POP出棧,并送入標(biāo)志寄存器10/18/20223§3-38086的指令系統(tǒng)-數(shù)據(jù)傳送指令通用數(shù)據(jù)傳送指令(GeneralPurposeDataTranfers)(1)MOV傳送指令(Move)

指令格式:MOV

目的,源

指令功能:實現(xiàn)CPU的內(nèi)部寄存器間或寄存器與存儲器間的數(shù)據(jù)傳送。例:MOVAX,0FF00HMOV[DI],AXMOVCX,[1000H]MOVBL,40HMOVWORDPTR[SI],01HMOVAL,BL通用寄存器AXAHBXALCXBHDXBLSICHDICLSPDHBPDL立即數(shù)存儲器段寄存器CS,DS,ES,SS10/18/20224§3-38086的指令系統(tǒng)-數(shù)據(jù)傳送指令注意:指令中至少要有一項明確說明傳送的是字節(jié)還是字;IP寄存器不能用作源操作數(shù)或目的操作數(shù);立即數(shù)和CS寄存器不能用作目的操作數(shù);除了源操作數(shù)為立即數(shù)的情況外,兩個操作數(shù)中必有一個是寄存器,但不能都是段寄存器;即MOV指令不能在兩個存儲單元之間直接傳送數(shù)據(jù),也不能在兩個段寄存器之間直接傳送數(shù)據(jù)。(1)MOV傳送指令(Move)10/18/20225§3-38086的指令系統(tǒng)-數(shù)據(jù)傳送指令(1)MOV傳送指令(Move)【數(shù)據(jù)段】通常,數(shù)據(jù)通常存放在數(shù)據(jù)段中。例如,某個程序的數(shù)據(jù)段:

DATA

SEGMENT

;數(shù)據(jù)段開始

AREA1

DB

14H,3BH

;定義字節(jié)變量

AREA2

DB

3DUP(0)

;復(fù)制操作

ARRAY

DW

3100H,01A6H

;定義字變量

STRING

DB

‘GOOD’

DATA

ENDS

;數(shù)據(jù)段結(jié)束匯編后,DATA將被賦予一個具體的段地址。各變量將自偏移地址0000H開始依次存放,各符號地址等于它們在數(shù)據(jù)段中的偏移量。143B000001‘G’000031A6‘O’‘O’‘D’AREA1AREA2ARRAYSTRING10/18/20226§3-38086的指令系統(tǒng)-數(shù)據(jù)傳送指令(1)MOV傳送指令(Move)AREA1的偏移地址為0000H;AREA2的偏移地址為0002H;ARRAY的偏移地址為0005H;STRING的偏移地址為0009H。143B000001‘G’000031A6‘O’‘O’‘D’AREA1AREA2ARRAYSTRING

DATA SEGMENT ;數(shù)據(jù)段開始

AREA1 DB14H,3BH;定義字節(jié)變量

AREA2 DB3DUP(0);復(fù)制操作

ARRAY DW3l00H,01A6H;定義字變量

STRING DB‘GOOD’DATA ENDS ;數(shù)據(jù)段結(jié)束10/18/20227§3-38086的指令系統(tǒng)-數(shù)據(jù)傳送指令(1)MOV傳送指令(Move)143B000001‘G’000031A6‘O’‘O’‘D’AREA1AREA2ARRAYSTRING例

MOVDX,OFFSETARRAY解:ARRAY的偏移地址DX。(OFFSET:取后面的符號偏移地址的值)

設(shè):ARRAY的定義如左圖所示

則:DX=0005H例:MOVAL,AREA1;ALAREA1中的內(nèi)容14H

MOVAREA2,AL;0002H單元14H10/18/20228§3-38086的指令系統(tǒng)-數(shù)據(jù)傳送指令(2)PUSH進棧指令(PushWordontoStack)指令格式:PUSH

指令功能:數(shù)據(jù)入堆棧

工作過程:SP←SP-2;(SP+1,SP)←源

源操作數(shù)要求:可以是16位通用寄存器、段寄存器、存儲器中的數(shù)據(jù)字,但不能是立即數(shù)。

最后一項

高地址棧底(SP)壓入彈出棧頂(SS)最大容量64KSP總是指向偶地址單元段址10/18/20229§3-38086的指令系統(tǒng)-數(shù)據(jù)傳送指令(3)POP出棧指令(PopWordoffStack)指令格式:POP

目的

指令功能:數(shù)據(jù)出堆棧

工作過程:目的

←(SP+1,SP) SP←SP+

2;目的操作數(shù)要求:

可以是16位通用寄存器、段寄存器或存儲單元,但CS不能作目的操作數(shù)。

最后一項

高地址棧底(SP)壓入彈出棧頂(SS)最大容量64KSP總是指向偶地址單元段址10/18/202210§3-38086的指令系統(tǒng)-數(shù)據(jù)傳送指令PUSH、POP指令實例10/18/202211§3-38086的指令系統(tǒng)-數(shù)據(jù)傳送指令(4)XCHG交換指令(Exchange)指令格式:XCHG

目的,源

指令功能:源操作數(shù)、目的操作數(shù)數(shù)據(jù)交換。操作數(shù)要求:交換可以在寄存器之間、寄存器與存儲器之間進行;段寄存器不能作為操作數(shù);不能直接交換兩個存儲單元中的內(nèi)容。例設(shè)AX=2000H,DS=3000H,BX=1800H,(31A00H)=1995H。則執(zhí)行指令XCHGAX,[BX+200H]后,結(jié)果如何?解:把內(nèi)存中的一個字與AX中的內(nèi)容進行交換。源操作數(shù)物理地址=3000×10H+1800H+200H=31A00H,指令執(zhí)行后:AX=1995H,(3lA00H)=2000H10/18/202212§3-38086的指令系統(tǒng)-數(shù)據(jù)傳送指令(5)XLAT表轉(zhuǎn)換指令(TableLookup-Translation)指令格式:

XLAT轉(zhuǎn)換表

或:XLAT

指令功能:使累加器(AL)中的一個值變換為內(nèi)存表格中的某一個值,一般用來實現(xiàn)代碼轉(zhuǎn)換,即查表功能。XLAT指令使用步驟:使用之前必須先建立一個表格,表格中的內(nèi)容是所需要轉(zhuǎn)換的代碼;將轉(zhuǎn)換表的起始地址裝入BX寄存器;欲查的某項與表頭地址的位移量AL,即表格最多包含256個字節(jié);執(zhí)行XLAT指令后,根據(jù)位移量從表中查到轉(zhuǎn)換后的代碼值A(chǔ)L寄存器中。10/18/202213§3-38086的指令系統(tǒng)-數(shù)據(jù)傳送指令(5)XLAT表轉(zhuǎn)換指令(TableLookup-Translation)例

若十進制數(shù)字0~9的LED七段碼對照表如表所示,試用XLAT指令求數(shù)字5的七段碼值。

十進制數(shù)字七段顯示碼十進制數(shù)字七段顯示碼040H512H179H602H224H778H330H800H419H918H十進制數(shù)的七段顯示碼表10/18/202214§3-38086的指令系統(tǒng)-數(shù)據(jù)傳送指令(5)XLAT表轉(zhuǎn)換指令(TableLookup-Translation)程序如下:

TABELDB40H,79H,24H,30H,19H;七段數(shù)碼表數(shù)據(jù)

DB12H,02H,78H,00H,18H;分別對應(yīng)0~9的七段字型碼

……………MOV AL,5

;AL數(shù)字5的位移量

MOV BX,OFFSETTABLE ;BX表格首地址

XLATTABLE ;查表得:AL=12H10/18/202215

§3-38086的指令系統(tǒng)——數(shù)據(jù)傳送指令

2.輸入輸出指令(InputnndOutput)IN指令:從數(shù)據(jù)端口輸入數(shù)據(jù)或從狀態(tài)端口輸入狀態(tài)字。OUT指令:輸出數(shù)據(jù)或命令給指定的I/O端口。

<1>

直接輸入輸出指令格式:INAL,PORT;AL(PORT)INAX,PORT;AX(PORT+1,PORT)OUTPORT,AL;(PORT)ALOUTPORT,AX;(PORT+1,PORT)AX注:PORT為輸入輸出端口號,范圍為0~255(00~

FFH)10/18/202216

<2>間接輸入輸出指令

格式:INAL,DX;

AL(DX)INAX,DX;AX(DX+1,DX)OUTDX,AL;(DX)ALOUTDX,AX;(DX+1,DX)AX

在間接輸入輸出指令之前,需將端口號送入DX寄存器。

MOVDX,XXXXH;例

OUT 85H,AL ;85H端口AL內(nèi)容

MOV DX,0FF4H ;端口地址DX=0FF4H OUT DX,AL ;FF4H端口AL內(nèi)容

MOV DX,300H ;DX指向300HOUT DX,AX ;300H端口

AL內(nèi)容,

301H端口AH內(nèi)容§3-38086的指令系統(tǒng)——數(shù)據(jù)傳送指令

10/18/202217

3.地址目標(biāo)傳送指令(AddressObjectTransfers):

專用于傳送地址碼的指令,它可以用來傳送操作數(shù)的段地址和偏移地址,含以下三條指令:

⑴LEA取有效地址指令(LoadEffectiveAddress)

指令格式:LEA目的,源

指令功能:取源操作數(shù)地址的偏移量,傳送到目的操作數(shù)

操作數(shù)要求:源操作數(shù)必須是存儲單元,目的操作數(shù)必須是一個除段寄存器之外的16位寄存器。使用時要注意與MOV指令的區(qū)別。例假設(shè)SI=1000H,DS=5000H,(51000H)=1234H

LEA BX,[SI];執(zhí)行完該指令后,BX=1000H(送偏移地址)

MOV BX,[SI];執(zhí)行完該指令后,BX=1234H(送內(nèi)容)§3-38086的指令系統(tǒng)——數(shù)據(jù)傳送指令

10/18/202218

⑵LDS將雙字指針?biāo)偷郊拇嫫骱虳S指令(LoadPointerusingDS)

指令格式:LDS 目的,源指令功能:從源操作數(shù)指定的存儲單元中,取出一個變量的4字節(jié)地址指針,送進一對目的寄存器。其中前兩個字節(jié)(表示變量的偏移地址)送到指令中指定的目的寄存器中,后兩個字節(jié)(表示變量的段地址)送入DS寄存器。操作數(shù)要求:源操作數(shù)必是存儲單元,該單元開始的連續(xù)4個字節(jié)存放一個變量的地址指針。目的操作數(shù)必須是16位寄存器,常用SI寄存器,但不能用段寄存器。例設(shè)DS=1200H,(12450H)=F346H,(12452H)=0A90H,

執(zhí)行指令LDSSI,[0450H]

后,SI=F346H,DS=0A90H注:源操作數(shù)的物理地址=DS×10H+450H=12450H§3-38086的指令系統(tǒng)——數(shù)據(jù)傳送指令

10/18/202219⑶LES將雙字指針?biāo)偷郊拇嫫骱虴S指令(LoadPointerusingEs)指令格式:LES 目的,源指令功能:與LDS指令的操作基本相同,不同的是:要將源操作數(shù)所指向的存儲單元里存放的地址指針中的段地址部分送到ES寄存器中,而不是DS寄存器,目的操作數(shù)常用DI寄存器。例

設(shè)DS=0100H,BX=0020H,(01020H)=0300H,(01022H)=0500H。執(zhí)行指令LESDI,[BX]

后,DI=0300H,ES=0500H注:源操作數(shù)的物理地址=DS×10H+BX=0100H×10H+0020H=01020H§3-38086的指令系統(tǒng)——數(shù)據(jù)傳送指令

10/18/202220

4.標(biāo)志傳送指令(FlagTransfers):

讀取標(biāo)志指令

:LAHF(5、3、0為任意值)

--標(biāo)志寄存器低8位AH設(shè)置標(biāo)志指令:SAHF

--標(biāo)志寄存器低8位AH,影響PSW把標(biāo)志寄存器的內(nèi)容壓入堆棧:PUSHF從堆棧彈出到標(biāo)志寄存器:POPF,影響PSW1511109876543210OFDFIFTFSFZFAFPFCFAHD7D6D4D2D0§3-38086的指令系統(tǒng)——數(shù)據(jù)傳送指令

10/18/202221§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)志位本身并不受影響。

◎這5個標(biāo)志送進AH后,AH便相當(dāng)于8080/8085的標(biāo)志寄存器,從而能對8080/8085程序進行轉(zhuǎn)換,使它們能運行在8086/8088系統(tǒng)上。1511109876543210OFDFIFTFSFZFAFPFCFAHD7D6D4D2D010/18/202222§3-38086的指令系統(tǒng)

——數(shù)據(jù)傳送指令

⑵SAHFAH送標(biāo)志寄存器(StoreAHintoFlags)

指令格式:SAHF

指令功能:AH內(nèi)容→標(biāo)志寄存器。

注意:

◎位5、3、1的內(nèi)容未定義,是任意值。

◎執(zhí)行這條指令后,高位標(biāo)志并不受影響。

◎為8080/8085提供兼容性。1511109876543210OFDFIFTFSFZFAFPFCFAHD7D6D4D2D010/18/202223§3-38086的指令系統(tǒng)

——數(shù)據(jù)傳送指令

⑶PUSHF標(biāo)志入棧指令(PushFlagontoStack)

指令格式:PUSHF

指令功能:將標(biāo)志寄存器PSW中的內(nèi)容壓入堆棧;并修改堆棧指針,使SPSP-2;

指令執(zhí)行后對標(biāo)志位無影響。⑷POPF標(biāo)志出棧指令(PopFlagoffStack)

指令格式:POPF

指令功能:將堆棧指針SP所指的一個字彈入標(biāo)志寄存器PSW;并修改堆棧指針,使SPSP+2。

注意:▲要成對使用PUSHF和POPF,可對標(biāo)志寄存器進行保存和恢復(fù)?!S迷冢哼^程(子程序)調(diào)用,中斷服務(wù)程序,對主程序的狀態(tài)(即標(biāo)志位)進行保護?!部捎脕砀淖冏粉櫂?biāo)志TF。在8086指令系統(tǒng)中沒有直接改變TF(D8位)的指令。10/18/202224§3-38086的指令系統(tǒng)

——算術(shù)運算指令二、算術(shù)運算指令算術(shù)運算指令可處理4種類型的數(shù):無符號二進制整數(shù)帶符號二進制整數(shù)無符號壓縮十進制整數(shù)(PackedDecimal)無符號非壓縮十進制整數(shù)(UnpackedDecimal)一個8位二進制數(shù)可看成4種不同類型的數(shù),所表示的數(shù)值亦不同。數(shù)的表示:二進制數(shù):可以是8位或16位,若是帶符號數(shù),則用補碼表示。壓縮十進制數(shù):一個字節(jié)中存放兩個BCD碼十進制數(shù)。非壓縮十進制數(shù):—個字節(jié)的低半字節(jié)存放十進制數(shù),高半字節(jié)為全零。例如,對十進制數(shù)字58:壓縮十進制數(shù)表示:只需一個字節(jié),即01011000B;非壓縮十進制數(shù)表示:需兩個字節(jié),即00000101B和00001000B。10/18/202225§3-38086的指令系統(tǒng)

——算術(shù)運算指令二進制碼(B)十六進制(H)無符號二進制(D)帶符號二進制(D)非壓縮十進制壓縮十進制00000111077+77071000100189137-119無效8911000101C5197-59無效無效4種類型數(shù)的表示方法8086/8088指令系統(tǒng)提供:加、減、乘、除運算指令:處理無符號或帶符號的8位/16位二進制數(shù)的算術(shù)運算;調(diào)整操作指令:進行壓縮的或非壓縮的十進制數(shù)的算術(shù)運算;加法和減法運算指令:帶符號數(shù)和無符號數(shù)的加法和減法的運算可以用同一條加法或減法指令來完成。乘法和除法運算:分別設(shè)置無符號數(shù)和帶符號數(shù)的乘、除法指令。絕大部分算術(shù)運算指令都影響狀態(tài)標(biāo)志位。10/18/202226§3-38086的指令系統(tǒng)

——算術(shù)運算指令加法減法ADD加法SUB減法ADC帶進位的加法SBB帶借位的減法INC增量DEC減量AAA加法的ASCII調(diào)整NEG取負(fù)DAA加法的十進制調(diào)整CMP比較除法AAS減法的ASCII調(diào)整DIV無符號數(shù)除法DAS減法的十進制調(diào)整IDIV整數(shù)除法乘法AAD除法的ASCII調(diào)整MUL無符號數(shù)乘法CBW把字節(jié)轉(zhuǎn)換成字IMUL整數(shù)除法CWD把字轉(zhuǎn)換成雙字AAM乘法的ASCII調(diào)整算術(shù)邏輯指令10/18/2022271.加法指令(Addition)⑴ADD加法指令(Addition)

指令格式:ADD目的,源指令功能:目的←源十目的⑵ADC帶進位的加法指令(AdditionwithCarry)

指令格式:ADC目的,源指令功能:目的←源十目的十CF注意:源操作數(shù)可以是寄存器、存儲器、立即數(shù);目的操作數(shù):只能用寄存器、存儲單元。源、目的操作數(shù)不能同時為存儲器,且類型必須一致,均為字節(jié)或字;這兩條指令影響的標(biāo)志位為:CF、OF、PF、SF、ZF和AF?!?-38086的指令系統(tǒng)

——算術(shù)運算指令10/18/202228§3-38086的指令系統(tǒng)

——算術(shù)運算指令例:兩種加法指令的實例

ADDAL,18H ;AL←

AL十18HADCBL,CL ;BL←

BL十CL十CFADCAX,DX ;AX←

AX十DX十CFADDAL,COST[BX];AL內(nèi)容和地址=DS:(COST+BX)的存儲字節(jié);相加,結(jié)果送ALADDCOST[BX],BL;將BL與物理地址=DS:(COST十BX)的存儲字節(jié)相加,結(jié)果留在該存儲單元中例:用加法指令對兩個8位16進制數(shù)5EH和3CH求和,并分析加法運算指令執(zhí)行后對標(biāo)志位的影響。解:MOVAL,5EH ;AL=5EH(94)

MOVBL,3CH ;BL=3CH(60)

ADDAL,BL ;結(jié)果AL=9AH10/18/202229§3-38086的指令系統(tǒng)

——算術(shù)運算指令討論ADD對標(biāo)志位的影響:▲兩個數(shù)的相加過程:

010111105EH=94

+00111100即:

+3CH=60100110109AH=154運算后標(biāo)志位:ZF=0,AF=1,CF=0,SF=l,PF=1,OF=1?!鴮?biāo)志的解釋(人為決定):①兩個加數(shù)都看成無符號數(shù)時,運算結(jié)果為9AH,即十進制數(shù)154。在這種情況下,SF和OF都沒有意義,我們只關(guān)心ZF和CF標(biāo)志,在BCD碼運算或奇偶校驗時才考慮AF或PF標(biāo)志。②兩個加數(shù)都當(dāng)成帶符號數(shù)時,符號標(biāo)志SF和溢出標(biāo)志OF很重要,而進位標(biāo)志CF沒有意義。帶符號數(shù)能表示的范圍-128~+127,而本例中,兩個正數(shù)94和60相加,其和為154,由于154超過了范圍,即產(chǎn)生了溢出,OF=110/18/202230§3-38086的指令系統(tǒng)

——算術(shù)運算指令⑶INC增量指令(Increment)

指令格式:INC目的指令功能:目的←目的十1

操作數(shù)的要求:通用寄存器、內(nèi)存。注意:▲這條指令主要用在循環(huán)程序中,對地址指針和循環(huán)計數(shù)器等進行修改;▲指令執(zhí)行后影響AF、OF、PF、SF和ZF,但不影響進位標(biāo)志CF?!撝噶钪挥幸粋€操作數(shù)時,如果要使內(nèi)存單元的內(nèi)容增1,程序中必須說明該存儲單元是字還是字節(jié)。例INCBL

;BL寄存器中內(nèi)容增1

INCCX

;CX寄存器中內(nèi)容增1INCBYTEPRR[BX];內(nèi)存字節(jié)單元內(nèi)容增1INCWORDPTR[BX];內(nèi)存字單元內(nèi)容增1

其中,PTR為類型說明符,前面加BYTE說明操作數(shù)類型為字節(jié),加WORD則說明操作數(shù)類型為字。10/18/202231§3-38086的指令系統(tǒng)

——算術(shù)運算指令⑷AAA加法的ASCII調(diào)整指令(ASCIIAdjustforAddition)

指令格式:AAA

指令功能:在用ADD或ADC指令對兩個非壓縮十進制數(shù)或ASCII碼表示的十進制數(shù)作加法后,運算結(jié)果已存在AL中,用此指令將AL寄存器中的運算結(jié)果調(diào)整為一位非壓縮十進制數(shù),仍保留在AL中。如果AF=1,表示向高位有進位,則進到AH寄存器中。(注:非壓縮十進制數(shù)的高4位為全0,低4位為十進制數(shù)字0~9。例如,將9表示成00001001)調(diào)整過程:若AL低4位>9或AF=1

則:①AL←AL十6②用與操作(∧)將AL高4位清0③AF置1,CF置1,AH←AH十l

否則,僅將AL寄存器的高4位清0。10/18/202232§3-38086的指令系統(tǒng)

——算術(shù)運算指令例若AL=BCD9,BL=BCD5,求兩數(shù)之和。解:設(shè)AH=0,則運算過程如下:

ASCII碼表示的十進制數(shù),高半字節(jié)均為3,運算時需用AND指令將它屏蔽。只要使用AAA指令,可以不必屏蔽高半字節(jié),便能在AX中得到一個正確的非壓縮十進制數(shù)。ADDAL,BL;00001001…9;+00000101…5

AAA;00001110…低4為>9;+00000110…加6調(diào)整;00010100

;^00001111…清高4位;00000100…AL=4

;CF=1,AF=1,AH=1;結(jié)果為AX=0104H,表示非壓縮十進制數(shù)14

10/18/202233§3-38086的指令系統(tǒng)

——算術(shù)運算指令例求ASCII碼表示的數(shù)9(39H)與5(35H)之和。

設(shè)AH=0,則運算過程如下:

在AAA指令后加上一條“或”指令ORAX,3030H,便使AX中的結(jié)果變成了ACSII碼3134H。MOVAL,‘9’;AL=39HMOVBL,‘5’;BL=35HADDAL,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,表示非壓縮十進制數(shù)14

10/18/202234§3-38086的指令系統(tǒng)

——算術(shù)運算指令⑸DAA加法的十進制調(diào)整指令(DecimalAdjustforAddition)

指令格式:DAA

指令功能:將兩個壓縮BCD數(shù)相加后的結(jié)果調(diào)整為正確的壓縮BCD數(shù)。注意:相加后的結(jié)果必須在AL中,才能使用DAA指令。調(diào)整過程:

①若AL的低4位>9或AF=1,則AL←AL十6,對低4位進行調(diào)整;

②若此時AL的高4位>9或CF=1,則AL←AL十60H,對高4位進行調(diào)整,并使CF置1,否則CF置0。10/18/202235§3-38086的指令系統(tǒng)

——算術(shù)運算指令例若AL=BCD88,BL=BCD49,求兩數(shù)之和。解運算過程為:MOVAL,88H;AL=88HMOVBL,49H;BL=49HADDAL,BL;10001000…88;+01001001…49DAA;11010001…AF=1;+00000110…加6調(diào)整;11010111…調(diào)整后高半字節(jié)>9

;+01100000…加60H調(diào)整;00110111…結(jié)果為AL=BCD37,CF=1

10/18/202236§3-38086的指令系統(tǒng)

——算術(shù)運算指令2.減法指令(Subtration)

⑴SUB減法指令(Subraction)

指令格式:SUB目的,源指令功能:目的←

目的-源

SUBAX,BX ;AX←AX-BXSUBDX,1850H;DX←DX-1850HSUBBL,[BX] ;BL中內(nèi)容減去物理地址=DS:(BX)處的字節(jié),結(jié)果存入BL

⑵SBB帶借位的減法指令(SubtractwithBorrow)

指令格式:SBB目的,源指令功能:目的←

目的-源-CF(SBB主要用于多字節(jié)減法中)例

SBBAL,CL

;AL←AL-CL-CF10/18/202237§3-38086的指令系統(tǒng)

——算術(shù)運算指令⑶DEC減量指令(Decrement)

指令格式:DEC目的指令功能:目的←

目的-l

DECBX ;BX←BX-1DECWORDPTR[BP] ;堆棧段中位于[BP]偏置處的字減1⑷NEG取負(fù)指令(Negate)指令格式:NEG目的指令功能:目的←0-目的,即對目的操作數(shù)取負(fù)

NEGAX ;將AX中的數(shù)取負(fù)

NEGBYTEPTR[BX];對數(shù)據(jù)段中位于[BX]偏置處的字節(jié)取負(fù)

⑸CMP比較指令(Compare)

指令格式:CMP目的,源指令功能:目的-源,結(jié)果不回送到目的操作數(shù)中,僅反映在標(biāo)志位上。用途:用在比較兩個數(shù)大小又不破壞原操作數(shù)的場合。10/18/202238§3-38086的指令系統(tǒng)

——算術(shù)運算指令減法指令小結(jié):(上述五種指令都做減法運算)①對于雙操作數(shù)指令(SUB、SBB、CMP):▲源操作數(shù)可以是寄存器、存儲器或立即數(shù);▲目的操作數(shù)可以是寄存器、存儲器,但不能為立即數(shù);▲兩個操作數(shù)不能同時為存儲器。②對于單操作數(shù)指令(DEC、NEG):▲目的操作數(shù)可以是寄存器、存儲器,但不能為立即數(shù);▲如果是存儲器操作數(shù),還必須說明其類型是字節(jié)還是字。③運算之后,除DEC指令不影響CF標(biāo)志外,其它均影響OF、SF、ZF、AF、PF和CF標(biāo)志。④在減法操作后,如果源操作數(shù)大于目的操作數(shù),需要借位時,進位/借位標(biāo)志CF將被置1。

10/18/202239§3-38086的指令系統(tǒng)

——算術(shù)運算指令

設(shè)AL=10110001B,DL=01001010B,求AL-DL。解:SUBAL,DL;與加法操作一樣,對結(jié)果的解釋取決于參與運算的數(shù)的性質(zhì),運算過程如下:

二進制減法當(dāng)成無符號數(shù)當(dāng)成帶符號數(shù)

10110001177-79

-01001010-74-)+7401100111103+103

運算后標(biāo)志位ZF=0,AF=1,CF=0,SF=0,PF=0,OF=1。討論:▲兩數(shù)為無符號數(shù):表示177與74的差是103。CF=0表示沒有借位,SF和OF無意義?!鴥蓴?shù)為帶符號數(shù):表示-79-(+74),結(jié)果應(yīng)為-153。但結(jié)果卻為正數(shù)(103),這是由于-153溢出造成的。此時,SF和OF有重要意義。

10/18/202240§3-38086的指令系統(tǒng)

——算術(shù)運算指令⑹AAS減法的ASCII調(diào)整指令(ASCIIAdjustforSubtraction)

指令格式:AAS

指令功能:將AL寄存器中的運算結(jié)果調(diào)整為正確的非壓縮十進制數(shù)之差,仍保留在AL中。使用前提:用SUB或SBB指令對兩個非壓縮十進制數(shù)或ASCII碼表示的十進制數(shù)作減法,運算結(jié)果已存在AL。調(diào)整過程:若AL寄存器的低4位>9或AF=1,

則:①AL←AL-6,AF置1

②將AL寄存器高4位清零

③AH←AH-l,CF置l

否則,不需要調(diào)整10/18/202241§3-38086的指令系統(tǒng)

——算術(shù)運算指令⑺DAS減法的十進制調(diào)整指令(DecimalAdjustforSubtracion)

指令格式:DAS

指令功能:將AL中兩個壓縮BCD數(shù)相減后的結(jié)果調(diào)整為正確的壓縮BCD數(shù)。高4位和低4位分別進行調(diào)整。使用前提:在兩個壓縮十進制數(shù)用SUB或SBB相減后,結(jié)果在AL中。調(diào)整過程:

①如果AL寄存器的低4位>9或AF=1

則:AL←AL-6,AF置1

②如果此時AL高半字節(jié)>9或標(biāo)志位CF=l

則:AL←AL-60H,CF置110/18/202242§3-38086的指令系統(tǒng)

——算術(shù)運算指令

設(shè)AL=BCD56,CL=BCD98,求兩數(shù)之差。解:運算過程如下:SUBAL,CL;01010110…BCD56;-10011000…BCD98DAS;10111110…低4位>9,CF=AF=1;-00000110…減6調(diào)整;10111000…調(diào)整后高半字節(jié)>9

;+01100000…減60H調(diào)整;01011000…BCD58,CF=1

;結(jié)果為AL=BCD58,CF=1,表示右借位10/18/202243§3-38086的指令系統(tǒng)

——算術(shù)運算指令

3.乘法指令(Multiply)⑴MUL無符號數(shù)乘法指令(Multiply)

指令格式:MUL源指令功能:把源操作數(shù)和累加器中的數(shù)都當(dāng)成無符號數(shù),然后將兩個數(shù)相乘,操作數(shù)可以是字節(jié)或字。

▲源操作數(shù)是一個字節(jié):原操作數(shù)與累加器AL中的內(nèi)容相乘,乘積為雙倍長的16位數(shù),高8位送到AH,低8位送AL。即

AX←AL*源。

▲源操作數(shù)是一個字:原操作數(shù)與累加器AX的內(nèi)容相乘,結(jié)果為32位數(shù),高位字放在DX寄存器中,低位字放在AX寄存器中。即

(DX,AX)←AX*源操作數(shù)要求:可以是寄存器、存儲單元,但不能是立即數(shù);源操作數(shù)是存儲單元時,必須在操作數(shù)前加B或W說明是字節(jié)還是字。

10/18/202244§3-38086的指令系統(tǒng)

——算術(shù)運算指令

MULDL ;AX←AL*DLMULCX;(DX,AX)←AX*CXMULB[SI] ;AX←AL*(內(nèi)存中某字節(jié)),B說明字節(jié)乘法

MULW[BX];(DX,AX)←AX*(內(nèi)存中某字),W說明字乘法

注意:▲MUL指令執(zhí)行后影響CF和OF標(biāo)志。如果結(jié)果的高半部分(字節(jié)操作為AH、字操作為DX)不為零,表明其內(nèi)容是結(jié)果的有效位,則CF和OF均置1。否則,CF和OF均清0。

據(jù)此可檢測并去除結(jié)果中的無效前導(dǎo)零?!朔ㄖ噶钍笰F、PF、SF和ZF的狀態(tài)不定。

設(shè)AL=55H,BL=14H,計算它們的積。

解:MULBL

結(jié)果:①AX=06A4H。

②由于AH=06H≠0,高位部分有效,所以置CF=1,OF=1。10/18/202245§3-38086的指令系統(tǒng)

——算術(shù)運算指令

例試計算FFH×FFH。解:用二進制表示成如下形式:

11111111×111111111111111000000001▲作為無符號數(shù):表示255×255=65025,結(jié)果正確。

▲作為帶符號數(shù):表示(一1)×(一1)=一511,顯然結(jié)果不正確。

▲用MUL指令作帶符號數(shù)的乘法,會得到錯誤的結(jié)果,必須用IMUL指令,才能使(一1)×(一1)得到正確的結(jié)果00000000

00000001。

10/18/202246§3-38086的指令系統(tǒng)

——算術(shù)運算指令⑵IMUL整數(shù)乘法指令(IntegerMultiply)

指令格式:IMUL源指令功能:把源操作數(shù)和累加器中的數(shù)都作為帶符號數(shù),進行相乘。

▲存放結(jié)果的方式與MUL相同:源操作數(shù)為字節(jié):與AL相乘,雙倍長結(jié)果送到AX中;源操作數(shù)為字:與AX相乘,雙倍長結(jié)果送到DX和AX中,最后給乘積賦予正確的符號?!鴮?biāo)志位的影響:乘積的高半部分不是低半部分的符號擴展(不是全0或全1),則高位部分為有效位,表示它是積的一部分,于是置CF=OF=1;結(jié)果的高半部分為全0或全1,表明它僅包含了符號位,那么使CF=OF=0。AF、PF、SF和ZF不定。10/18/202247§3-38086的指令系統(tǒng)

——算術(shù)運算指令⑶AAM乘法的ASCII調(diào)整指令(ASCIIAdjustforMultiply)

指令格式:AAM

指令功能:對AL中的兩個非壓縮十進制數(shù)相乘的乘積進行十進制數(shù)的調(diào)整,在AX中得到正確的非壓縮十進制數(shù)的乘積,高位在AH中,低位在AL中。調(diào)整過程:把AL寄存器內(nèi)容除以10,商放在AH中,余數(shù)在AL中。即:AH←AL/10所得的商AL←AH/10所得的余數(shù)

注意:▲兩個ASCII碼數(shù)相乘之前,先屏蔽掉每個數(shù)字的高半字節(jié),使每個字節(jié)包含一個非壓縮十進制數(shù)(BCD數(shù)),再用MUL指令相乘,乘積放到AL寄存器中,然后用AAM指令進行調(diào)整?!鴺?biāo)志位的影響:影響ZF、SF和PF,但AF、CF和OF無定義?!?086的指令系統(tǒng)中,十進制乘法運算不允許采用壓縮十進制數(shù),故調(diào)整指令僅此一條。

10/18/202248§3-38086的指令系統(tǒng)

——算術(shù)運算指令例求兩個非壓縮十進制數(shù)09和06之乘積。

解:MOVAL,09H ;置初值

MOVBL,06HMULBL ;AL09與06之乘積36HAAM ;調(diào)整得AH=05H(十位),AL=04H(個位)

結(jié)果:AX=0504H,即BCD數(shù)54。

例如果AL和BL中分別存放9和6的ASCII碼,求兩數(shù)之積。解:用以下指令實現(xiàn):

ANDAL,0FH ;屏蔽高半字節(jié)

ANDBL,0FHMULBL ;相乘

AAM ;調(diào)整如要將結(jié)果轉(zhuǎn)換成ASCII碼,可用指令ORAX,3030H實現(xiàn),使

AX=3534H。10/18/202249§3-38086的指令系統(tǒng)

——算術(shù)運算指令

4.除法指令(Division)⑴DIV無符號數(shù)除法指令(Division,unsigned)

指令格式:DIV源指令功能:對兩個無符號二進制數(shù)進行除法操作。

▲源操作數(shù)為字節(jié):16位被除數(shù)必須放在AX中,8位除數(shù)為源操作數(shù)。

AL←AX/源(字節(jié))的商

AH←AX/源(字節(jié))的余數(shù)

若被除數(shù)只有8位,必須把它放在AL中,并將AH清0?!床僮鲾?shù)為字:32位被除數(shù)在(DX,AX)中,16位除數(shù)作源操作數(shù)。

AX←(DX,AX)/源(字)的商

DX←(DX,AX)/源(字)的余數(shù)

若被除數(shù)、除數(shù)都是16位,則將16位被除數(shù)送到AX中,再將DX清0。

注意:▲源操作數(shù)可以是寄存器、存儲單元;▲DIV指令執(zhí)行后,所有標(biāo)志位均無定義。

10/18/202250§3-38086的指令系統(tǒng)

——算術(shù)運算指令⑵IDIV整數(shù)除法指令(IntegerDivision)

指令格式:IDIV源指令功能:對兩個帶符號二進制數(shù)進行除法操作(也稱為帶符號數(shù)除法)

注意:

▲操作與DIV相同;▲商和余數(shù)都是帶符號數(shù),且規(guī)定余數(shù)的符號和被除數(shù)的相同;▲指令執(zhí)行后,所有標(biāo)志位均無定義?!鵁o論對(DIV)還是(IDIV),都要注意溢出問題:字節(jié)操作時:被除數(shù)的高8位絕對值大于除數(shù)的絕對值,則產(chǎn)生溢出。(對于無符號數(shù),允許最大商為FFH;對于帶符號數(shù),允許商的范圍為-127~+127,或-81H~+7FH);字操作時:被除數(shù)的高16位絕對值大于除數(shù)的絕對值,則產(chǎn)生溢出。(對于無符號數(shù),允許最大商為FFFFH;對于帶符號數(shù),允許商的范圍為-32767~+32767,或-8001H~7FFFH)。10/18/202251§3-38086的指令系統(tǒng)

——算術(shù)運算指令▲帶符號數(shù)除法指令,字節(jié)操作時要求被除數(shù)為16位,字操作時要求被除數(shù)為32位,如果被除數(shù)不滿足這個條件,不能簡單地將高位置0,而應(yīng)該用符號擴展指令(SignExtension)將被除數(shù)轉(zhuǎn)換成除法指令所要求的格式。例兩個無符號數(shù)7A86H和04H相除,商應(yīng)為多少?解:MOVAX,7A86HMOVBL,04HDIVBL結(jié)果:①正確的商應(yīng)為1EA1H。

②由于BL中的除數(shù)04H為字節(jié),被除數(shù)為字,商1EA1H大于AL中能存放的最大無符號數(shù)FFH,產(chǎn)生除法錯誤中斷。10/18/202252§3-38086的指令系統(tǒng)

——算術(shù)運算指

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論