




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、微機(jī)原理及接口技術(shù)常用編指令一. 寄存器(用來(lái)存放存儲(chǔ)單元的段地址或偏移地址、參與運(yùn)算的數(shù)據(jù)、狀態(tài)標(biāo)志等)相關(guān)指令8086 CPU 中有14個(gè)16位的寄存器,這14個(gè)寄存器按照功能分為四類:通用寄存器、段寄存器組、指令指針、標(biāo)志位寄存器FR。1.通用寄存器(8個(gè))數(shù)據(jù)寄存器:AX(accumulator):寄存器(累加器)它的由來(lái)來(lái)源于EAX寄存器(32位):EAX累加寄存器EAX分為高16位和低16位。其中低16位又可單獨(dú)訪問(wèn),命名為AX,16位寄存器AX又可單獨(dú)訪問(wèn),可分為高、低分別為AH、AL字節(jié)個(gè)8位。AX常用于運(yùn)算;在乘法和除法中指定用來(lái)存放操作數(shù),另外所有的I/O指令都使用這一個(gè)寄
2、存器與外接設(shè)備傳送數(shù)據(jù)。BX(base):基址寄存器,寄存器(基址寄存器)它的由來(lái)來(lái)源于EBX寄存器(32位):EB X累加寄存器EBX分為高16位和低16位。其中低16位又可單獨(dú)訪問(wèn),命名為BX,16位寄存器BX又可單獨(dú)訪問(wèn),可分為高、低分別為BH、BL字節(jié)個(gè)8位。BX常用于地址索引,查表和間接尋址時(shí)存放基地址。CX(count):計(jì)數(shù)寄存器,寄存器(計(jì)數(shù)寄存器)它的由來(lái)來(lái)源于ECX寄存器(32位):EC X累加寄存器ECX分為高16位和低16位。其中低16位又可單獨(dú)訪問(wèn),命名為CX,16位寄存器CX又可單獨(dú)訪問(wèn),可分為高、低分別為CH、CL字節(jié)個(gè)8位。常用于計(jì)數(shù);常用于保存計(jì)算值,如在移位
3、指令,循環(huán)(loop)和串處理指令中用作隱含的計(jì)數(shù)器.DX(data):數(shù)據(jù)寄存器,寄存器(數(shù)據(jù)寄存器)它的由來(lái)來(lái)源于EDX寄存器(32位):ED X累加寄存器EDX分為高16位和低16位。其中低16位又可單獨(dú)訪問(wèn),命名為DX,16位寄存器DX又可單獨(dú)訪問(wèn),可分為高、低分別為DH、DL字節(jié)個(gè)8位。常用于數(shù)據(jù)傳遞。指針和變址寄存器這些寄存器存放的是段內(nèi)的偏移量,用來(lái)形成操作數(shù)的存儲(chǔ)地址。SP(Stack Pointer):堆棧指針,與SS配合使用,可指向目前的堆棧位置,SP指向棧頂。BP(Base Pointer):基址指針寄存器,可用作SS的一個(gè)相對(duì)基址位置,BP指向棧的任何一單元。SI(So
4、urce Index):源變址寄存器可用來(lái)存放相對(duì)于DS段之源變址指針。DI(Destination Index):目的變址寄存器,可用來(lái)存放相對(duì)于 ES 段之目的變址指針,指令中SI對(duì)應(yīng)DS , DI對(duì)應(yīng)ES不能互換。2.指令指針I(yè)P(Instruction Pointer)(1個(gè))16位的指令指針I(yè)P,用來(lái)存放下一條指令在CS(代碼段寄存器)中的偏移量。當(dāng)發(fā)現(xiàn)中斷或調(diào)用時(shí)BIU【(Bus Interface Unit)總線部件,功能是取指令、讀操作數(shù)和送出結(jié)果】自動(dòng)將IP的偏移量壓入堆棧保存,并調(diào)整IP的內(nèi)容。程序不能直接訪問(wèn)IP,但可以通過(guò)中斷、轉(zhuǎn)移等指令來(lái)修改IP的內(nèi)容。3.段寄存器(
5、Segment Register)(4個(gè))為了運(yùn)用所有的內(nèi)存空間,8086設(shè)定了四個(gè)段寄存器,專門用來(lái)保存段地址:CS(Code Segment):代碼段寄存器;存放當(dāng)前執(zhí)行的指令在內(nèi)存中的地址段。CS和IP決定了當(dāng)前指令的邏輯地址。DS(Data Segment):數(shù)據(jù)段寄存器;存放當(dāng)前數(shù)據(jù)段的段地址。DS和SI決定了字符串操作時(shí)目的操作數(shù)的地址。SS(Stack Segment):堆棧段寄存器;存放當(dāng)前數(shù)據(jù)段的堆棧地址,SS與SP決定了當(dāng)前堆棧的頂部,所謂堆棧是以“后進(jìn)后出”規(guī)則保存信息的一種存儲(chǔ)機(jī)構(gòu)。8086CPU的堆棧段地址在SS寄存器中,堆棧當(dāng)前偏移地址在SP寄存器中,SP的初值代表
6、了堆棧區(qū)的大小。ES(Extra Segment):附加段寄存器。附加段是一個(gè)附加的數(shù)據(jù)段。ES和DI決定了字符串操作時(shí)目的操作數(shù)的地址。 4.標(biāo)志位寄存器FR(Flag Regise)8086CPU設(shè)置了一個(gè)16位的標(biāo)志寄存器FR,用來(lái)顯示微機(jī)的運(yùn)行結(jié)果或控制機(jī)制操作,規(guī)定了其中的9位,標(biāo)志的設(shè)置,F(xiàn)R的九個(gè)標(biāo)志按作用可分為兩大類:一類叫狀態(tài)標(biāo)志,用來(lái)表示運(yùn)算結(jié)果的特征,他們是:CF、PF、AF、ZF、SF、OF。另一類叫做控制標(biāo)志,用來(lái)控制CPU的操作,它們是:IP、DF、TF。CF(carrier flag)進(jìn)位標(biāo)志位:運(yùn)算中高四位中發(fā)生進(jìn)位或錯(cuò)位時(shí),CF=1;否則CF=0;S
7、TC指令可置CF=1,CLR指令對(duì)CF求反;循環(huán)指令也會(huì)影響該標(biāo)志位。DF(direction flag)方向標(biāo)志位:控制串指令對(duì)字符串處理的方向。DF=0時(shí),變址地址指針SI、DI作增量操作,即由低地址向高地址進(jìn)行串操作,字節(jié)操作增量為1,字操作增量為2;DF=1時(shí),作減量操作,即由高地址向低地址進(jìn)行串操作。STD指令可置DF=1,CLD指令置DF=0。OF(overflow flag)溢出標(biāo)志位:當(dāng)運(yùn)算結(jié)果超出機(jī)器的的表示范圍時(shí)OF=1;否則為0;存在以下幾種情況可稱之為溢出【即使OF=1】?jī)蓚€(gè)正數(shù)相加得到一個(gè)負(fù)數(shù);l兩個(gè)負(fù)數(shù)相加得到一個(gè)正數(shù);兩個(gè)相同符號(hào)的數(shù)相乘得到一個(gè)負(fù)數(shù);兩個(gè)異號(hào)的數(shù)
8、相乘得到一個(gè)正數(shù)。PF(parity flag) 奇偶校驗(yàn)位:當(dāng)運(yùn)算結(jié)果的低8位中1的個(gè)數(shù)為偶數(shù)時(shí),PF=1;否則PF=0;AF(auxiliary flag)輔助進(jìn)位標(biāo)志:在運(yùn)算結(jié)果的低4位向高4位有進(jìn)位(加法)或有錯(cuò)位(減法)時(shí),AF=1否則AF=0.該標(biāo)志一般在BCD碼運(yùn)算中作為是否進(jìn)行十進(jìn)制調(diào)整的判斷。ZF(zero flag)零標(biāo)志位:結(jié)果為0,ZF=1,否則ZF=0. SF(sign flag) 符號(hào)標(biāo)志位:在進(jìn)行有符號(hào)運(yùn)算數(shù)的算術(shù)運(yùn)算,當(dāng)運(yùn)算結(jié)果為負(fù)時(shí)SF=1,否則為0。IF(interrupt flag)中斷允許標(biāo)志位:控制可屏蔽中斷的標(biāo)志。當(dāng)IF=1時(shí),允許CPU響
9、應(yīng)屏蔽中斷請(qǐng)求;當(dāng)IF=0時(shí),禁止響應(yīng)。TF(trap flag)陷阱標(biāo)志位:這是為程序調(diào)試而提供的CPU單步工作方式。TF=1時(shí),CPU每執(zhí)行完 一個(gè)條指令就產(chǎn)生一個(gè)內(nèi)部中斷,以便對(duì)每一個(gè)指令的執(zhí)行結(jié)果進(jìn)行跟蹤調(diào)查。二、數(shù)據(jù)傳送指令1、數(shù)據(jù)傳送指令通用數(shù)據(jù)傳送指令MOV(Move) 數(shù)據(jù)傳送。Mov指令形式【MOV OPRD1目的操作數(shù) OPRD2源操作數(shù)】它允許在CPU的寄存器之間、存儲(chǔ)器和寄存器之間傳送字節(jié)和字?jǐn)?shù)據(jù),也可以將立即數(shù)傳送到寄存器或存儲(chǔ)器中。功能即:將源操作數(shù)送入目的操作數(shù)中,源操作數(shù)保持不變。以下注意點(diǎn):立即數(shù)、代碼段寄存器CS(代碼段寄存器)只能做源操作數(shù);IP(指令指針
10、)寄存器不能作源操作數(shù)或目的操作數(shù);MOV指令不能在兩個(gè)存儲(chǔ)單元之間直接傳遞數(shù)據(jù),也不能在兩個(gè)段寄存器之間直接傳送數(shù)據(jù);兩個(gè)操作數(shù)的類型屬性要一致。堆棧操作指令POP(Pop from the stack)、PUSH(Push onto the stack)堆棧是以“先進(jìn)后出”方式工作的一個(gè)存儲(chǔ)區(qū),棧區(qū)的段地址由SS寄存器的內(nèi)容確定,而棧頂位置由堆棧指針SP寄存器的內(nèi)容來(lái)確定。堆棧操作指令包括入棧(PUSH)和出棧指令(POP)指令兩類。這兩條指令必須以字為操作,不能采用立即尋址方式。入棧操作:PUSH OPRD ; OPRD為源操作數(shù)。功能將源操作數(shù)壓入堆棧。 源操作數(shù)可以是16位通用寄存器
11、、段寄存器或存儲(chǔ)器中的數(shù)據(jù)字。堆棧是以“先進(jìn)后出|”的原則工作,棧區(qū)的段地址由SS寄存器的內(nèi)容確定。每一次執(zhí)行PUSH的步驟為:首先修改SP的值,SP=SP-2;低位字節(jié)地址在較低地址單位【SP】=OPRD低8位;高字節(jié)放在較高地址單位,【SP+1】=OPRD高八位。由于堆棧操作都是以字為單位進(jìn)行的,所以SP總是指向偶地址單元。出棧操作:POP OPRD ; OPRD為目的操作數(shù)。將當(dāng)前SP所指向的堆棧頂部的一個(gè)字送到指定目的操作數(shù)中。目的操作數(shù)可以是16位通用寄存器、段地址寄存器或存儲(chǔ)單元,但CS不能做目的操作數(shù)。每執(zhí)行一次POP指令后,SP=SP+2,即SP向高地址方向移動(dòng),指向棧頂。數(shù)據(jù)
12、交換指令XCGH(Exchange) XCGH OPRD1【目的操作數(shù)】 OPRD2【源操作數(shù)】把一個(gè)字節(jié)或一個(gè)字的源操作數(shù)和目的操作數(shù)相互交換。交換能在通用寄存器與累加器之間、通用寄存器與存儲(chǔ)器之間進(jìn)行。但段寄存器和立即數(shù)不能作為一個(gè)操作數(shù),也不能在累加器之間進(jìn)行。2.累加器專用傳送指令字節(jié)交換指令XLAT(Translate) XLAT 轉(zhuǎn)換表 ;換碼。用查表方式將一種代碼。XLAT指令有兩種格式,第一種格式中的“轉(zhuǎn)換表”為表格的首地址,一般為符號(hào)表示,以提高程序的可讀性,但它也可以省略,即用第二種格式。使用XLAT指令時(shí),要求BX寄存器指向該表的首地址,AL中為表中某一項(xiàng)與表
13、格首地址之間的偏移量。指令執(zhí)行時(shí),會(huì)將BX和AL中的值相加,把得到的值作為地址,然后將此地址所得對(duì)應(yīng)的存儲(chǔ)器單元中的數(shù)值讀送到AL中去。該指令是通過(guò)查表方式來(lái)完成翻譯功能的。因此,在執(zhí)行該指令之前,必須在內(nèi)存中建立好一張翻譯表,該表的最大容量為256個(gè)字節(jié)。輸入輸出指令I(lǐng)N(input)/OUT(output)輸入指令格式: IN AL,端口地址N ; IN AX,端口地址N+1N; IN AL,DX; IN AX,DX;說(shuō)明:從I/O端口輸入數(shù)據(jù)至AL/AX,允許一個(gè)字節(jié)由一個(gè)輸入端口傳送到AL中,或者把一個(gè)字由一個(gè)輸入端口傳送到AX中,若端口地址超過(guò)256(00FFH),則需用DX寄存器來(lái)
14、保存該端口地址,這樣用DX作端口地址時(shí),最多可尋址64K(0000FFFFH)。輸出指令格式: OUT AL,端口地址N ; OUT AX,端口地址N+1N; OUT DX , AL; OUT DX, AX,說(shuō)明:將AL或AX的內(nèi)容輸出至I/O端口。可將AL和AX中的內(nèi)容傳送到一個(gè)輸出端口,端口尋址方式與IN指令相同。3.有效地址傳送寄存器指令LEA(Load effective address) 有效地址送寄存 ,格式:LEA OPRD1 , OPRD 2。把源操作數(shù)的偏移地址傳送到目的操作數(shù)。LDS(Load DS
15、with Pointer) 指針?biāo)图拇嫫骱虳S。格式:LDS OPRD1,OPRD2。功能:完成一個(gè)地址指針的傳送。地址指針包括偏移地址和段地址,它們已分別存放在由源操作數(shù)給出最低地址的四個(gè)連續(xù)存儲(chǔ)單元中(即存放了一個(gè)32位的雙子數(shù)據(jù)),指令可將該數(shù)據(jù)的高16位(段地址)送入到DS,低16位(偏移地址)送入目的操作數(shù)所指出的一個(gè)16位通用寄存器或者是變址寄存器。LES(Load ES with Pointer)
16、指針?biāo)图拇嫫骱虴S。格式:LES OPRD1, OPRD2功能:這條指令除將地址指針的段地址送入ES外,與LDS類似。4.標(biāo)志寄存器傳送指令 LAHF(Load AH with flags) 標(biāo)志寄存器8位送AH。將標(biāo)識(shí)為位低8位的的數(shù)據(jù)傳至AH寄存器 SAHF(store AH into flags) AH送標(biāo)志寄存器8位。該條指令與LAHF指令的操作相反,可以將寄存器AH的內(nèi)容送至標(biāo)志
17、寄存器的低8位。 PUSHF(push the flags) 標(biāo)志進(jìn)棧。將標(biāo)志寄存器的內(nèi)容壓入堆棧頂部,同時(shí)修改堆棧指針,但不影響標(biāo)志位。 POPF(pop the flags) 標(biāo)志出棧。把當(dāng)前堆棧頂部的一個(gè)字,傳送到標(biāo)志寄存器,同時(shí)
18、修改堆棧指針,影響標(biāo)志位。二、算術(shù)指令 1.加法指令A(yù)DD(add)加法 格式:ADD OPRD1,OPRD2。功能:完成兩個(gè)操作數(shù)相加,結(jié)果送至目的操作數(shù)OPRD1,源操作數(shù)OPRD2不變。目的操作數(shù)可以是通用寄存器以及存儲(chǔ)器,源操作數(shù)可以是通用寄存器、存儲(chǔ)器或立即數(shù)。這條指令對(duì)標(biāo)志位CF、OF、PF、SF、ZF和AF有影響。注意:源操作數(shù)和目的操作數(shù)不能同時(shí)為存儲(chǔ)器,而且它們的類型必須一致,即同為字或字節(jié)。ADC (add with carry) 帶進(jìn)位的加法指令。格式ADC OPRD1,OPRD2.功能這條指令類似,只是在兩個(gè)操作數(shù)相加時(shí),
19、要把進(jìn)位標(biāo)志位CF的現(xiàn)行值加上去,結(jié)果送至目的操作數(shù)OPRD1。ADC指令主要用于多字節(jié)運(yùn)算中。這條指令對(duì)標(biāo)志位的影響與ADD相同。INC (increment) 自增指令。格式:INC OPRD。功能:完成對(duì)指定的操作數(shù)OPRD加1,然后返回操作數(shù)。此指令主要用于在循環(huán)程序中修改地址指針和循環(huán)次數(shù)等。這條指令執(zhí)行結(jié)果影響標(biāo)志位AF、OF、PF、SF和ZF,對(duì)地址標(biāo)志位CT沒(méi)有影響。2.減法指令 SUB(subtract) &
20、#160; 減法。格式:SUB OPRD1,OPRD2功能:完成兩個(gè)操作數(shù)相減,從OPRD1中減去OPRD2,結(jié)果放在OPRD1中即目的數(shù)中。 SBB(subtract with borrow) 帶借位減法。格
21、式:SBB OPRD1,OPRD2,指令功能,兩個(gè)數(shù)相減時(shí),發(fā)生借位現(xiàn)象,還要減去借位標(biāo)志位CF的當(dāng)前值,本指令對(duì)標(biāo)志位AF、CF、OF、SF、PF、ZF都有影響。 DEC(Decrement) 減1。格式DEC OPRD。功能:對(duì)指令的操作數(shù)減去1,然后送回此操作數(shù)O
22、PRD中。 CMP(Compare) 比較 。比較指令主要是比較兩個(gè)數(shù)的大小關(guān)系,在比較指令之后,可根據(jù)CF、ZF、OF等標(biāo)志位來(lái)判斷兩者大小關(guān)系, 只改變標(biāo)志位,不 改變目的操作數(shù)。3.乘法指令MUL(Unsigned M
23、ultiple) 無(wú)符號(hào)數(shù)乘法。格式:MULL OPRD ;OPRD為源操作數(shù)。A) 8位乘法,內(nèi)容放在AXB) 16位乘法,內(nèi)容放在DX(高8位)AX(低8位)IMUL(Signed Multiple)
24、60; 帶符號(hào)數(shù)乘法。格式:IMUL OPRD; OPRD為源操作數(shù)。 乘法不允許使用立即數(shù),除非是帶符號(hào)的立即數(shù)乘法。4.除法指令DIV(Unsigned divide) 無(wú)符號(hào)數(shù)除法IDIV(Signed divide)
25、0; 帶符號(hào)數(shù)除法,該指令認(rèn)為最高位為符號(hào)位。在進(jìn)行除法運(yùn)算中,在字節(jié)運(yùn)算時(shí)被除數(shù)在AX中,運(yùn)算結(jié)果商在AL中,余數(shù)在AH中。字運(yùn)算時(shí)被除數(shù)為DX;AX構(gòu)成的32位數(shù),運(yùn)算結(jié)果商在AX中,余數(shù)在DX中。A) 8位商AL余數(shù)AHB) 16位商AX余數(shù)DXC) 除以0,或者溢出均錯(cuò)誤5.符號(hào)擴(kuò)展指令CBW(Convert byte to word)
26、 字節(jié)轉(zhuǎn)換為字(有符號(hào)數(shù))格式:CBW,將AL中字節(jié)數(shù)的符號(hào)位擴(kuò)展到AH的各個(gè)位,形成AX中的數(shù)據(jù)。CWD(Contert word to double word) 字轉(zhuǎn)換為雙字(有符號(hào)數(shù))格式:CWD,將AX中字?jǐn)?shù)據(jù)的符號(hào)位擴(kuò)展到DX中的各個(gè)位,形成DX和AX中的雙字?jǐn)?shù)據(jù)。6.BCD調(diào)節(jié)指令【此處的BCD是指數(shù)字的表現(xiàn)形式采用的是BCD碼即16進(jìn)制】組合BCD數(shù) 格式:DAA或DAS 功能:組合數(shù)BCD數(shù)的加法/減調(diào)整指令,半字節(jié)1位BCD相加/減,超過(guò)9或有進(jìn)位/有錯(cuò)位,要加6進(jìn)行調(diào)整/減6進(jìn)行
27、調(diào)整。若低半字節(jié)調(diào)整后有進(jìn)位,則高半字節(jié)在做,加6進(jìn)行調(diào)整。分離BCD 數(shù) 格式AAA :分離BCD數(shù)的加法調(diào)整指令,只取低半字節(jié),其余同DAA指令。 格式 AAS 分離BCD數(shù)的減法調(diào)成指令,只取低半字節(jié),其余同DAS指令。 格式AAM 分離BCD數(shù)的乘法調(diào)整指令,兩個(gè)BCD數(shù)相乘,結(jié)果在AL中,除以10后的商在AH中,余數(shù)在AL中。 格式 AAD 分離BCD數(shù)的除法調(diào)整指令,先將兩個(gè)BCD碼轉(zhuǎn)換為一個(gè)字節(jié)二進(jìn)制數(shù)(高位*10+低位)得到被除數(shù),放于AL中,AH清零,運(yùn)算后,商送AL,余數(shù)送AH。7三、邏輯指令1.邏輯運(yùn)算指令A(yù)ND(and) &
28、#160; 邏輯與,可用于清1OR(or) 邏輯或,可用于清0NOT(not)
29、 邏輯非,按位取反即可XOR(exclusive or) 異或NEG 取反指令,即用零減去操作數(shù),再把結(jié)果送回操作數(shù)中。TEST 測(cè)試
30、指令。格式:TEST OPRD1,OPRD2功能:完成AND指令相同的操作,結(jié)果只影響標(biāo)志位,不改變目的操作數(shù)。通常使用它進(jìn)行數(shù)據(jù)中某些位是1或是0的測(cè)試。符合測(cè)試要求則轉(zhuǎn)移。2.移位指令SHL(shift logical left) 邏輯左移。SAL(shift arithmetic left) 算術(shù)左移。
31、格式:SHL/SAL OPRD1,移位次數(shù)。功是將OPRD1中的8位或16位移動(dòng)若干位(如果沒(méi)給出移位次數(shù),則默認(rèn)向做移動(dòng)一位;如果給出移動(dòng)位次數(shù),則向做移動(dòng)CL位)最左邊位(即最高位)或者最后移出位至CF,最右邊的1位(即最低位)或右邊的CL位移入0。SHR(shift logical right) 邏輯右移SAR(shift arithmetic right) &
32、#160; 算術(shù)右移。格式:SHR/SAR OPRD1,移位次數(shù)。功是將OPRD1中的8位或16位移動(dòng)若干位(如果沒(méi)給出移位次數(shù),則默認(rèn)向右邊移動(dòng)一位;如果給出移動(dòng)位次數(shù),則向右移動(dòng)CL位)最右邊位(即最低位)或者最后移出位至CF,最左邊的1位(即最高位)或右邊的CL位移入0。算數(shù)移位和邏輯移位的最區(qū)別:邏輯移位用于無(wú)符號(hào)數(shù) 算術(shù)移位用于有符號(hào)數(shù)。邏輯右移將數(shù)字右移高位補(bǔ)0;算術(shù)右移將數(shù)字右移高位補(bǔ)原來(lái)最高位的數(shù)。邏輯和算術(shù)左移都是將數(shù)字左移低位補(bǔ)0。 ROL(Rotate left)
33、 循環(huán)左移。ROR(Rotate right) 循環(huán)右移格式:ROL/ROR OPRD1功能:將OPRD1中的8位或16位二進(jìn)制數(shù)向左/向右移動(dòng),移位次數(shù)。(
34、如果沒(méi)給出移位次數(shù),則默認(rèn)向做移動(dòng)一位;如果給出移動(dòng)位次數(shù),則向做移動(dòng)CL位),從左邊/右邊移出位既移入CF又移入右邊/左邊的空出位,最后移出位移至最右邊位(即最低位)/最左邊位(即最高位),同時(shí)保留在CF。RCL(Rotate left through carry) 帶進(jìn)位循環(huán)左移RCR(Rotate right through carry) 帶進(jìn)位循環(huán)右移。格式:RCR/RCL OPRD1,移位次數(shù)。將OPRD1和進(jìn)位CF中的9位或17位二級(jí)制數(shù)一同向右移/左移1位或CL位,最右/左邊位(即最低/高位)或者最后移出位至
35、CF,CF(原內(nèi)容)移至OPRD1的最左邊/最右邊或者是中間。四、串處理指令1.重復(fù)前端指令雖然字符串指令只允許一次處理一個(gè)字節(jié)或一個(gè)字?jǐn)?shù)據(jù),但是你字符串操作指令前均可以加REF指令重復(fù)前綴,以實(shí)現(xiàn)對(duì)字符串中數(shù)據(jù)的重復(fù)處理。指令重復(fù)前綴包括無(wú)條件指令重復(fù)前綴PER、條件指令重復(fù)前綴REPE/REPZ與REPNE/REPNZ,它們必須置于字符串指令之前,其間用空格間隔,不能單獨(dú)使用。使用指令重復(fù)前綴,還必須先將重復(fù)的次數(shù)送入CX。每執(zhí)行一次字符串操作指令,CX自動(dòng)減1,直到CX=0時(shí)終止重復(fù)。方向標(biāo)志位決定重復(fù)運(yùn)算的方向:(1)使用CLD指令,設(shè)定DF=0;寄存器SI、DI由低地址到高地址變化。
36、 (2)使用STD指令,設(shè)定DF=1;寄存器SI、DI由高到低地址變化。使用指令重復(fù)前綴的一般格式位:REP(Repeat) REPC(Repeat when carry flag)重復(fù)串操作直到(CX)=0為上。無(wú)條件的重復(fù)前綴指令。REP 將使得緊跟其后的字符串操作指令無(wú)條件地重復(fù)執(zhí)行CX寄存器中內(nèi)容指定的次數(shù),直到cx=0為止。它通常用在字符串傳送指令(MOVS)、字符串存儲(chǔ)指令(STOS)之前。若CX的初值為0,則字符串指令一次也不執(zhí)行。REPNZ(Repeat when not zero flag) EPNE(
37、Repeat when not empty)REPNC(Repeat when not carry flag)字符串比較指令CMPS與字符串掃描指令SCAS也會(huì)影響狀態(tài)標(biāo)志,使指令的執(zhí)行在指定的條件下能夠立即停止。為配合此目的,REP還有兩種條件重復(fù)形式:REPE和REPNE。 與REPE配合使用的指令有以下4種格式REPE(Repeat when empty) 若(CX)=0,則退出,否則CX=CX+1;REPZ(Repeat when flag ) 若ZF=0,則退出,否則CX=CX
38、+1;2.串操作指令。字符串操作指令的實(shí)質(zhì)是對(duì)一片連續(xù)的存儲(chǔ)單元進(jìn)行處理,這片連續(xù)的存儲(chǔ)單元由隱含指針DS:SI或ES:DI來(lái)指定;字符串操作指令可對(duì)內(nèi)存單元按照字節(jié)、字、雙字進(jìn)行處理,并能根據(jù)操作對(duì)象的字節(jié)數(shù)使變址寄存器SI/DI增加或減少1、2、4字節(jié);規(guī)定如下:A.當(dāng)DF=0時(shí),變址寄存器SI/DI增加1、2、4字節(jié);即:變址寄存器SI/DI遞增的步長(zhǎng)可以是1、2、4字節(jié);B.當(dāng)DF=1時(shí),變址寄存器SI/DI減少1、2、4字節(jié);即:變址寄存器SI/DI遞減的步長(zhǎng)可以是1、2、4字節(jié);取字符串?dāng)?shù)據(jù)指令(Load String Instruction)從指針DI:SI所指定的內(nèi)存單元開(kāi)始,
39、取一個(gè)字節(jié)/字/雙字,然后存入到AL/AX/EAX中,并根據(jù)標(biāo)志位DF的值對(duì)寄存器SI做相應(yīng)的增減;把存放字符串?dāng)?shù)據(jù)的連續(xù)存儲(chǔ)區(qū)當(dāng)做是數(shù)據(jù)源,使用寄存器SI;該指令的執(zhí)行不會(huì)影響任何標(biāo)志位;指令格式: LODSB/LODSW 地址表達(dá)式 LODSD 地址表達(dá)式 ;80386+在
40、指令LODS中,它會(huì)根據(jù)"地址表達(dá)式"的屬性來(lái)決定讀取一個(gè)字節(jié)、字或雙字;即:當(dāng)該地址表達(dá)式的屬性為字節(jié)、字或雙字時(shí),將從指針DI:SI處讀取一個(gè)字節(jié)到AL中,或讀取一個(gè)字到AX中,或讀取一個(gè)雙字到EAX中,與此同時(shí),SI還將分別增減1、2、4字節(jié);取字符串?dāng)?shù)據(jù)指令的功能示意圖如下圖所示:置字符串?dāng)?shù)據(jù)指令(Store String Instruction)該指令把寄存器AL/AX/EAX中的值存入指針ES:DI所指向內(nèi)存單元開(kāi)始的一片存儲(chǔ)單元中,并根據(jù)標(biāo)志位DF的值對(duì)寄存器DI做相應(yīng)的增減;把存放字符串的連續(xù)存儲(chǔ)區(qū)當(dāng)做是數(shù)據(jù)的目的地,使用寄存器DI;該指令的執(zhí)行并不會(huì)影響任
41、何標(biāo)志位;指令格式: STOSB/STOSW 地址表達(dá)式 STOSD 地址表達(dá)式 ;80386+置字符串?dāng)?shù)據(jù)指令的功能示意圖如下圖所示:字符串傳送指令(Mo
42、ve String Instruction)該指令把指針DS:SI所指向的字節(jié)、字或雙字傳送給指針ES:DI所指向的內(nèi)存單元,并根據(jù)標(biāo)志位DF的值對(duì)寄存器DI和SI分別作相應(yīng)的增減;該指令的執(zhí)行并不會(huì)影響任何標(biāo)志位;指令格式: MOVSB/MOVSW 地址表達(dá)式1,地址表達(dá)式2 MOVSD 地址表達(dá)
43、式1,地址表達(dá)式2 ;80386+字符串傳送指令的功能示意圖如下圖所示: 輸入字符串指令(Input String Instruction)該指令是從某一指定端口接受一個(gè)字符串,并存入到一片連續(xù)的存儲(chǔ)單元中;輸入端口由寄存器DX指定,存儲(chǔ)單元的首地址由指針ES:DI來(lái)確定,讀入的數(shù)據(jù)個(gè)數(shù)由寄存器CX來(lái)確定;在指令的執(zhí)行過(guò)程中,還要根據(jù)標(biāo)志位DF的值來(lái)對(duì)寄存器DI做相應(yīng)的增減;把存放字符串的連續(xù)存儲(chǔ)區(qū)當(dāng)做是數(shù)據(jù)的目的地;該指令不會(huì)影響任何標(biāo)志位;與指令有關(guān)的操作數(shù)ES、DI、DX和CX等都是隱含操作數(shù);指令格式: &
44、#160; INSB/INSW 地址表達(dá)式 INSD 地址表達(dá)式 ;80386+字符串輸出指令(Output String Instruction)該指令是把一個(gè)給定的字符串輸出到一個(gè)指定的端口中;輸出端口由通用寄存器DX指定,輸出數(shù)據(jù)的首地址由指針DS:SI確定
45、,輸出數(shù)據(jù)的個(gè)數(shù)由計(jì)數(shù)寄存器CX來(lái)確定;在指令執(zhí)行的過(guò)程中,還要根據(jù)方向標(biāo)志DF的值來(lái)對(duì)變址寄存器SI做相應(yīng)的增減;該指令的執(zhí)行并不會(huì)影響任何標(biāo)志位;與指令有關(guān)的操作數(shù)DS、SI、DX和CX等都是隱含操作數(shù);指令格式: OUTSB/OUTSW 地址表達(dá)式 OUTSD 地址表達(dá)式 ;80386+字符串
46、比較指令(Compare String Instruction)該指令是把指針DS:SI所指向的字節(jié)、字、雙字的值與指針ES:DI所指向的字節(jié)、字、雙字的值相減,并用所得到的差來(lái)設(shè)置相關(guān)標(biāo)志位;與此同時(shí),變址寄存器SI和DI也將根據(jù)方向標(biāo)志位DF的值做相應(yīng)的增減;指令格式: CMPSB/CMPSW 地址表達(dá)式1,地址表達(dá)式2 CMPSD
47、; 地址表達(dá)式1,地址表達(dá)式2 ;80386+受影響的標(biāo)志位: AF,CF,OF,PF,SF,ZF字符串比較指令的功能示意圖如下圖所示:字符串掃描指令(Scan String Instruction)該指令是用指針ES:DI所指向字節(jié)/字/雙字的值與相應(yīng)的AL/AX/EAX的值相減,并依據(jù)所得到的差值來(lái)設(shè)置相關(guān)標(biāo)志位;與此同時(shí),變址寄存器DI還將根據(jù)方向標(biāo)志DF的值來(lái)做相應(yīng)的增減;指令格式: SCASB/SCASW 地址表達(dá)式 &
48、#160; SCASD 地址表達(dá)式 ;80386+受影響的標(biāo)志位: AF,CF,OF,PF,SF,ZF字符串掃描指令的功能示意圖如下圖所示:重復(fù)字符串操作指令(Repeat String Instruction)前面的字符串操作指令:取字符串?dāng)?shù)據(jù)、置字符串?dāng)?shù)據(jù)、字符串傳送、輸入字符串、輸出字符串、字符串比較、字符串掃描,等指令,都是執(zhí)行一次所具有的功能;但是,每個(gè)字符串通常都是由多個(gè)字符組成的,所以,需要重復(fù)執(zhí)行這些字符串操作指令;為了滿足這種需要,指
49、令系統(tǒng)提供了一組重復(fù)前綴指令;雖然在這些字符串指令的前面都可以添加一個(gè)重復(fù)前綴指令,但是由于指令執(zhí)行結(jié)果的差異,對(duì)某個(gè)具體的字符串指令又不用重復(fù)前綴指令而改用其它循環(huán)來(lái)實(shí)現(xiàn)重復(fù)的需要;重復(fù)字符串操作指令對(duì)標(biāo)志位的影響是由被重復(fù)的字符串操作指令來(lái)決定;.重復(fù)前綴指令REP(Repeat String Instruction)重復(fù)前綴指令是重復(fù)其后指定的字符串操作指令,重復(fù)的次數(shù)由計(jì)數(shù)寄存器CX來(lái)決定;指令格式:REP LODS/LODSB/LODSW/LODSDREP STOS/STOSB/STOSW/STOSDREP MOVS/MOVSB/MOVSW/MOVSDREP INS/INSB/INS
50、W/INSDREP OUTS/OUTSB/OUTSW/OUTSD重復(fù)前綴指令的執(zhí)行步驟如下:STEP1:判斷: CX=0STEP2:如果CX=0,則結(jié)束重復(fù)操作,執(zhí)行程序中的下一條指令;STEP3:否則,CX=CX-1(不影響相關(guān)標(biāo)志位),并執(zhí)行重復(fù)前綴指令后面指定的字符串操作指令,在該指令執(zhí)行完后,再轉(zhuǎn)到步驟STEP1;從上面的重復(fù)前綴指令格式來(lái)看,雖然我們可以使用重復(fù)前綴指令來(lái)重復(fù)取字符串?dāng)?shù)據(jù)指令(第一組指令),但是可能會(huì)因?yàn)橹噶畹膱?zhí)行結(jié)果而在程序中幾乎不會(huì)使用;例如:編寫一段程序,計(jì)算字符串"12345abcdefg"中各個(gè)字符的ASCII之和;解:.MESS DB '12345abcdefg' ;在數(shù)據(jù)段進(jìn)行變量說(shuō)明.MOV AX,SEG MESSMOV DS,AXLEA SI,MESS ;用DS:SI來(lái)指向字符串的首地址;MOV CX,13D &
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 深度剖析Adobe考試試題及答案
- 智能交通管理與應(yīng)急響應(yīng)機(jī)制試題及答案
- 焊接工程師職業(yè)能力評(píng)估標(biāo)準(zhǔn)試題及答案
- 焊接工程師資格考試應(yīng)對(duì)互動(dòng)模擬試題及答案
- 2024年Adobe考試內(nèi)容與形式研究的啟示試題及答案
- 深入紡織機(jī)械故障處理實(shí)戰(zhàn)案例試題及答案
- 智能交通理念下的城市規(guī)劃策略試題及答案
- 智慧交通可持續(xù)發(fā)展試題及答案
- 機(jī)械工程師資格證書考試對(duì)學(xué)科交叉能力提升的影響分析試題及答案
- 全面復(fù)習(xí)的酒店經(jīng)營(yíng)管理師試題及答案
- 西南名校聯(lián)盟2025屆“3 3 3”高考備考診斷性聯(lián)考(二)政治-答案
- 2024年湖南常德煙草機(jī)械有限責(zé)任公司招聘筆試真題
- 2025-2030中國(guó)光學(xué)級(jí)PMMA行業(yè)現(xiàn)狀調(diào)查與前景策略分析研究報(bào)告
- 2024年四川眉山中考滿分作文《時(shí)光剪影中的那抹溫柔》
- 25春國(guó)家開(kāi)放大學(xué)《管理英語(yǔ)3》形考任務(wù)(綜合測(cè)試+寫作+學(xué)習(xí)表現(xiàn))參考答案
- 2025年反洗錢法 試題及答案
- 橋梁工程施工方案及技術(shù)措施專項(xiàng)方案
- 2025年安徽江東控股集團(tuán)有限責(zé)任公司招聘筆試參考題庫(kù)含答案解析
- 船員安全培訓(xùn)課件
- Unit1 All about feelings. Language in use(第3課時(shí))(教學(xué)設(shè)計(jì))-三年級(jí)英語(yǔ)下冊(cè)同步備課系列(Join in外研劍橋·2024)
- 醫(yī)療行業(yè)上云用云研究報(bào)告2024
評(píng)論
0/150
提交評(píng)論