微型計(jì)算機(jī)第4章課件_第1頁(yè)
微型計(jì)算機(jī)第4章課件_第2頁(yè)
微型計(jì)算機(jī)第4章課件_第3頁(yè)
微型計(jì)算機(jī)第4章課件_第4頁(yè)
微型計(jì)算機(jī)第4章課件_第5頁(yè)
已閱讀5頁(yè),還剩84頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第4章80x86指令系統(tǒng)主要內(nèi)容:8086/8088指令格式8086/8088指令系統(tǒng)的尋址方式8086/8088指令系統(tǒng)80x8/Pentium指令系統(tǒng)Tuesday,January17,20231.18086/8088指令系統(tǒng)計(jì)算機(jī)是通過(guò)執(zhí)行指令序列來(lái)完成用戶的特定任務(wù)的,因此每種計(jì)算機(jī)都有一組指令集供用戶使用。這組指令集就稱為計(jì)算機(jī)的指令系統(tǒng)。指令系統(tǒng)中的每一條指令都對(duì)應(yīng)著微處理器要完成的一種規(guī)定的操作,這在設(shè)計(jì)微處理器時(shí)就事先規(guī)定好了,所以指令系統(tǒng)是表征一臺(tái)計(jì)算機(jī)性能的重要因素,它的格式與規(guī)模將直接影響到機(jī)器的硬件結(jié)構(gòu)。指令系統(tǒng)是程序員編寫(xiě)程序的基礎(chǔ),因此很好地掌握指令系統(tǒng)的有關(guān)知識(shí)是后續(xù)進(jìn)一步學(xué)習(xí)的關(guān)鍵。Tuesday,January17,20234.1.18086/8088指令編碼格式通常在指令格式中包含操作碼和操作數(shù)兩大部分。其中:操作碼表示計(jì)算機(jī)執(zhí)行什么操作,操作數(shù)指明參與操作的對(duì)象,或規(guī)定操作對(duì)象的地址(即操作對(duì)象的存放位置)。如何尋找操作數(shù)(即操作對(duì)象),這就是指令的尋址方式,它是由指令編碼格式指出的。操作碼操作數(shù)Tuesday,January17,2023opcodeopcodeMod字節(jié)opcodeMod字節(jié)opcodeMod字節(jié)opcodeMod字節(jié)opcodeMod字節(jié)Data/dispdisp(低)Data/disp(低)Data/disp(高)disp(高)disp(低)disp(高)DataData(低)Data(高)操作碼部分操作數(shù)部分一字節(jié)指令二字節(jié)指令三字節(jié)指令四字節(jié)指令五字節(jié)指令Tuesday,January17,2023disp(低)/Data(低)disp(高)/Data(高)

Data(低)Data(高)modregr/mWDOPCODE765432100172目的操作數(shù)源操作數(shù)源操作數(shù)目的操作數(shù)D=1D=0000001010011100101110111ALCLDLBLAHCHDHBHAXCXDXBXSPBPSIDIregW=0W=1寄存器尋址BX+SI+disp8BX+DI+disp8BP+SI+disp8BP+DI+disp8SI+disp8DI+disp8BP+disp8BX+disp8BX+SI+disp16BX+DI+disp16BP+SI+disp16BP+DI+disp16SI+disp16DI+disp16BP+disp16BX+disp16BX+SIBX+DIBP+SIBP+DISIDIdisp16BX000001010011100101110111ALCLDLBLAHCHDHBHAXCXDXBXSPBPSIDIW=0W=1寄存器尋址mod=11modr/m存儲(chǔ)器尋址有效地址的計(jì)算公式mod=00mod=01mod=10雙操作數(shù)指令中各字段定義Tuesday,January17,2023例4.1寫(xiě)出下面指令的機(jī)器語(yǔ)言編碼。

MOV[BX+DI-6],CL指令碼為:88H、49H、FAHOPCODEDWmodr/mregdisp81000100100100100例4.2寫(xiě)出下面指令的機(jī)器語(yǔ)言編碼。

ADDAX,[BX+DI+0826]03H81H26H08H000000DWmodr/mregDisp-L000000

1110001000Disp-HTuesday,January17,2023⑷操作數(shù)來(lái)自或送到I/O端口。這種操作數(shù)叫I/O操作數(shù)。在8086/8088系統(tǒng)中,操作數(shù)又可分為兩大類:數(shù)據(jù)操作數(shù)和地址操作數(shù)。因此,尋址方式也分為數(shù)據(jù)尋址方式和地址尋址方式兩大類。1.數(shù)據(jù)的尋址方式對(duì)于數(shù)據(jù)操作數(shù),有四種形式:①無(wú)操作數(shù)②單操作數(shù):可以是源操作數(shù),也可以是目的操作數(shù)。Tuesday,January17,2023③雙操作數(shù):一個(gè)是源操作數(shù),一個(gè)是目的操作數(shù)。④隱含操作數(shù):可能隱含一個(gè)操作數(shù)(源或目的),也可能隱含兩個(gè)操作數(shù)。源操作數(shù):在操作過(guò)程中其值不變的操作數(shù)。(可以提供數(shù)據(jù)的操作數(shù))目的操作數(shù):在操作后可被操作結(jié)果代替的操作數(shù)。(可以接收數(shù)據(jù)的操作數(shù))1)立即數(shù)尋址方式例如:MOVAL,80HMOVAX,1234HTuesday,January17,2023AL操作碼字節(jié)80H程序存儲(chǔ)器指令碼操作碼字節(jié)12H程序存儲(chǔ)器AL指令碼AH34H12H34H80H80H12H34HMOVAL,80HMOVAX,1234HTuesday,January17,20233)存儲(chǔ)器尋址方式存儲(chǔ)器尋址方式的操作數(shù)存放在存儲(chǔ)器單元中。因此,要存取操作數(shù)就必須知道其存儲(chǔ)器的單元地址。在指令中可以直接給出或間接給出操作數(shù)的地址,以達(dá)到存取操作數(shù)的目的。指令中給出的地址只是操作數(shù)的有效地址(EA),并且是放在方括號(hào)(“[]”)中。若要從存儲(chǔ)器中存取操作數(shù)還須得到實(shí)際的地址(物理地址)。物理地址=段地址左移四位+有效地址物理地址=CSDSSSES×10H+EATuesday,January17,2023

