第5章80X86指令系統(tǒng)及語言基礎_第1頁
第5章80X86指令系統(tǒng)及語言基礎_第2頁
第5章80X86指令系統(tǒng)及語言基礎_第3頁
第5章80X86指令系統(tǒng)及語言基礎_第4頁
第5章80X86指令系統(tǒng)及語言基礎_第5頁
已閱讀5頁,還剩214頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第五章80x86指令系統(tǒng)及

匯編語言基礎Intel8086/8088CPU8086是16位CPU,即數(shù)據(jù)總線是16位,一個總線周期可以傳輸16位數(shù)據(jù)。8088是準16位CPU,其內(nèi)部總線為16位,外部數(shù)據(jù)總線為8位。兩者的內(nèi)部結構基本相同,地址引腳均為20位,可尋址1MB空間;兩者的指令系統(tǒng)完全相同,軟件兼容。Intel8086/8088CPU8086/8088內(nèi)部按功能可分為兩大部分:執(zhí)行部件(EU,ExecuteUnit)和總線接口部件(BIU,BusInterfaceUnit)。兩部分相對獨立,通過內(nèi)部總線連接。8086/8088CPU指令執(zhí)行過程Intel8086/8088CPU1.執(zhí)行部件(EU)EU負責指令的執(zhí)行,向總線接口的部件(BIU)提供數(shù)據(jù)和地址,對通用寄存器和標志寄存器進行管理。EU由算術邏輯單元(ALU)、一組通用寄存和、標志寄存器和EU控制單元等組成。EU從BIU部件的指令隊列中獲得指令。EU不能直接訪問存儲器和I/O接口。當某條指令要求訪問存儲器和I/O時,EU就向BIU發(fā)出請求,由BIU通過總線去完成數(shù)據(jù)的讀和寫。Intel8086/8088CPU2.總線接口部件(BIU)BIU執(zhí)行EU所要求的全部總線操作,按照EU的要求,完成CPU與存儲器或I/O設備之間的數(shù)據(jù)傳送。BIU由一組段寄存器、一個指令指示器、指令隊列、地址產(chǎn)生器和總線控制器等組成。BIU具有預取指令的功能,在EU執(zhí)行指令其間,BIU提前從存儲器取出一些指令,按執(zhí)行的順利,裝入指令隊列中。如果EU執(zhí)行了轉(zhuǎn)移指令,BIU會根據(jù)EU的指示從新的地址重新開始取指令。Intel8086/8088CPUIntel8086/8088CPU3.EU中的寄存器EU中含有8個16位的寄存器,按其用途可分成2組:1)數(shù)據(jù)寄存器組(AX、BX、CX、DX)AX稱為累加器。使用頻度最高,用于所有的輸入/輸出操作。某些字串操作、算術運算和翻譯指令也使用它。BX稱為基址寄存器。常用于存放存儲器地址。用于擴展尋址,起變址作用。CX稱為計數(shù)器。一般作為循環(huán)或串操作等指令中的隱含計數(shù)器。DX稱為數(shù)據(jù)寄存器。常用于字乘法和除法中存放雙字數(shù)據(jù)的高16位,或用來存放外設端口地址。Intel8086/8088CPU3.EU中的寄存器EU中含有8個16位的寄存器,按其用途可分成2組:1)數(shù)據(jù)寄存器組(AX、BX、CX、DX)數(shù)據(jù)寄存器既可作16位寄存器使用,又可按高8位和低8位作8位寄存器使用。即可將這4個寄存器分為兩小組: H組:AH、BH、CH、DH L組:AL、BL、CL、DL其中AH和AL、BH和BL、CH和CL、DH和DL分別對應AX、BX、CX、DX的高8位和低8位字節(jié)。Intel8086/8088CPU3.EU中的寄存器EU中含有8個16位的寄存器,按其用途可分成2組:2)指示器變址寄存器組(SP、BP、SI、DI)一般用來存放操作數(shù)的偏移地址,用作指針或變址寄存器。(1)地址指針寄存器SP,堆棧指針寄存器。在訪問堆棧時,段地址在SS中,SP則表示偏移地址。BP,堆棧操作的基址指針寄存器。在通過堆棧傳遞數(shù)據(jù)和地址時,段地址在SS,BP存放要傳遞的數(shù)據(jù)和地址的偏移地址。Intel8086/8088CPU3.EU中的寄存器2)指示器變址寄存器組(SP、BP、SI、DI)(2)變址寄存器SI,源變址寄存器。在串操作指令中,常用SI表示字串的源地址。DI,目的變址寄存器。在串操作指令中,常用DI表示操作的目的地址。在字符串操作中,SI和DI都具有自動增量或減量的功能。當SI、DI、BP不用作變址寄存器和指針寄存器時,也可用作16位數(shù)據(jù)寄存器使用。Intel8086/8088CPU3.EU中的標志寄存器主要用于保存一條指令執(zhí)行后,CPU所處狀態(tài)信息及運算結果的特征。標志寄存器共16位,包含9個標志位,其中6位作為指令執(zhí)行結果的條件標志,3位用作控制標志。OFDFIFTFSFZFAFPFCF1514131211109876543210控制標志Intel8086/8088CPU3.EU中的標志寄存器1)條件標志

(1)符號標志SF。當指令執(zhí)行后,若運算結果(補碼表示)為負,則SF=1,否則SF=0。(2)零標志ZF。當運算結果為零時,ZF=1,否則為0。(3)溢出標志OF。用來測試運算結果是否超出機器數(shù)的表示范圍,若超出,則OF=1,否則OF=0。(4)輔助進位標志AF。當操作數(shù)第3位產(chǎn)生進位或借位時,AF=1,否則AF=0,它多用于壓縮的十進制數(shù)操作。Intel8086/8088CPU3.EU中的標志寄存器1)條件標志

(5)進位標志CF。運算結果的最高位是否產(chǎn)生進位(加法)或借位(減法),若有,則CF=1,否則為0。CF還可保存移位或循環(huán)移位時移出的一位值,也可給出比較操作的結果,也可作為乘法結果的指示器。(6)奇偶標志PF。當操作結果(低8位)含有偶數(shù)個1時,PF=1,否則PF=0,該標志多用于數(shù)據(jù)輸中。例如,10011100+11111011結果=10010111,SF=1CF=1OF=0ZF=0AF=1PF=0Intel8086/8088CPU3.EU中的標志寄存器2)狀態(tài)控制標志