有效地址可以由以下三種地址分量組成:●位移量:它是存放在指令中的一個(gè)8位或16位的帶符號(hào)數(shù)?!窕罚核谴娣旁诨芳拇嫫鰾X或BP中的內(nèi)容?!褡冎罚核谴娣旁谧冎芳拇嫫鱏I或DI中的內(nèi)容。對(duì)于某條具體指令,這三個(gè)地址分量可有不同的組合。正是因?yàn)檫@三種地址分量有不同的組合,才使得對(duì)存儲(chǔ)器操作數(shù)的尋址產(chǎn)生了若干種不同的方式。Tuesday,January17,2023⑴直接尋址方式

MOVAL,[1064H]DS:20000H20000H21064H21064HAL操作碼641045…代碼段數(shù)據(jù)段4545+1064HEA=16位dispTuesday,January17,2023⑶寄存器相對(duì)尋址22064H22064H641045…代碼段數(shù)據(jù)段操作碼…CL4545+1064H21000HBX:1000HDS:20000H20000HEA=(BX)(BP)(DI)(SI)+8位disp16位dispMOVCL,[BX+1064H]Tuesday,January17,2023⑷基址加變址尋址方式

MOVAH,[BP][SI]56H……MAH40000HSS:40000HBP:2000H+43200H43200HSI:1200H56H56HEA=(BX)(BP)+(DI)(SI)Tuesday,January17,2023⑸基址加變址相對(duì)尋址

MOV[BX+DI+1234H],AHEA=(BX)(BP)+(DI)(SI)+8位disp16位disp3412…代碼段數(shù)據(jù)段操作碼…45AH40000HDS:40000HBX:0200H+DI:0010H1234H454541444H41444HTuesday,January17,2023⑵間接端口尋址方式

OUTDX,AL……0001H0002HI/O接口80AL1234DX1234H8080Tuesday,January17,20232.地址的尋址方式地址的尋址方式其時(shí)是程序轉(zhuǎn)移地址的尋址方式,也就是找出程序轉(zhuǎn)移的地址號(hào),而不是操作數(shù)。轉(zhuǎn)移地址可以在段內(nèi)(稱段內(nèi)轉(zhuǎn)移),也可以跨段(稱段間轉(zhuǎn)移)。尋求轉(zhuǎn)移地址的方法有以下四種:1)段內(nèi)直接尋址轉(zhuǎn)移的地址是當(dāng)前IP內(nèi)容和指令規(guī)定的8位或16位位移量之和。當(dāng)位移量是8位時(shí),稱為短程轉(zhuǎn)移;位移量是16位時(shí)稱為近程轉(zhuǎn)移。Tuesday,January17,2023這種尋址方式適用于條件轉(zhuǎn)移或無(wú)條件轉(zhuǎn)移類指令。但條件轉(zhuǎn)移只有8位位移量的短程轉(zhuǎn)移。+當(dāng)前IPEA有效轉(zhuǎn)移地址opcode位移量PM(CS)×10H+EA位移量Tuesday,January17,20232)段內(nèi)間接尋址方式程序轉(zhuǎn)移的地址存放在寄存器或存儲(chǔ)器單元中。指令執(zhí)行使用寄存器或存儲(chǔ)器單元的內(nèi)容來(lái)更新IP的內(nèi)容。寄存器IPDMIP例如:JMPBXJMPWORDPTRADDRJMPWORDPTR[BX+ARRY]Tuesday,January17,2023例:JMPWORDPTRBETA