(1)方向標志DF??捎弥噶铑A置,用于串操作,當DF=0時,進行正向處理(從低地址向高地址),變址寄存器自動遞增;當DF=1時,則動遞減。(2)中斷允許標志IF。當IF=1時,CPU開中斷,即CPU響應外設的中斷請求;當IF=0時,CPU關中斷。(3)跟蹤標志TF。當TF=1時,CPU處于單步工作方式,即CPU每執(zhí)行一條指令后,自動產(chǎn)生一個類型為1的中斷,是程序單步執(zhí)行;當TF=0時,CPU處于連續(xù)工作方式。Intel8086/8088CPU4.主存地址的形成存儲單元地址:給每個存儲單元規(guī)定一個編號,即存儲單元的物理地址(PA)。字是由2個相鄰字節(jié)組成的,規(guī)定字地址由2個字節(jié)地址中較小的一個確定。字存放的形式:低8位存放在低地址字節(jié)中,高8位存放在相鄰的高地址字節(jié)中。如果十六進制數(shù)的第一個數(shù)字為A~F,需要在此十六進制數(shù)前加0。Intel8086/8088CPU4.主存地址的形成8086的地址線是20位,最大可尋址空間為220=1MB,其物理地址范圍從00000H~FFFFFH。而8086CPU寄存器都是16位的。如何用16位寄存器表達1MB空間?把1M空間劃成若干邏輯段。每個段滿足兩個條件:1)邏輯段的起始地址(段首址)是16的倍數(shù),這就使段首址的最低4位總為0,高16位正好裝入一個段寄存器中;2)邏輯段的最大長度為64K,這樣可用16位段內(nèi)偏移地址表示某單元在段內(nèi)的相對位置。Intel8086/8088CPU4.主存地址的形成CPU在某一時刻可以直接訪問4個存儲段:一個代碼段、一個堆棧段、一個數(shù)據(jù)段和一個附加數(shù)據(jù)段,稱為當前段。8086設立了4個16位的段寄存器用來保存4個當前段的起始基址:代碼段寄存器CS、數(shù)據(jù)段寄存器DS、堆棧段寄存器SS和附加數(shù)據(jù)段寄存器ES。在訪問存儲單元時,CPU可以根據(jù)操作的性質(zhì)和要求,選擇某一適當?shù)亩渭拇嫫?,將它里面的?nèi)容左移4位,恢復段首址原來的值,再與本段中某一待訪問存儲單元的偏移地址相加,則得到該單元的20位物理地址。Intel8086/8088CPU4.主存地址的形成1)代碼段代碼段是程序代碼的存儲區(qū)。當前代碼段在主存中的起始地址由代碼段寄存器CS確定,指令指示器IP總是保存著下一條將要取出指令相對于CS的偏移地址,如果要取出這條指令執(zhí)行,它的物理地址PA應為:PA=(CS)左移4位+(IP)Intel8086/8088CPU4.主存地址的形成2)數(shù)據(jù)和附加數(shù)據(jù)段數(shù)據(jù)段是程序中所使用的數(shù)據(jù)存儲區(qū),分為數(shù)據(jù)段和附加數(shù)據(jù)段,段首址分別由數(shù)據(jù)段寄存器DS與附加數(shù)據(jù)段寄存器ES確定。附加數(shù)據(jù)段是數(shù)據(jù)存儲區(qū)的附加區(qū)域,一般情況下無需定義,但對于串操作指令,必須定義附加數(shù)據(jù)段指定字符串存入的目的地址。當訪問數(shù)據(jù)段中某一變量時,其物理地址為:PA=(DS或ES)左移4位+該變量的偏移地址Intel8086/8088CPU4.主存地址的形成3)堆棧段堆棧是在主存中開辟的一片數(shù)據(jù)存儲區(qū),這片存儲區(qū)采用的存儲方式是一端固定,另一端堆活動。堆棧中數(shù)據(jù)的存取是遵循“先進后出”的原則。從硬件的觀點看,堆棧由一片存儲單元和一個指針組成。固定端叫棧底,棧指針指向最后存入數(shù)據(jù)的單元,此單元叫棧頂,所有信息的存取都在棧頂進行,即棧指針總是指向棧頂?shù)?。Intel8086/8088CPU4.主存地址的形成3)堆棧段8086允許用戶建立自己的字堆棧,最大可達64K字節(jié),其存儲區(qū)位置由堆棧段寄存器SS給定,采用SP作指針,其內(nèi)容為棧頂相對于SS的偏移地址??諚r,SP指向堆棧段的最高地址即棧底,存入時棧頂均由高地址向低地址變化。往堆棧中存入數(shù)據(jù)必須采用專門的指令進行,而且只能是字操作。Intel8086/8088CPU4.主存地址的形成3)堆棧段堆棧段可用作程序的臨時數(shù)據(jù)存儲區(qū)。特別是在作子程序調(diào)用、系統(tǒng)功能調(diào)用、中斷處理等操作時,用來保留返回主程序的地址或各寄存器的內(nèi)容等。進行堆棧操作時,棧頂?shù)奈锢淼刂窞椋篜A=(SS)左移4位+(SP)當其它指令要訪問堆棧中某一存儲單元時,必須通過基址寄存器BP進行,將該存儲單元的偏移地址置入BP中,則PA=(SS)左移4位+(BP)Intel8086/8088CPU4.主存地址的形成4)段的分配存儲器分段方式并非把1M字節(jié)劃分成16個64K字節(jié)的段使用,而是指CPU每次只能訪問4個段。這4個段可以分配在1M字節(jié)內(nèi)的任何地方,它們可以是完全重疊的,也可以是部分重疊或不重疊的,而且可以按任意順序存放在主存的可尋址空間中。Intel8086/8088CPU4.主存地址的形成4)段的分配【例】各獨立段的分配情況示例。Intel8086/8088CPU4.主存地址的形成4)段的分配【例】各段相互重疊情況示例。Intel8086/8088CPU5.8086寄存器組32位指令運行環(huán)境從80386開始引入32位寄存器,是在16位寄存器上的擴展。1.通用寄存器32位指令運行環(huán)境2.段寄存器32位CPU添加了2個16位段寄存器FS和GS,用來存放數(shù)據(jù)段的段地址,稱為附加段寄存器。3.專用寄存器32位CPU有2個專用的32位寄存器:指令指針寄存器(EIP)和標志寄存器(EFLAGS)。16位CPU的IP和FLAGS寄存器分別對應它們的低16位。4.其他寄存器80x86尋址方式匯編語言指令格式[標號場:]操作場[操作數(shù)場][;注釋場][]:表示該項內(nèi)容可要可不要。[標號場:]:表示該指令在代碼段中的偏移地址,用“:”與操作場連接。操作場:表示該操作的功能。[操作數(shù)場]:表示該指令所需的操作數(shù),各操作數(shù)之間用“,”隔開。當操作數(shù)為兩個時,一般地前面的稱為目的操作數(shù)OPD,后面的稱為源操作數(shù)OPS。[;注釋場]:對該指令進行說明,不參加指令的執(zhí)行。例如:NEXT1:MOVAX,0;MOVE0TOAX80x86尋址方式一、操作數(shù)種類指令尋找操作數(shù)存放地址的方式稱為指令的尋址方式。指令尋址方式分與數(shù)據(jù)有關和與轉(zhuǎn)移地址有關2種。80x86指令系統(tǒng)中,指令操作數(shù)分為數(shù)據(jù)類型和轉(zhuǎn)移地址類型兩類。1.數(shù)據(jù)類型操作數(shù)數(shù)據(jù)類型操作數(shù)表示指令所需要操作數(shù)的大小,指令中操作的對象是具體的數(shù)據(jù)。80x86尋址方式一、操作數(shù)種類1.數(shù)據(jù)類型操作數(shù)數(shù)據(jù)類型操作數(shù)分為:(1)立即數(shù)操作數(shù):指令中所需的操作數(shù)為立即數(shù),即常說的常量或常數(shù)。如:MOVAX,0;指令中的0為立即數(shù)操作數(shù)。(2)寄存器操作數(shù):指令中所需的操作數(shù)放在指定的寄存器中。如:MOVAX,BX;BX寄存器為寄存器操作數(shù)。80x86尋址方式一、操作數(shù)種類1.數(shù)據(jù)類型操作數(shù)數(shù)據(jù)類型操作數(shù)分為:(3)存儲器操作數(shù):指令中所需的操作數(shù)放在指定的存儲器中的存儲單元中,而指令中的操作數(shù)提供存儲單元的偏移地址。如:MOVAX,[1000H];[1000H]為存儲器操作數(shù)。(4)I/O操作數(shù):指令中所需的操作數(shù)來源于I/O端口。如:OUT21H,AX;指令中的端口號21H為I/O操作數(shù)。80x86尋址方式一、操作數(shù)種類2.轉(zhuǎn)移地址類型操作數(shù)這類操作數(shù)表示指令欲轉(zhuǎn)移的目的地址,操作數(shù)只有一個。轉(zhuǎn)移地址類型的操作數(shù)有立即操作數(shù)、寄存器操作數(shù)和存儲器操作數(shù),長度為16位或32位。轉(zhuǎn)移地址為16位屬于段內(nèi)轉(zhuǎn)移,轉(zhuǎn)移地址為32位屬于段間轉(zhuǎn)移。80x86尋址方式一、操作數(shù)種類2.轉(zhuǎn)移地址類型操作數(shù)這類操作數(shù)表示指令欲轉(zhuǎn)移的目的地址,操作數(shù)只有一個。如: “JMPAX”指令中的操作數(shù)AX寄存器 “JMP2000H”指令中的操作數(shù)2000H“JMPWORDPTR[100H]”指令中的操作數(shù)WORDPTR[100H] “JMPDWORDPTR[BX]”指令中的操作數(shù)DWORDPTR[BX]80x86尋址方式二、與數(shù)據(jù)有關的尋址方式與數(shù)據(jù)有關的尋址方式:以MOV指令為例立即尋址MOVAX,3069H寄存器尋址MOVAL,BH直接尋址MOVAX,[2000H]寄存器間接尋址MOVAX,[BX]寄存器相對尋址MOVAX,COUNT[SI]基址變址尋址MOVAX,[BP][DI]相對基址變址尋址MOVAX,MASK[BX][SI]存儲器尋址80x86尋址方式二、與數(shù)據(jù)有關的尋址方式1、立即尋址方式(ImmediateAddressing)操作數(shù)在指令中給出,它是緊跟在指令操作碼后面的一個可用8位或16位二進制補碼表示的有符號數(shù)。匯編語言格式:N功能:指令下一單元的內(nèi)容為操作數(shù)N。例如,MOVAX,-6執(zhí)行前:若(AX)=1010h;執(zhí)行后:(AX)=-6H80x86尋址方式二、與數(shù)據(jù)有關的尋址方式2、寄存器尋址方式(RegisterAddressing)操作數(shù)在指定的寄存器中。匯編語言格式:R功能:寄存器R的內(nèi)容是指令所需的操作數(shù)。例如,MOVAX,BX執(zhí)行前:若(AX)=1234H,(BX)=5678H;執(zhí)行后(AX)=5678H,(BX)=5678H。例如,INCAX(INC相當于C語言中的++)執(zhí)行前:若(AX)=1234H;執(zhí)行后(AX)=1235H。例如,DECAX(DEC相當于C語言中的--)80x86尋址方式二、與數(shù)據(jù)有關的尋址方式3、直接尋址方式(DirectAddressing)有效地址EA(偏移地址)由指令直接給出例如,MOVAX,[2000H]EA=2000H,假設(DS)=3000H,那么PA=32000H503032000AHAL3050(AX)=3050H80x86尋址方式二、與數(shù)據(jù)有關的尋址方式4、寄存器間接尋址(RegisterIndirectAddressing)操作數(shù)存放在存儲器中,操作數(shù)的EA存放在指令中指明的寄存器中匯編語言格式:[R]功能:R中的內(nèi)容為操作數(shù)的偏移地址EA。[]中的寄存器只能是BX、BP、SI、DI這4個中的一個。BX、SI、DI所對應的偏移地址是相對數(shù)據(jù)段(DS)段首的偏移地址。80x86尋址方式二、與數(shù)據(jù)有關的尋址方式4、寄存器間接尋址(RegisterIndirectAddressing)例如,MOVAX,[SI]執(zhí)行前:若(AX)=5H,(SI)=20H,(DS)=1000H,(10020H)=0FFFFH物理地址=16D×(DS)+SI=16D×1000+20H=10000H+20H=10020H執(zhí)行后:(AX)=0FFFFH80x86尋址方式二、與數(shù)據(jù)有關的尋址方式5、寄存器相對尋址(RegisterIndirectAddressing)操作數(shù)在存儲器中,而操作數(shù)的EA是指令中指明的寄存器的內(nèi)容與指令中給出的位移量X之和。寄存器只能是BX、BP、SI、DI這4個中的一個。BX、SI、DI所對應的偏移地址是相對數(shù)據(jù)段(DS)段首的偏移地址。BP對應的偏移地址是相對堆棧段(SS)段首的偏移地址。匯編語言格式:X[R]或[X+R]功能:R的內(nèi)容與X相加之和為EA80x86尋址方式二、與數(shù)據(jù)有關的尋址方式5、寄存器相對尋址(RegisterIndirectAddressing)例如,MOVAX,-6[BX]執(zhí)行前:若(AX)=0H,(BX)=16H,(DS)=2000H,(20010H)=3789H物理地址=16D×(DS)+BX+SI=16D×2000H+16H+(-6)H=20000H+16H-6H=20010H80x86尋址方式二、與數(shù)據(jù)有關的尋址方式6、基址變址尋址方式操作數(shù)在存儲器中,操作數(shù)的偏移地址EA是指令中指定的基址寄存器(BX、BP)的內(nèi)容與變址寄存器(SI、DI)的內(nèi)容之和。基址與變址的搭配情況有4種:[BX+SI]、[BX+DI]、[BP+SI]、[BP+DI]BX對應的偏移地址是相對數(shù)據(jù)段(DS)段首的偏移地址,BP對應的是相對堆棧段(SS)段首的偏移地址。匯編語言格式:[BR+IR]80x86尋址方式二、與數(shù)據(jù)有關的尋址方式6、基址變址尋址方式例如,MOVAX,[BX+SI]執(zhí)行前:若(AX)=45H,(BX)=30H,(SI)=28H,(DS)=1000H,(10058H)=99H物理地址=16D×(DS)+BX+SI=16D×1000H+30H+28H=10058H80x86尋址方式二、與數(shù)據(jù)有關的尋址方式7、相對基址變址尋址方式操作數(shù)在存儲器中,操作數(shù)的偏移地址EA是指令中指定的基址寄存器(BX、BP)的內(nèi)容、變址寄存器(SI、DI)的內(nèi)容及位移量X3項之和。匯編語言格式:X[BR+IR]80x86尋址方式二、與數(shù)據(jù)有關的尋址方式7、相對基址變址尋址方式例如,MOVAX,8[BX+SI]執(zhí)行前:若(AX)=45H,(BX)=30H,(SI)=20H,(DS)=1000H,(10058H)=99H物理地址=16D×(DS)+BX+SI+X=16D×1000H+30H+28H+8H=10058H執(zhí)行后:(AX)=99H80x86尋址方式二、與數(shù)據(jù)有關的尋址方式段寄存器的使用規(guī)定訪問存儲器的方式