本指令是無(wú)條件轉(zhuǎn)移指令,可使程序轉(zhuǎn)移到根據(jù)BETA指示的內(nèi)存單元中取出的偏移地址開(kāi)始執(zhí)行指令。指令采用的是段內(nèi)間接尋址方式。指令的操作數(shù)地址是一個(gè)符號(hào)地址BETA,所以可用數(shù)據(jù)尋址方式中的直接尋址方式得到存儲(chǔ)轉(zhuǎn)移偏移地址的內(nèi)存單元地址。設(shè)當(dāng)前(CS)=0120H,(IP)=2400H,BETA=0100H,(DS)=2000H,(20100H)=00H,(20101H)=27H,則存儲(chǔ)轉(zhuǎn)移偏移地址的內(nèi)存單元地址為:(DS)左移4位+BETA=20000H+0100H=20100H又(20100H)=00H,(20101H)=27H,即轉(zhuǎn)移物理地址為:PA=01200H+2700H=03900H執(zhí)行完這條指令后,IP的內(nèi)容變成2700H,CPU將轉(zhuǎn)移到存儲(chǔ)單元03900H去執(zhí)行程序。OPOP00H存儲(chǔ)器0120003600036010360203900當(dāng)前代碼段首址JMPWORDPTRBETA轉(zhuǎn)移地址00H27H01H200002010020101數(shù)據(jù)區(qū)首地址036032700HIPTuesday,January17,20233)段間直接尋址方式這種尋址方式是指令碼中直接給出16位的段地址和16位的偏移地址用來(lái)更新當(dāng)前的CS和IP內(nèi)容。opcodePM段地址偏移量IPCSTuesday,January17,20234)段間間接尋址方式這種尋址方式是由指令碼的尋址方式字節(jié)求出存放轉(zhuǎn)移地址的連續(xù)兩個(gè)字的地址。其低位字地址單元中存放的是偏移地址,高位字地址單元中存放的是轉(zhuǎn)移段地址。DMCSIP段地址偏移量Tuesday,January17,2023例:JMPDWORDPTRDELTA[BX]本例指令是無(wú)條件轉(zhuǎn)移指令,采用段間間接尋址方式。設(shè)當(dāng)前(CS)=1000H,(IP)=0100H,(DS)=2000H,(BX)=3000H,DELTA=0040H,(23040H)=00H,(23041H)=50H,(23042H)=00H,(23043H)=30H,則間接存儲(chǔ)地址按寄存器相對(duì)尋址為:(DS)左移4位+(BX)+DELTA=20000H+3000H+0040H=23040H于是,可得轉(zhuǎn)移地址為:3000H:5000H即轉(zhuǎn)移物理地址為:PA=30000H+5000H=35000H執(zhí)行本指令后,CS的內(nèi)容和IP的內(nèi)容分別變成3000H和5000H,程序轉(zhuǎn)移到存儲(chǔ)單元35000H開(kāi)始執(zhí)行。Tuesday,January17,2023OPOP40H存儲(chǔ)器1000010100101011010230000當(dāng)前代碼段首地址JMPDWORDPTRDELTA[BX]轉(zhuǎn)移代碼段首地址00H35000轉(zhuǎn)移地址10103…00H50H23040230412304200H2304330H20000數(shù)據(jù)段首地址…………IPCS5000H3000H指令執(zhí)行前:(CS)=1000H(IP)=0100H(DS)=2000H(BX)=3000HDELTA=0040H指令執(zhí)行后:(CS)=3000H(IP)=5000HTuesday,January17,2023opcodePM段地址偏移量IPCSDMCSIP段基址偏移量段間間接尋址方式段間直接尋址方式段間直接和間接尋址的區(qū)別Tuesday,January17,20234.1.38086/8088指令系統(tǒng)8086/8088指令系統(tǒng)大致可分為六大類指令:

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

算術(shù)運(yùn)算類指令

位操作類指令

串操作類指令

程序控制類指令

處理器控制類指令學(xué)習(xí)指令系統(tǒng)著重要掌握指令的基本操作功能、合法的尋址方式及其對(duì)狀態(tài)標(biāo)志位的影響。Tuesday,January17,2023

1.數(shù)據(jù)傳送類指令數(shù)據(jù)傳送指令的主要功能是傳送數(shù)據(jù)、地址和標(biāo)志。可分為通用數(shù)據(jù)傳送指令、輸入輸出指令、地址傳送指令和標(biāo)志傳送指令。(1)通用數(shù)據(jù)傳送指令通用數(shù)據(jù)傳送指令可完成字節(jié)或字?jǐn)?shù)據(jù)的傳送。它可分為數(shù)據(jù)傳送指令、堆棧操作指令、數(shù)據(jù)交換指令和字節(jié)轉(zhuǎn)換指令。

1)數(shù)據(jù)傳送指令指令格式:MOVdst,src

;(dst)←(src)src表示源操作數(shù)(字/字節(jié))立即數(shù)操作數(shù)寄存器操作數(shù)(包括段寄存器)存儲(chǔ)器操作數(shù)dst表示目的操作數(shù)(字/字節(jié))寄存器操作數(shù)(不包括IP,CS段寄存器)存儲(chǔ)器操作數(shù)Tuesday,January17,2023段寄存器CSDSSSES存儲(chǔ)器通用存儲(chǔ)器AXBXCXDXBPSPSIDIALBLCLDLAHBHCHDHMOV指令數(shù)據(jù)傳送方向16位8/16位8/16位16位8/16位

指令功能:將源操作數(shù)傳送(復(fù)制)到目的操作數(shù)。傳送方向:如下圖所示。

立即數(shù)Tuesday,January17,2023

2)堆棧操作指令堆棧操作指令是用來(lái)完成壓入和彈出堆棧操作的。8086/8088指令系統(tǒng)中提供了完成這兩種操作的相應(yīng)指令。①壓入堆棧指令指令格式及操作:PUSHsrc;(SP)←(SP)-2,;((SP)+1:(SP))←(src)src表示源操作數(shù)(字)寄存器操作數(shù)(包括段寄存器)存儲(chǔ)器操作數(shù)Tuesday,January17,2023注意:堆棧指令的操作數(shù)只能是字操作數(shù)(即16位操作數(shù)),且不能是立即數(shù)。進(jìn)棧操作(PUSH):先移后進(jìn)出棧操作(POP):先出后移②彈出堆棧指令指令格式及操作:POPdst;(dst)←((SP)+1:(SP)),;(SP)←(SP)+2dst表示目的操作數(shù)(字)寄存器操作數(shù)(不包括IP,CS段寄存器)存儲(chǔ)器操作數(shù)Tuesday,January17,20233)交換指令指令格式及操作:XCHGopr1,opr2;(opr1)←→(opr2)注意:交換指令的兩個(gè)操作數(shù)可以是寄存器操作數(shù),存儲(chǔ)器操作數(shù),但都不能是立即數(shù)操作數(shù),也不能同時(shí)為存儲(chǔ)器操作數(shù);寄存器操作數(shù)是指通用寄存器,不包括段寄存器。也就是說(shuō),交換指令是完成寄存器與寄存器、寄存器與存儲(chǔ)器之間的數(shù)據(jù)互換功能。交換的兩個(gè)數(shù)據(jù)可以是8位的,也可以是16位的。Tuesday,January17,20234)字節(jié)轉(zhuǎn)換指令指令格式及操作:XLATsrc_table;(AL)←((BX)+(AL))XLAT指令是用來(lái)將一種字節(jié)代碼轉(zhuǎn)換成另一種字節(jié)代碼。即將BX的內(nèi)容(代碼表格首址src_table)和AL的內(nèi)容(表格偏移量)相加作為有效地址。并從中讀出此內(nèi)存表格地址單元的內(nèi)容傳送到AL累加器中。XLAT指令還可以有以下幾種表示形式:XLAT;不寫(xiě)操作數(shù)XLATB;有B就不允許再寫(xiě)操作數(shù)。XLATES:src_table;重設(shè)段寄存器為ESTuesday,January17,2023[例]在內(nèi)存的數(shù)據(jù)段有一張16進(jìn)制數(shù)的ASCII碼表,其首地址為Hex_table,如下圖所示,為欲將十六進(jìn)制數(shù)0AH轉(zhuǎn)換成ASCII碼,則可用以下幾條指令實(shí)現(xiàn):MOVBX,OFFSETHex_tale ;(BX)←表首址MOVAL,0AH ;(AL)←十六進(jìn)制數(shù)AXLATHex_table ;查表轉(zhuǎn)換61000H61001H61002H6100AH6100BH6100FH60000HDS:60000HBX:1000HAX:000AH+6100AHHex_tableHex_table+1Hex_table+2Hex_table+AHex_table+BHex_table+FASCII表31H32H41H42H30H46H………0AHALEA6100AH41H41HASCII表Hex_table=1000HTuesday,January17,2023(2)輸入/輸出指令輸入輸出指令可以分為兩大類:一類是直接端口地址的輸入/輸出指令;一類是通過(guò)DX寄存器間接端口地址的輸入/輸出指令。1)輸入指令①直接尋址的輸入指令指令格式及操作:INacc,port;(acc)←(port)其中:acc為8位或16位累加器AL/AX。port為8位端口地址,故可尋址256個(gè)端口。Tuesday,January17,2023②間接尋址的輸入指令指令格式及操作:INacc,DX;(acc)←((DX))其中:acc為8位或16位累加器AL/AX。DX為16位間接尋址的端口地址寄存器,故可尋址64K個(gè)端口。2)輸出指令①直接尋址的輸出指令指令格式及操作:OUTport,acc;(port)←(acc)Tuesday,January17,2023②間接尋址的輸出指令指令格式及操作:OUTDX,acc;(DX)←((acc))Tuesday,January17,2023(3)地址傳送指令1)取有效地址指令指令格式:LEAreg16,mem此指令的功能是將存放源操作數(shù)的16位偏移地址(即有效地址EA)送到一個(gè)16位的通用寄存器中。即源操作數(shù)必須是一個(gè)存儲(chǔ)器操作數(shù),目的操作數(shù)必須是一個(gè)寄存器操作數(shù)。例如:LEABX,bufferLEAAX,[BP][DI]LEADX,bety[BX][SI]Tuesday,January17,2023注意LEA指令和MOV指令的異同,比較下面兩組指令:不同:LEABX,buffer;將存儲(chǔ)器buffer的偏移地址送到BXMOVBX,buffer;將存儲(chǔ)器buffer的內(nèi) 容傳送到BX相同:LEABX,buffer MOVBX,OFFSETbuffer以上兩條指令都是將存儲(chǔ)器buffer的偏移地址送到BX。其中OFFSETbuffer表示存儲(chǔ)器偏移地址。Tuesday,January17,20232)地址指針裝入DS指令指令格式:LDSreg16,mem32此指令的功能是將源操作數(shù)所對(duì)應(yīng)的雙字長(zhǎng)的內(nèi)存單元中的高字內(nèi)容(一般為16位段基址)送入DS,低字內(nèi)容(一般為偏移地址)送入指令所指定的寄存器中。例如: LDSDI,[2130H]34H12H00H40H2130H2132HDMDIDS1234H4000HTuesday,January17,20233)地址指針裝入ES指令指令格式:LESreg16,mem32此指令的功能是將源操作數(shù)所對(duì)應(yīng)的雙字長(zhǎng)的內(nèi)存單元中的高字內(nèi)容(一般為16位段基址)送入ES,低字內(nèi)容(一般為偏移地址)送入指令所指定的寄存器中。例如: LESDI,[2130H]34H12H00H40H2130H2132HDMDIES1234H4000HTuesday,January17,2023(4)標(biāo)志傳送指令1)取標(biāo)志指令指令格式:LAHF2)置標(biāo)志指令指令格式:SAHFOFDFIFTFSFZFAFPFCFFLAGAHLAHF和SAHF指令操作示意圖Tuesday,January17,20233)標(biāo)志壓入堆棧指令指令格式及操作: PUSHF ;(SP)←(SP)-2, ((SP)+1;(SP))←(FLAG)4)標(biāo)志彈出堆棧指令指令格式及操作: POPF ;(FLAG)←((SP)+1;(SP)),(SP)←(SP)+2Tuesday,January17,2023在使用這些傳送類指令時(shí)應(yīng)注意以下幾點(diǎn):①目的操作數(shù)不能為立即數(shù)。②目的操作數(shù)為段寄存器(CS不能作為目的操作數(shù)),源操作數(shù)不能為立即數(shù)。③源操作數(shù)為非立即數(shù)時(shí),兩操作數(shù)之一必須為寄存器操作數(shù)。④操作數(shù)類型必須一致。⑤用BX、SI、DI來(lái)間接尋址時(shí),默認(rèn)的段寄存器為DS;用BP來(lái)間接尋址時(shí),默認(rèn)的段寄存器為SS。Tuesday,January17,2023⑥對(duì)于堆棧操作,源操作數(shù)不能為立即數(shù);CS寄存器的值可以壓入堆棧,但反之則不允許。⑦數(shù)據(jù)交換指令的兩個(gè)操作數(shù)任一都不能是立即數(shù)。⑧換碼指令的操作數(shù)是一種特殊的基址變址尋址方式,基址寄存器為BX,變址寄存器為AL。⑨除了SAHF和POPF指令外,其余指令都不會(huì)影響標(biāo)志。Tuesday,January17,20232、算術(shù)運(yùn)算類指令8086/8088有豐富的算術(shù)運(yùn)算指令,而且可以處理4種類型的數(shù)據(jù),如下表所示:數(shù)據(jù)類型數(shù)據(jù)范圍運(yùn)算可作累加器使用的寄存器或存儲(chǔ)器二進(jìn)制8位無(wú)符號(hào)0~255加減所有的通用寄存器或存儲(chǔ)器乘除AX寄存器16位無(wú)符號(hào)0~65535加減所有的通用寄存器或存儲(chǔ)器乘除AX、DX寄存器8位帶符號(hào)-128~+127加減所有的通用寄存器或存儲(chǔ)器乘除AX寄存器16位帶符號(hào)-32768~+32767加減所有的通用寄存器或存儲(chǔ)器乘除AX、DX寄存器十進(jìn)制壓縮型BCD0~99加減AX寄存器非壓縮型BCD0~9加減AX寄存器乘除AX寄存器Tuesday,January17,2023(1)加法指令在微處理器中,沒(méi)有專用的BCD碼運(yùn)算指令,使用二進(jìn)制運(yùn)算指令進(jìn)行BCD碼數(shù)的運(yùn)算,然后用BCD碼運(yùn)算調(diào)整指令進(jìn)行調(diào)整,重新得到BCD碼的結(jié)果。指令格式操作功能標(biāo)志位影響OSZAPCADDdst,src(dst)←(dst)+(src)○○○○○○ADCdst,src(dst)←(dst)+(src)+(CF)○○○○○○INCdst(dst)←(dst)+1○○○○○△AAAASCII碼調(diào)整指令×××○×○DAA壓縮型BCD調(diào)整指令△○○○○○Tuesday,January17,2023AAA指令的操作為:(非壓縮型BCD碼調(diào)整) 如果 (AL)∧0FH>9或(AF)=1 則 (AL)←(AL)+06H