默認的段寄存器可跨越的段寄存器偏移地址取指令CS無IP堆棧操作SS無SP一般數(shù)據(jù)訪問DSCSESSS有效地址EABP作為基址的尋址SSCSDSESBP串操作的源操作數(shù)DSCSESSSSI串操作的目的操作數(shù)ES無DI80x86尋址方式三、與轉(zhuǎn)移地址有關的尋址方式

用來確定轉(zhuǎn)移指令及CALL指令的轉(zhuǎn)向地址,以控制程序的執(zhí)行順序。轉(zhuǎn)移地址可以在段內(nèi)或段外。段內(nèi)轉(zhuǎn)移是轉(zhuǎn)移指令和轉(zhuǎn)移標號的定義在同一代碼段內(nèi);段間轉(zhuǎn)移是轉(zhuǎn)移指令和轉(zhuǎn)移標號的定義不在同一代碼段內(nèi),即從一個代碼段轉(zhuǎn)移到另一個代碼段。尋址格式:轉(zhuǎn)移指令標號分類:段內(nèi)直接尋址、段內(nèi)間直接尋址、段間直接尋址、段間間接尋址。80x86尋址方式三、與轉(zhuǎn)移地址有關的尋址方式

1、段內(nèi)直接尋址轉(zhuǎn)移指令由指令直接給出。格式:轉(zhuǎn)移指令標號功能:(IP)+位移量IP轉(zhuǎn)移的有效地址是當前IP寄存器的內(nèi)容和指令中指定的位移量之和80x86尋址方式三、與轉(zhuǎn)移地址有關的尋址方式