(AH)←(AH)+1

(AF)←1 (CF)←(AF)

(AL)←((AL)∧0FH) 否則 (AL)←((AL)∧0FH)DAA指令的操作為:(壓縮型BCD碼調(diào)整) 如果 (AL)∧0FH>9,(AF)=1 則 (AL)←(AL)+06H

(AF)←1 如果 (AL)>9FH或(CF)=1 則 (AL)←(AL)+60H

(CF)←1Tuesday,January17,2023[例]要求計(jì)算兩個(gè)十進(jìn)制數(shù)之和,7+8=???捎靡韵轮噶顚?shí)現(xiàn):(非壓縮型BCD碼調(diào)整)MOVAX,0007H ;(AL)=07H,(AH)=00HMOVBL,08H ;(BL)=08HADDAL,BL ;(AL)=0FHAAA ;(AL)=05H,(AH)=01H ;(CF)=(AF)=1(壓縮型BCD碼調(diào)整)MOVAX,0007H ;(AL)=07H,(AH)=00HMOVBL,08H ;(BL)=08HADDAL,BL ;(AL)=0FHDAA ;(AL)=15H,(AH)=00H ;(CF)=0,(AF)=1Tuesday,January17,2023[例]要求計(jì)算兩個(gè)十進(jìn)制數(shù)之和,56+34=?。可用以下指令實(shí)現(xiàn):(壓縮型BCD碼調(diào)整)MOVAX,3456H ;(AL)=56H,(AH)=34HADDAL,AH ;(AL)=8AHDAA ;(AL)=90H[例]要求計(jì)算兩個(gè)BCD數(shù)的ASCII碼之和,即‘5’+‘9’=?。可用以下指令實(shí)現(xiàn):(ASCII碼調(diào)整)MOVAL,‘5’ ;(AL)=35HADDAL,‘9’ ;39H,(AL)=6EHMOVAH,0 ;(AH)=00HAAA ;(AH)=01H,(AL)=04HORAX,3030H ;(AX)=3134H,即‘34’Tuesday,January17,2023(2)減法指令指令格式操作功能標(biāo)志位影響OSZAPCSUBdst,src(dst)←(dst)-(src)○○○○○○SBBdst,src(dst)←(dst)-(src)-(CF)○○○○○○DECdst(dst)←(dst)-1○○○○○△NEGdst(dst)←0-(dst)○○○○○1CMPdst,src(dst)-(src)○○○○○○AAS非壓縮型BCD調(diào)整指令×××○×○DAS壓縮型BCD調(diào)整指令△○○○○○Tuesday,January17,2023AAS指令的操作為:(非壓縮型BCD碼調(diào)整)如果 (AL)∧0FH>9或(AF)=1則 (AL)←(AL)-06H

(AH)←(AH)-1 (AF)←1 (CF)←(AF)

(AL)←((AL)∧0FH)否則 (AL)←((AL)∧0FH)DAS指令的操作為:(壓縮型BCD碼調(diào)整)如果 (AL)∧0FH>9,(AF)=1則 (AL)←(AL)-06H

(AF)←1如果 (AL)>9FH或(CF)=1則 (AL)←(AL)-60H

(CF)←1Tuesday,January17,2023[例]要求計(jì)算兩個(gè)十進(jìn)制數(shù)之差,86-7=???捎靡韵轮噶顚?shí)現(xiàn):(非壓縮型BCD碼)MOVAX,0806H ;(AH)=08H,(AL)=06HSUBAL,07H ;(AX)=08FFHAAS ;(AX)=0709H[例]要求計(jì)算兩個(gè)十進(jìn)制數(shù)之差,134-56=???捎靡韵轮噶顚?shí)現(xiàn):(壓縮型BCD碼)MOVAX,5634H ;(AH)=56H,(AL)=34HSUBAL,AH ;(AL)=DEH,有借位DAS ;(AL)=78HTuesday,January17,2023(3)乘法指令指令格式操作功能標(biāo)志位影響OSZAPCMULsrc(AX)←(AL)×(src)(DX:AX)←(AX)×(src)○××××○IMULsrc(AX)←(AL)×(src)(DX:AX)←(AX)×(src)○××××○AAMBCD調(diào)整指令×○○×○×AL源操作數(shù)AL×AHAX源操作數(shù)AXDX×Tuesday,January17,2023AAM指令的操作為:(將二進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù))(AH)←(AL)/0AH的商;即AL除以10,商送AH(AL)←(AL)/0AH的余;即AL除以10,余數(shù)送AL例:要求進(jìn)行以下十進(jìn)制乘法運(yùn)算:79=?解:可編程序段如下:MOVAL,07H;(AL)=07HMOVBL,09H;(BL)=09HMULBL;(AX)=07H09H=003FH

AAM;(AH)=06H,(AL)=03HTuesday,January17,2023(4)除法指令指令格式操作功能標(biāo)志位影響OSZAPCDIVsrc(AL)←(AX)/(src)的商(AH)←(AX)/(src)的余數(shù)(AX)←(DX:AX)/(src)的商(DX)←(DX:AX)/(src)的余數(shù)××××××IDIVsrc(AL)←(AX)/(src)的商(AH)←(AX)/(src)的余數(shù)(AX)←(DX:AX)/(src)的商(DX)←(DX:AX)/(src)的余數(shù)××××××CBW若(AL)<80H,則(AH)←00H,否則(AH)←FFH△△△△△△CWD若(AX)<8000H,則(DX)←0000H,否則(DX)←FFFFH△△△△△△AADBCD調(diào)整指令×○○△○×Tuesday,January17,20238086/8088CPU執(zhí)行除法時(shí)規(guī)定:除數(shù)只能是被出數(shù)的一半字長(zhǎng)。當(dāng)被除數(shù)為16位時(shí),除數(shù)應(yīng)為8位;當(dāng)被除數(shù)為32位時(shí),除數(shù)應(yīng)為16位。AL源操作數(shù)AXAHAXAX源操作數(shù)DXDX商商余數(shù)余數(shù)8位16位16位32位除數(shù)除數(shù)被除數(shù)被除數(shù)Tuesday,January17,2023AAD指令的操作為:(十進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制數(shù))(AL)←(AH)0AH+(AL)(AH)←0

例:要進(jìn)行以下十進(jìn)制除法運(yùn)算:73÷2=?解:可編程序段如下:MOVAH,07H;(AH)=07HMOVAL,03H;(AL)=03HMOVBL,02H;(BL)=02H

AAD;(AL)=49H(即十進(jìn)制數(shù)73)DIVBL;(AL)=24H(商),(AH)=01H(余數(shù))

AAM;(AH)=03H,(AL)=06HTuesday,January17,20233.位操作類指令

位操作指令是對(duì)8位或16位的寄存器或存儲(chǔ)單元中的內(nèi)容按位進(jìn)行操作。這一類指令包括邏輯運(yùn)算指令、移位指令和循環(huán)移位指令等三組。