1、段內(nèi)直接尋址例如,CODESEGMENT…LABEL1:MOVAX,0…JMPLABEL1…CODEENDS說明:LABEL1的定義語句和引用指令JMP在同一代碼段CODE中。80x86尋址方式三、與轉(zhuǎn)移地址有關的尋址方式

2、段內(nèi)間接尋址轉(zhuǎn)移地址由指令中指定的間接尋址方式給出,即轉(zhuǎn)移的地址放在指令中指定的寄存器或存儲器中。格式:轉(zhuǎn)移指令OPD;OPD為間接尋址方式功能:(OPD)IP,即按OPD的尋址方式在存儲器中找到一個字,將這個字作為轉(zhuǎn)移地址賦給IP寄存器。80x86尋址方式三、與轉(zhuǎn)移地址有關的尋址方式

2、段內(nèi)間接尋址例如,CODESEGMENT…JMPBX

JMPWORDPTR[BX]…說明:WORDPTR的功能是將后面的操作數(shù)的類型指定為字類型,即從給定的偏移地址處取出一個字的數(shù)據(jù)。80x86尋址方式三、與轉(zhuǎn)移地址有關的尋址方式

2、段內(nèi)間接尋址例:(BX)=1256H,(SI)=528EH,TABLE=20A2H,(DS)=2000H,(232F8H)=3280H,(264E4H)=2450HJMPBX;(IP)=1256HJMPTABLE[BX]JMPWORDPTRTABLE[BX];(IP)=3280HJMP[BX][SI]JMPWORDPTR[BX][SI];(IP)=2450H80x86尋址方式三、與轉(zhuǎn)移地址有關的尋址方式

3、段間直接尋址指令中直接給出轉(zhuǎn)移的段地址和偏移地址,以改變CS和IP寄存器的內(nèi)容,實現(xiàn)段間轉(zhuǎn)移。格式:轉(zhuǎn)移指令標號功能:標號的偏移地址IP,段首地址CS。80x86尋址方式三、與轉(zhuǎn)移地址有關的尋址方式

3、段間直接尋址例如,CODE1SEGMENT…

NEXT:MOVAX,0…CODE1ENDSCODE2SEGMENT…

JMPFARPTRNEXT…CODE2ENDS標號屬性:SHORT短跳,8位(-128~127);NEAR近跳,16位(-32768~32767);FAR遠跳,無限制遠程調(diào)用80x86尋址方式三、與轉(zhuǎn)移地址有關的尋址方式

4、段間間接尋址指令中給出轉(zhuǎn)移的段地址和偏移地址的存儲器尋址方式,即從指令中給出的存儲器偏移地址中取出連續(xù)兩個字數(shù)據(jù),將低字賦給IP寄存器,將高字賦給CS寄存器,實現(xiàn)段間轉(zhuǎn)移。格式:轉(zhuǎn)移指令OPD;OPD為間接尋址方式功能:(OPD)IP,(OPD+2)CS。80x86尋址方式三、與轉(zhuǎn)移地址有關的尋址方式

4、段間間接尋址例如,JMPDWORDPTR[BX]物理地址的形成:相當于JMP2011:201080x86尋址方式四、跨段的有關問題80x86的存儲器是分段使用的,默認情況下(默認狀態(tài)):若采用寄存器作為間址寄存器、變址寄存器或基址寄存器,即在采用寄存器間接尋址方式、變址尋址方式或基址尋址方式時,只有BP出現(xiàn)在方括號內(nèi),則操作數(shù)在當前堆棧段,此時,操作數(shù)的物理地址PA由堆棧段寄存器SS的內(nèi)容左移4位與偏移地址EA相加后形成;否則,操作數(shù)在當前數(shù)據(jù)段,操作數(shù)的物理地址PA由數(shù)據(jù)段寄存器DS的內(nèi)容左移4位與偏移EA相加后形成。80x86尋址方式四、跨段的有關問題當要否定默認狀態(tài),到非約定段尋找操作數(shù)時,必須用跨段前綴指明操作數(shù)的段寄存器名。匯編格式:段寄存器名:操作數(shù)地址功能:冒號“:”前的段寄存器名指明了操作數(shù)所在段。例如,MOVAX,DS:[BP]MOVCX,SS:[SI]這2條指令的源操作數(shù)物理地址分別為:PA1=(DS)左移4位+[BP]PA2=(SS)左移4位+[SI]80x86指令系統(tǒng)

80x86的指令系統(tǒng)可以分為6組:

數(shù)據(jù)傳送指令算術運算指令邏輯指令串處理指令控制轉(zhuǎn)移指令處理機控制指令80x86指令系統(tǒng)

重點關注:指令的匯編格式指令的基本功能指令支持的尋址方式指令的執(zhí)行對標志位的影響指令的特殊要求80x86指令系統(tǒng)

一、數(shù)據(jù)傳送指令1.通用數(shù)據(jù)傳送指令MOV、PUSH、POP、XCHG2.累加器專用傳送指令IN、OUT、XLAT

3.地址傳送指令LEA、LDS、LES其它還有標志寄存器傳送指令(LAHF、SAHF、PUSHF、POPF)和類型轉(zhuǎn)換指令CBW、CWD等。80x86指令系統(tǒng)

一、數(shù)據(jù)傳送指令1.通用數(shù)據(jù)傳送指令(1)MOV傳送指令格式:MOVDST,SRC執(zhí)行操作:(DST)(SRC)80x86指令系統(tǒng)