(1)邏輯運(yùn)算指令邏輯運(yùn)算類指令與算術(shù)運(yùn)算指令不同,算術(shù)指令是按字節(jié)或字進(jìn)行算術(shù)運(yùn)算,而邏輯運(yùn)算指令是把操作數(shù)按位來(lái)進(jìn)行邏輯運(yùn)算。Tuesday,January17,2023指令格式操作功能標(biāo)志位影響OSZAPCANDdst,src(dst)←(dst)(src)0○○×○0ORdst,src(dst)←(dst)(src)0○○×○0NOTdst(dst)←(dst)(dst)←0FFH-(dst)(dst)←0FFFFH-(dst)△△△△△△XORdst,src(dst)←(dst)(src)0○○×○0TESTdst,src(dst)(src)0○○×○0說(shuō)明:TEST相當(dāng)于AND運(yùn)算,但是不保存結(jié)果,僅影響標(biāo)志。Tuesday,January17,2023常見(jiàn)的用法舉例:①清進(jìn)位標(biāo)志位:ANDAX,AX或ORAL,AL等。②清零操作數(shù):XORAX,AX不僅把AX清零,而且也影響了狀態(tài)標(biāo)志。③把某幾位取反:用XOR指令,把要取反的位和1異或,不變的位和0異或。④清零或置位某幾位:用AND指令清零,用OR指令置位。Tuesday,January17,2023(2)移位操作指令該類指令的使用方法是:①移動(dòng)1位,用類似于SHLAX,1的格式②移動(dòng)n位,用類似于SHLAX,CL的格式指令格式操作功能標(biāo)志位影響OSZAPCSHLdst,1SHLdst,CL○×○○○○××○○○○SALdst,1SALdst,CL○×○○○○××○○○○SHRdst,1SHRdst,CL○×○○○○××○○○○SARdst,1SARdst,CL○×○○○○××○○○○CFdstCF0dstCF0dstCF0dstTuesday,January17,2023說(shuō)明:①邏輯移位適用于無(wú)符號(hào)數(shù),算術(shù)移位適用于有符號(hào)數(shù)。②邏輯左移和算術(shù)左移的機(jī)器碼完全相同,是助記符的兩種寫(xiě)法。Tuesday,January17,2023說(shuō)明: 循環(huán)移位常用來(lái)變換數(shù)據(jù)格式。指令格式操作功能標(biāo)志位影響OSZAPCROLdst,1ROLdst,CL○×○○○○××○○○○RORdst,1RORdst,CL○×○○○○××○○○○RCLdst,1RCLdst,CL○×○○○○××○○○○RCRdst,1RCRdst,CL○×○○○○××○○○○CFdstCFdstCFdstCFdstTuesday,January17,2023使用舉例[例一]利用循環(huán)移位指令可以對(duì)寄存器或存儲(chǔ)器中的任一位進(jìn)行測(cè)試。如要測(cè)試AL寄存器中的第5位的狀態(tài)是“0”還是“1”,則可利用以下指令實(shí)現(xiàn): MOVCL,5 ;(CL)移位次數(shù) RORAL,CL ;(CF)AL的第5位 JNCZERO ;若(CF)=0,轉(zhuǎn)ZARO

;否則 ZERO:Tuesday,January17,2023

[例二]

利用帶進(jìn)位循環(huán)移位指令可以實(shí)現(xiàn)將兩個(gè)以上寄存器或存儲(chǔ)器單元組合起來(lái)一起移位。如DX和AX兩個(gè)寄存器組成的32位數(shù)乘以2,可用以下兩條指令實(shí)現(xiàn):SHLAX,1;AX左移1位,(CF)AX的最高位RCLDX,1;DX帶進(jìn)位左移1位,DX的最低位(CF)具體操作如下圖:CFDXAX0②RCLDX,1①

SHLAX,1Tuesday,January17,20234.串操作指令串操作指令的特征是對(duì)數(shù)據(jù)塊,也稱數(shù)據(jù)串(字符串或數(shù)值串)進(jìn)行操作。其操作數(shù)為隱含操作數(shù),并且其中部分指令的兩個(gè)操作數(shù)可以同時(shí)是存儲(chǔ)器操作數(shù)。串傳送MOVS(Movestring)串比較CMPS(Comparestring)串掃描SCAS(Scanstring)串裝入LODS(Loadfromstring)串保存STOS(Storeintostring)Tuesday,January17,2023說(shuō)明:⑴串操作指令每次執(zhí)行完成一個(gè)字節(jié)或一個(gè)字的操作。⑵通常使用重復(fù)前綴來(lái)自動(dòng)完成一個(gè)數(shù)據(jù)塊(數(shù)據(jù)串)的操作。重復(fù)前綴:⑴REP重復(fù)⑵REPE/REPZ相等/為零則重復(fù)⑶REPNE/REPNZ不相等/不為零則重復(fù)Tuesday,January17,2023特點(diǎn):⑴串操作指令需要指明每次操作的數(shù)據(jù)串?dāng)?shù)據(jù)的類型:B-表示字節(jié)串,W-表示字串。