一、數(shù)據(jù)傳送指令1.通用數(shù)據(jù)傳送指令(1)MOV傳送指令①

MOVmem/reg1,mem/reg2不允許兩個操作數(shù)都使用存儲器,必須有一個使用寄存器,不允許指定段寄存器②MOVreg,datareg指定寄存器,不允許指定段寄存器,data為立即數(shù)。③MOVac,mem④MOVmem,acac為累加器,mem給出存儲單元的偏移地址。80x86指令系統(tǒng)

一、數(shù)據(jù)傳送指令1.通用數(shù)據(jù)傳送指令(1)MOV傳送指令⑤

MOVsegreg,mem/reg⑥MOVmem/reg,segregsegreg指定段寄存器,但不允許使用CS。另外,這條指令執(zhí)行完后不響應中斷,要等下一條指令執(zhí)行完后才能響應中斷。⑦MOVmem/reg,data80x86指令系統(tǒng)

一、數(shù)據(jù)傳送指令1.通用數(shù)據(jù)傳送指令(1)MOV傳送指令⑤

MOVsegreg,mem/reg⑥MOVmem/reg,segregsegreg指定段寄存器,但不允許使用CS。另外,這條指令執(zhí)行完后不響應中斷,要等下一條指令執(zhí)行完后才能響應中斷。⑦MOVmem/reg,data80x86指令系統(tǒng)

一、數(shù)據(jù)傳送指令1.通用數(shù)據(jù)傳送指令(1)MOV傳送指令注意:立即數(shù)不能直接送段寄存器

MOVCS,12H;MOVDS,12H;MOVSS,12H;MOVES,12H;目的操作數(shù)不能是立即數(shù)、CS

MOV12H,AL;MOVCS,AX;不允許在兩個段寄存器之間直接傳送數(shù)據(jù)

MOVDS,CS;MOVDS,SS;……80x86指令系統(tǒng)

一、數(shù)據(jù)傳送指令1.通用數(shù)據(jù)傳送指令(1)MOV傳送指令注意:

不允許在兩個存儲單元(字或字節(jié))之間直接傳送數(shù)據(jù)

MOV[2000H],[BX];MOV[DI],[BP];…源操作數(shù)和目的操作數(shù)的數(shù)據(jù)類型必須一致

MOVBX,AL;MOV指令不影響標志位。80x86指令系統(tǒng)

一、數(shù)據(jù)傳送指令1.通用數(shù)據(jù)傳送指令(1)MOV傳送指令舉例MOVDS,AX;AX中的16位數(shù)送DSMOVBL,AL;AL中的8位數(shù)送BLMOVCL,30;立即數(shù)30送CLMOVSI,057BH;立即數(shù)057BH送SIMOVAL,’E’;把立即數(shù)(E的ASCII碼)送AL寄存器MOVAX,[BX];BX和BX+1所指的兩內(nèi)存單元內(nèi)容送AXMOV[DI],AX;AX內(nèi)容送DI和DI+1所指的兩內(nèi)存單元80x86指令系統(tǒng)

一、數(shù)據(jù)傳送指令1.通用數(shù)據(jù)傳送指令(1)MOV傳送指令舉例MOVAX,BUF;BUF是變量,源操作數(shù)為直接尋址MOVBH,[DI];源操作數(shù)為寄存器間接尋址MOVDI,ES:3[SI];源操作數(shù)為變址尋址,使用跨段前綴MOV[BP],AX ;使用SS段寄存器MOVDS:[BP],DL ;使用跨段越前綴MOVBUF,DS ;BUF是個字變量80x86指令系統(tǒng)

一、數(shù)據(jù)傳送指令1.通用數(shù)據(jù)傳送指令(2)PUSH進棧指令格式:PUSHSRC執(zhí)行操作:(SP)(SP)-2((SP)+1,(SP))(SRC)例如,PUSHAX第一步,SP-1送SP,把AH(高字節(jié))的內(nèi)容送SP所指的存儲單元;第二步,再做SP-1送SP,把AL(低字節(jié))的內(nèi)容送SP所指的存儲單元。80x86指令系統(tǒng)

一、數(shù)據(jù)傳送指令1.通用數(shù)據(jù)傳送指令(2)PUSH進棧指令例:假設(AX)=2107H,執(zhí)行PUSHAX********(SP)PUSHAX執(zhí)行前(SP)********07H21H低地址

高地址PUSHAX執(zhí)行后進棧方向80x86指令系統(tǒng)

一、數(shù)據(jù)傳送指令1.通用數(shù)據(jù)傳送指令(3)POP出棧指令格式:POPDST執(zhí)行操作:(DST)((SP)+1,(SP))(SP)(SP)+2例如,POPAX是PUSHAX的逆過程。80x86指令系統(tǒng)

一、數(shù)據(jù)傳送指令1.通用數(shù)據(jù)傳送指令(3)POP出棧指令例如,POPBX(SP)********07H21HPOPBX執(zhí)行前(SP)********07H21H低地址

高地址POPBX執(zhí)行后出棧方向

(BX)=2107H80x86指令系統(tǒng)

一、數(shù)據(jù)傳送指令1.通用數(shù)據(jù)傳送指令PUSH和POP指令堆棧:“先進后出”的存儲區(qū),SP在任何時候都指向棧頂。注意:堆棧操作必須以字為單位。不影響標志位不能用立即尋址方式PUSH1234HDST不能是CSPOPCS80x86指令系統(tǒng)

一、數(shù)據(jù)傳送指令1.通用數(shù)據(jù)傳送指令PUSH和POP指令對于32位操作數(shù),PUSH指令功能:SP=SP–4SS:[SP]=32位操作數(shù)POP指令功能:32位操作數(shù)=SS:[SP]SP=SP+480x86指令系統(tǒng)

一、數(shù)據(jù)傳送指令1.通用數(shù)據(jù)傳送指令PUSHA:將AX、CX、DX、BX、SP、BP、SI與DI依次進棧。POPA:功能與PUSHA相反,寄存器進棧與出棧順序相反,主要用于保護現(xiàn)場。PUSHAD:將EAX、ECX、EDX、EBX、ESP、EBP、ESI與EDI依次進棧。POPAD:功能與PUSHAD相反。PUSHFD:EFLAGS進棧POPFD:棧頂字出棧到EFLAGS80386指令80x86指令系統(tǒng)

一、數(shù)據(jù)傳送指令1.通用數(shù)據(jù)傳送指令XCHG交換指令格式:XCHGOPR1,OPR2執(zhí)行操作:(OPR1)(OPR2)注意:2個操作數(shù)中必須有一個在寄存器中;不允許使用段寄存器例:XCHGBX,[BP+SI]XCHGAL,BH80x86指令系統(tǒng)

一、數(shù)據(jù)傳送指令2.累加器專用傳送指令這組指令只限于使用累加器AX或AL傳送信息。(1)IN(input)輸入指令(I/OCPU)長格式:INAL,PORT(字節(jié)操作)

INAX,PORT(字操作)執(zhí)行操作:(AL)(PORT)(字節(jié)操作)(AX)(PORT+1,PORT)(字)PORT為8位地址(A7A0),可尋址范圍為00HFFH,共256個端口。80x86指令系統(tǒng)

一、數(shù)據(jù)傳送指令2.累加器專用傳送指令(1)IN(input)輸入指令(I/OCPU)對于功能較強的微機系統(tǒng),端口號要大于FFH,只能用DX寄存器間接地址輸入輸出指令。短格式:INAL,DX(字節(jié)操作)

INAX,DX(字操作)執(zhí)行操作:(AL)((DX))(字節(jié))(AX)((DX)+1,(DX))(字)

間址輸入輸出指令的尋址范圍0000HFFFFH80x86指令系統(tǒng)

一、數(shù)據(jù)傳送指令2.累加器專用傳送指令(2)OUT(output)輸出指令(CPUI/O)長格式:OUTPORT,AL(字節(jié))OUTPORT,AX(字)執(zhí)行操作:(PORT)(AL)(字節(jié))(PORT+1,PORT)(AX)(字)短格式:OUTDX,AL(字節(jié))

OUTDX,AX(字)執(zhí)行操作:((DX))(AL)(字節(jié))((DX)+1,(DX))(AX)(字)80x86指令系統(tǒng)

一、數(shù)據(jù)傳送指令2.累加器專用傳送指令(3)XLAT換碼指令(查表指令、翻譯指令)格式:XLATOPR或XLAT執(zhí)行操作:(AL)((BX)+(AL))注意:字節(jié)表格(長度不超過256)首地址(BX)需轉(zhuǎn)換代碼(AL)80x86指令系統(tǒng)

一、數(shù)據(jù)傳送指令2.累加器專用傳送指令(3)XLAT換碼指令(查表指令、翻譯指令)例:MOVBX,OFFSETTABLE;(BX)=0040HMOVAL,3XLATTABLE指令執(zhí)行后(AL)=33H(BX)30HF004031HF0041(AL)=332HF004233HF0043TABLE(DS)=F000H80x86指令系統(tǒng)

一、數(shù)據(jù)傳送指令3.地址傳送指令(1)LEA(loadeffectiveaddress)有效地址送寄存器指令格式:LEAREG,SRC執(zhí)行操作:(REG)(SRC)把源操作數(shù)的有效地址送到指定寄存器中。(2)LDS(loadDSwithpointer)指針送寄存器和DS指令格式:LDSREG,SRC執(zhí)行操作:(REG)(SRC)(DS)(SRC+2)把源操作數(shù)的4個相繼字節(jié)寄存器(通常是SI)、DS80x86指令系統(tǒng)

一、數(shù)據(jù)傳送指令3.地址傳送指令(3)LES(loadESwithpointer)指針送寄存器和ES指令格式:LESREG,SRC執(zhí)行操作:(REG)(SRC)(ES)(SRC+2)把源操作數(shù)的4個相繼字節(jié)寄存器(通常是DI)、ES80x86指令系統(tǒng)

一、數(shù)據(jù)傳送指令3.地址傳送指令LEA、LDS、LES三條指令的注意點:REG不能是段寄存器;SRC必須使用存儲器尋址方式;不影響標志位;本組指令把變量的偏移地址(LEA)或段地址和偏移地址(LDS和LES)送給寄存器,以提供訪問變量的工具。80x86指令系統(tǒng)

一、數(shù)據(jù)傳送指令3.地址傳送指令例如,LEABX,[BX+SI+0F62H]執(zhí)行前:若(BX)=0400H,(SI)=003CH執(zhí)行后:(BX)=0400H+003CH+0F62H=139EH注意:BX得到的是偏移地址而不是該存儲單元的內(nèi)容。例如,LDSSI,[10H]執(zhí)行前:(DS)=C000H,(C0010H)=0180H,(C0012H)=2000H執(zhí)行后:(SI)=0180H,(DS)=2000H80x86指令系統(tǒng)

一、數(shù)據(jù)傳送指令4.標志寄存器傳送指令LAHF(loadAHfromFLAGS)格式:LAHF;AH=FLAGS的低8位不影響標志SAHF(storeAHintoFLAGS)格式:SAHF;FLAGS的低8位=AH對標志的影響:由新裝入值確定。80x86指令系統(tǒng)

一、數(shù)據(jù)傳送指令4.標志寄存器傳送指令PUSHF標志進棧指令執(zhí)行操作:(SP)(SP)-2((SP)+1,(SP))(PSW)POPF標志出棧指令執(zhí)行操作:(PSW)((SP)+1,(SP))(SP)(SP)+2對標志的影響:只有POPF會以彈出值設置標志寄存器。例題,P.11680x86指令系統(tǒng)

二、算術指令加法指令:ADD、ADC、INC減法指令:SUB、SBB、DEC、NEG、CMP乘法指令:MUL、IMUL除法指令:DIV、IDIV十進制調(diào)整指令:DAA、DAS、AAA、AAS、AAM、AAD80x86指令系統(tǒng)

二、算術指令1.加法指令(1)ADD(add)加法指令:格式:ADDDST,SRC

執(zhí)行操作:(DST)(SRC)+(DST)(2)ADC(addwithcarry)帶進位加法指令格式:ADCDST,SRC

執(zhí)行操作:(DST)(SRC)+(DST)+CF80x86指令系統(tǒng)

二、算術指令1.加法指令(3)INC(increment)加1指令格式:INCOPR執(zhí)行操作:(OPR)(OPR)+1(4)XADD(exchangeandadd)交換加指令格式:XADDreg/mem,reg(或是XADDopr1,opr2)執(zhí)行操作:先將oprd1與oprd2交換,再令oprd1=oprd1+oprd280x86指令系統(tǒng)

二、算術指令1.加法指令加法指令對條件標志位(CF/OF/ZF/SF)的影響:1結果為負0否則SF=1結果為00否則ZF=1和的最高有效位有向高位的進位0否則CF=1兩個操作數(shù)符號相同,而結果符號與之相反0否則OF=CF位表示無符號數(shù)相加的溢出。OF位表示帶符號數(shù)相加的溢出。80x86指令系統(tǒng)

二、算術指令1.加法指令例如,n=8bit帶符號數(shù)(-128~127)無符號數(shù)(0~255)

00000100+0000101100001111帶:(+4)+(+11)=+15OF=0無:4+11=15CF=0帶符號數(shù)和無符號數(shù)都不溢出帶符號數(shù)和無符號數(shù)都溢出10000111+1111010101111100帶:(-121)+(-11)=+124OF=1無:135+245=124CF=180x86指令系統(tǒng)

二、算術指令1.加法指令例如,n=8bit帶符號數(shù)(-128~127)無符號數(shù)(0~255)無符號數(shù)溢出00000111+1111101100000010帶:(+7)+(-5)=+2OF=0無:7+251=2CF=100001001+0111110010000101帶:(+9)+(+124)=-123OF=1無:9+124=133CF=0帶符號數(shù)溢出80x86指令系統(tǒng)

二、算術指令1.加法指令例如,雙精度數(shù)的加法 (DX)=0002H,(AX)=0F365H, (BX)=0005H,(CX)=0E024H指令序列:(1)ADDAX,CX(2)ADCDX,BX(1)執(zhí)行后,(AX)=0D389H,CF=1,OF=0,SF=1,ZF=0(2)執(zhí)行后,(DX)=0008H,CF=0,OF=0,SF=0,ZF=080x86指令系統(tǒng)

二、算術指令2.減法指令(1)SUB(subtract)減法指令格式:SUBDST,SRC