例如:MOVSB,CMPSW等。⑵串操作指令使用DS:SI作為源操作數(shù)的指針;ES:DI作為目的操作數(shù)的指針⑶使用DF來(lái)表示每次操作以后變址寄存器SI和DI的變化方向:CLD;DF=0SI,DI做增量變化B:+1或W:+2STD;DF=1SI,DI做減量變化B:-1或W:-2⑷使用CX來(lái)表示用重復(fù)前綴以后指令需要重復(fù)執(zhí)行的次數(shù)(通常是數(shù)據(jù)串的長(zhǎng)度)Tuesday,January17,2023指令格式操作功能標(biāo)志位影響OSZAPCMOVSDstring,SstringMOVSBMOVSW((ES):(DI))((DS):(SI))(SI)(SI)1或(SI)(SI)2(DI)(DI)1或(DI)(DI)2△△△△△△LODSSstringLODSBLODSW(AL)/(AX)((DS):(SI))(SI)(SI)1或(SI)(SI)2△△△△△△STOSDstringSTOSBSTOSW((ES):(DI))(AL)/(AX)

(DI)(DI)1或(DI)(DI)2△△△△△△CMPSSstring,DstringCMPSBCMPSW((DS):(SI))-((ES):(DI))(SI)(SI)1或(SI)(SI)2(DI)(DI)1或(DI)(DI)2○○○○○○SCASDstringSCASBSCASW(AL)-((ES):(DI))(DI)(DEI)1或(DI)(DI)2○○○○○○Tuesday,January17,2023指令前綴適用的指令操作功能標(biāo)志位影響OSZAPCREPMOVSSTOS(CX)0△△△△△△REPZ/REPEREPNZ/REPNECMPSSCAS(CX)0且(ZF)=1(CX)0且(ZF)=0○○○○○○Tuesday,January17,2023

5.控制轉(zhuǎn)移類指令能夠使程序的執(zhí)行流程發(fā)生改變的指令(1)無(wú)條件轉(zhuǎn)移指令指令名稱指令格式指令功能轉(zhuǎn)移范圍段內(nèi)直接短轉(zhuǎn)移JMPdisp8(IP)(IP)+disp8-128~+127段內(nèi)直接近轉(zhuǎn)移JMPdisp16(IP)(IP)+disp16-32K~+32K段內(nèi)間接轉(zhuǎn)移JMPmem/reg(IP)(mem)(IP)(reg)-32K~+32K段間直接轉(zhuǎn)移JMPaddr(IP)偏移地址(CS)段地址-32K~+32K段間間接轉(zhuǎn)移JMPmem(IP)(mem)(CS)(mem)+2-32K~+32KTuesday,January17,2023(2)條件轉(zhuǎn)移指令根據(jù)判斷條件是否成立決定是否轉(zhuǎn)移(即條件成立則轉(zhuǎn)移,否則不轉(zhuǎn)移)。按照判斷條件的不同條件轉(zhuǎn)移指令可分為以下類型:?jiǎn)蝹€(gè)標(biāo)志判斷指令、無(wú)符號(hào)數(shù)判斷指令、有符號(hào)數(shù)判斷指令和CX寄存器判斷指令。條件轉(zhuǎn)移都是段內(nèi)直接短轉(zhuǎn)移,即(IP)=(IP)+Data8類型的轉(zhuǎn)移。Tuesday,January17,2023指令格式指令功能測(cè)試條件說(shuō)明JE/JZdisp(IP)(IP)+(disp)(ZF)=1單標(biāo)志測(cè)試JNE/JNZdisp(IP)(IP)+(disp)(ZF)=0JSdisp(IP)(IP)+(disp)(SF)=1JNSdisp(IP)(IP)+(disp)(SF)=0JP/JPEdisp(IP)(IP)+(disp)(PF)=1JNP/JPOdisp(IP)(IP)+(disp)(PF)=0JOdisp(IP)(IP)+(disp)(OF)=1JNOdisp(IP)(IP)+(disp)(OF)=0JCdisp(IP)(IP)+(disp)(CF)=1JNCdisp(IP)(IP)+(disp)(CF)=0Tuesday,January17,2023指令格式指令功能測(cè)試條件說(shuō)明JB/JNAEdisp(IP)(IP)+(disp)(CF)=1無(wú)符號(hào)數(shù)測(cè)試A:高于B:低于E:等于JAE/JNBdisp(IP)(IP)+(disp)(CF)=0JA/JNBEdisp(IP)(IP)+(disp)(CF)=0且(ZF)=0JBE/JNAdisp(IP)(IP)+(disp)(CF)=0或(ZF)=0JG/JNLEdisp(IP)(IP)+(disp)(SF)=(OF)且(ZF)=0帶符號(hào)數(shù)測(cè)試G:大于L:小于E:等于JGE/JNLdisp(IP)(IP)+(disp)(SF)=(OF)JL/JNGEdisp(IP)(IP)+(disp)(SF)(OF)且(ZF)=0JLE/JNGdisp(IP)(IP)+(disp)(SF)(OF)或(ZF)=1JCXZdisp(IP)(IP)+(disp)(CX)=0CX寄存器測(cè)試Tuesday,January17,2023(3)循環(huán)控制指令循環(huán)控制指令的轉(zhuǎn)移也都是段內(nèi)直接短轉(zhuǎn)移,即(IP)←(IP)+Data8類型的轉(zhuǎn)移。指令名稱指令格式指令功能測(cè)試條件(CX)0循環(huán)LOOPdisp8(CX)(CX)-1當(dāng)(CX)0則(IP)(IP)+disp8(CX)0為零或相等循環(huán)LOOPZdisp8LOOPEdisp8(CX)(CX)-1當(dāng)(CX)0且(ZF)=1則(IP)(IP)+disp8(CX)0且(ZF)=1非零或不等循環(huán)LOOPN

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論