執(zhí)行操作:(DST)(DST)-(SRC)(2)SBB(subtractwithborrow)帶借位減法指令格式:SBBDST,SRC執(zhí)行操作:(DST)(DST)-(SRC)-CF(3)DEC(decrement)減1指令格式:DECOPR執(zhí)行操作:(OPR)(OPR)-180x86指令系統(tǒng)

二、算術指令2.減法指令(4)NEG(negate)求補指令格式:NEGOPR執(zhí)行操作:(OPR)-(OPR)(5)CMP(compare)比較指令格式:CMPOPR1,OPR2

執(zhí)行操作:(OPR1)-(OPR2)80x86指令系統(tǒng)

二、算術指令2.減法指令減法指令對條件標志位(CF/OF/ZF/SF)的影響:1被減數(shù)的最高有效位有向高位的借位0否則CF=1兩個操作數(shù)符號相反,而結果的符號與減數(shù)相同0否則OF=1減法轉(zhuǎn)換為加法運算時無進位0否則CF=或CF

位表示無符號數(shù)減法的溢出。OF

位表示帶符號數(shù)減法的溢出。除DEC指令外,均對條件標志位有影響。80x86指令系統(tǒng)

二、算術指令2.減法指令NEG指令對CF/OF的影響:0操作數(shù)為01否則CF=1操作數(shù)為-128(字節(jié)運算)或操作數(shù)為-32768(字運算)0否則OF=80x86指令系統(tǒng)

二、算術指令2.減法指令例如,SUBDH,[BP+4]執(zhí)行前:(DH)=41H,(SS)=0000H,(BP)=00E4H,(000E8H)=5AH執(zhí)行后:(DH)=0E7H,SF=1,ZF=0,CF=1,OF=080x86指令系統(tǒng)

二、算術指令2.減法指令例:x、y、z均為雙精度數(shù),分別存放在地址為X,X+2;Y,Y+2;Z,Z+2的存儲單元中,用指令序列實現(xiàn)wx+y+24-z,并用W,W+2單元存放wMOVAX,XMOVDX,X+2ADDAX,YADCDX,Y+2;x+yADDAX,24ADCDX,0;x+y+24SUBAX,ZSBBDX,Z+2;x+y+24-zMOVW,AXMOVW+2,DX;結果存入W,W+280x86指令系統(tǒng)

二、算術指令3.乘法指令(1)MUL(unsignedmultiple)無符號數(shù)乘法指令格式:MULSRC執(zhí)行操作:字節(jié)操作,(AX)(AL)×(SRC)字操作,(DX,AX)(AX)×(SRC)雙字操作,(EDX,EAX)(EAX)×(SRC)(2)IMUL(signedmultiple)帶符號數(shù)乘法指令格式:IMULSRC執(zhí)行操作:同上80x86指令系統(tǒng)

二、算術指令3.乘法指令目的操作數(shù)必須是累加器,字運算為AX,字節(jié)運算為AL。兩個8位數(shù)相乘得到的16位乘積存放在AX中,兩個16位數(shù)相乘得到的32位乘積存放在DX、AX中,其中DX存放高位字,AX存放低位字。SRC不能為立即數(shù)。除CF和OF外,對條件標志位無定義,即指令執(zhí)行后這些條件標志的狀態(tài)不定。80x86指令系統(tǒng)

二、算術指令3.乘法指令乘法指令對CF/OF的影響:00乘積的高一半為零11否則MUL指令:CF/OF=00乘積的高一半是低一半的符號擴展11否則

IMUL指令:CF/OF=80x86指令系統(tǒng)

二、算術指令3.乘法指令例如,若(AL)=0B4H,(BL)=11H(AL)=0B4H為無符號數(shù)的180D、帶符號數(shù)的-76D,(BL)=11H為無符號數(shù)的17D(1)IMULBL;(AX)=0FAF4H=-1292D;;CF=OF=1(2)MULBL;(AX)=0BF4H=3060D;

;CF=OF=180x86指令系統(tǒng)

二、算術指令4.除法指令(1)DIV(unsigneddivide)無符號數(shù)除法指令格式:DIVSRC執(zhí)行操作:字節(jié)操作,(AL)(AX)/(SRC)的商(AH)(AX)/(SRC)的余數(shù)字操作,(AX)(DX,AX)/(SRC)的商(DX)(DX,AX)/(SRC)的余數(shù)雙字操作,(EAX)(EDX,EAX)/(SRC)的商(EDX)(EDX,EAX)/(SRC)的余數(shù)80x86指令系統(tǒng)

二、算術指令4.除法指令(2)IDIV(signeddivide)帶符號數(shù)除法指令格式:IDIVSRC執(zhí)行操作:與DIV指令相同,但操作數(shù)必須是帶符號數(shù),商和余數(shù)也是帶符號數(shù),余數(shù)和被除數(shù)的符號相同。80x86指令系統(tǒng)

二、算術指令4.除法指令AX(DX,AX)為隱含的被除數(shù)寄存器。AL(AX)為隱含的商寄存器。AH(DX)為隱含的余數(shù)寄存器。SRC不能為立即數(shù)。對所有條件標志位均無定義。80x86指令系統(tǒng)

二、算術指令5.類型轉(zhuǎn)換指令(1)CBW(convertbytetoword)字節(jié)轉(zhuǎn)換為字指令格式:CWB執(zhí)行操作:ALAX若(AL)的最高有效位為0,則(AH)=00H若(AL)的最高有效位為1,則(AH)=0FFH80x86指令系統(tǒng)

二、算術指令5.類型轉(zhuǎn)換指令(2)CWD(convertwordtodoubleword)字轉(zhuǎn)換為雙字指令格式:CWD

執(zhí)行操作:AX(DX,AX)若(AX)的最高有效位為0,則(DX)=0000H若(AX)的最高有效位為1,則(DX)=0FFFFH80x86指令系統(tǒng)

二、算術指令例:x,y,z,v均為16位帶符號數(shù),計算(v-(x*y+z–540))/xMOVAX,XIMULY;x*yMOVCX,AXMOVBX,DXMOVAX,ZCWDADDCX,AXADCBX,DX;x*y+zSUBCX,540SBBBX,0;x*y+z-540MOVAX,VCWDSUBAX,CXSBBDX,BX;v-(x*y+z-540)IDIVX;(v-(x*y+z-540))/x80x86指令系統(tǒng)

二、算術指令6.十進制調(diào)整指令BCD碼:用二進制編碼的十進制數(shù),又稱二--十進制數(shù)壓縮的BCD碼:用4位二進制數(shù)表示1位十進制數(shù)例:(59)10=(01011001)BCD非壓縮的BCD碼:用8位二進制數(shù)表示1位十進制數(shù)例:(59)10=(0000010100001001)BCD80x86指令系統(tǒng)

二、算術指令6.十進制調(diào)整指令數(shù)字的ASCII碼是一種非壓縮的BCD碼DIGIT ASCII BCD0 30H 001100001 31H 001100012 32H 00110010… … …9 39H 0011100180x86指令系統(tǒng)

二、算術指令6.十進制調(diào)整指令問題的提出:19壓縮BCD:000110012700100001+110+08+00001000(00100111)BCDAF=180x86指令系統(tǒng)

二、算術指令6.十進制調(diào)整指令(1)壓縮BCD碼調(diào)整指令①DAA(decimaladjustforaddition)加法的十進制調(diào)整指令執(zhí)行的操作:(AL)把AL中的和調(diào)整為壓縮BCD碼格式。這條指令之前必須執(zhí)行ADD或ADC指令,加法指令必須把兩個壓縮BCD碼相加,并把結果保存在AL寄存器中。調(diào)整方法:如果AF(輔助進位)為1,或AL的低4位是十六進制的A~F,則AL的內(nèi)容加上06H,且將AF置1;如果CF(進位)為1,或者AL的高4位是十六進制的A~F,則AL的內(nèi)容加上60H,并將CF置1.80x86指令系統(tǒng)

二、算術指令6.十進制調(diào)整指令(1)壓縮BCD碼調(diào)整指令②

DAS(~forsubtraction)減法的十進制調(diào)整指令執(zhí)行的操作:(AL)把AL中的差調(diào)整為壓縮BCD碼格式。這條指令之前必須執(zhí)行SUB和SBB指令,減法指令必須把兩個壓縮BCD碼相減,并把結果保存在AL中。調(diào)整方法:如果AF為1,或AL的低4位是十六進制的A~F,則AL的內(nèi)容減去06H,且將AF置1;如果CF為1,或者AL的高4位是十六進制的A~F,則AL的內(nèi)容減去60H,并將CF置1。80x86指令系統(tǒng)

二、算術指令6.十進制調(diào)整指令(2)非壓縮BCD碼調(diào)整指令①AAA(ASCIIadjustforaddition)加法調(diào)整指令語句格式:AAA指令功能:如果AL的低4位大于9或(AF)=1,則:(AL)=(AL)+6,(AH)=(AH)+1,(AF)=(CF)=1,且AL高4位清零。否則:(CF)=(AF)=0,AL高4位清零。80x86指令系統(tǒng)

二、算術指令6.十進制調(diào)整指令(2)非壓縮BCD碼調(diào)整指令②AAS(ASCIIadjustforsubtraction)減法調(diào)整指令語句格式:AAS指令功能:如果AL的低4位大于9或(AF)=1,則:(AL)=(AL)-6,(AH)=(AH)-1,(AF)=(CF)=1,AL高4位清零。否則:(CF)=(AF)=0,AL高4位清零。其他標志位OF、PF、SF、ZF不確定。80x86指令系統(tǒng)

二、算術指令6.十進制調(diào)整指令(2)非壓縮BCD碼調(diào)整指令③AAM(ASCIIadjustformultiplication)乘法調(diào)整指令語句格式:AAM指令功能:被調(diào)整的乘積在AX中,對AL按10取模,則:(AL)/0AH→AH(商):AL(余數(shù))其中AH為商,AL為余數(shù),標志位AF、CF、OF、PF、SF、ZF受影響。

80x86指令系統(tǒng)

二、算術指令6.十進制調(diào)整指令(2)非壓縮BCD碼調(diào)整指令④AAD(ASCIIadjustfordivision)除法調(diào)整指令語句格式:AAD指令功能:除法運算前,先調(diào)整被除數(shù)AX內(nèi)容,使:(AL)=(AL)+(AH)*0AH(AH)=0即把非壓縮型十進制數(shù)變成二進制數(shù)。80x86指令系統(tǒng)三、邏輯指令邏輯運算指令AND、OR、NOT、XOR、TEST移位指令SHL、SHR、SAL、SAR、ROL、ROR、RCL、RCR80x86指令系統(tǒng)三、邏輯指令1.邏輯運算指令(1)AND邏輯與指令:ANDDST,SRC執(zhí)行操作:(DST)(DST)(SRC)(2)OR邏輯或指令:ORDST,SRC執(zhí)行操作:(DST)(DST)(SRC)(3)NOT邏輯非指令:NOTOPR;OPR不能為立即數(shù)執(zhí)行操作:(OPR)

(OPR);不影響標志位80x86指令系統(tǒng)三、邏輯指令1.邏輯運算指令(4)XOR異或指令:XORDST,SRC執(zhí)行操作:(DST)(DST)(SRC)(5)測試指令:TESTOPR1,OPR2執(zhí)行操作:(OPR1)(OPR2)NOT不許使用立即數(shù),其他4種除非源操作數(shù)是立即數(shù),否則至少有一個操作數(shù)必須存放在寄存器中。對標志位的影響:NOT不影響標志,其他4種使CF和OF為0,AF無定義,SF、ZF和PF根據(jù)運算結果設置。80x86指令系統(tǒng)三、邏輯指令1.邏輯運算指令邏輯運算指令對處理操作數(shù)的某些位很有用。例:屏蔽AL的第0、1兩位ANDAL,0FCH例:置AL的第5位為1ORAL,20H例:使AL的第0、1位變反XORAL,3

********OR00100000**1*****

********XOR00000011********

********AND11111100******0080x86指令系統(tǒng)三、邏輯指令2.移位指令(1)SHL(shiftlogicalleft)邏輯左移格式:SHLOPD,CNT操作:將(OPD)向左移動由CNT指定的位數(shù)。高位移到CF,低位補0。(2)SAL(shiftarithmeticleft)算術左移格式:SALOPD,CNT操作:同邏輯左移

CF080x86指令系統(tǒng)三、邏輯指令2.移位指令(3)SHR(shiftlogicalright)邏輯右移格式:SHROPD,CNT操作:將(OPD)向右移動由CNT指定的位數(shù)。最高位補入相應個數(shù)的0,CF的內(nèi)容為最后移入的位。

0CF80x86指令系統(tǒng)三、邏輯指令2.移位指令(4)SAR(shiftarithmeticright)算術右移格式:SAROPD,CNT操作:將(OPD)向右移動由CNT指定的位數(shù)且最高位保持不變,CF的內(nèi)容為最后移入的位。CF80x86指令系統(tǒng)三、邏輯指令2.移位指令(5)ROL(rotateleft)循環(huán)左移格式:ROLOPD,CNT操作:將(OPD)的最高位與最低位連接起來,組成一個環(huán),將環(huán)中的所有位一起向左移規(guī)定的位數(shù)。CF的內(nèi)容為最后移入的位。CF

80x86指令系統(tǒng)三、邏輯指令2.移位指令(6)ROR(rotateright)循環(huán)右移格式:ROROPD,CNT操作:與ROL功能相同,只是向右移動。CF80x86指令系統(tǒng)三、邏輯指令2.移位指令(7)RCL(rotateleftthroughcarry)帶進位循環(huán)左移格式:RCLOPD,CNT操作:將目的操作數(shù)連同CF標志一起向左循環(huán)移動規(guī)定的位數(shù)。(8)RCR(rotaterightthroughcarry)帶進位循環(huán)右移格式:RCROPD,CNT操作:功能與RCL相同,只是向右移。

CFCF80x86指令系統(tǒng)三、邏輯指令2.移位指令OPD可用除立即數(shù)以外的任何尋址方式。CNT=1,SHLOPR,1CNT>1,MOVCL,CNTSHLOPR,CL;以SHL為例條件標志位:CF=移入的數(shù)值

1CNT=1時,最高有效位的值發(fā)生變化0CNT=1時,最高有效位的值不變移位指

溫馨提示

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

評論

0/150

提交評論