




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
微機(jī)原理及應(yīng)用第3章8086尋址方式和指令系統(tǒng)2尋址方式和指令系統(tǒng)8086尋址方式8086指令系統(tǒng)38086尋址方式指令操作碼-操作的性質(zhì)操作數(shù)-操作的對(duì)象尋址方式-說(shuō)明操作數(shù)本身或其所在地址的方法指令格式操作碼 目的操作數(shù),源操作數(shù);注釋例MOV AL,148086尋址方式指令中直接給出操作數(shù)操作數(shù)地址寄存器操作數(shù)操作數(shù)地址寄存器+地址偏移量操作數(shù)地址基址寄存器+變址寄存器操作數(shù)地址基址寄存器+變址寄存器+地址偏移量操作數(shù)地址立即尋址直接尋址寄存器尋址寄存器間接尋址寄存器相對(duì)尋址基址變址尋址相對(duì)基址變址尋址MOVAL,20HMOVAL,[1234H]MOVAL,BHMOVAL,[BX]MOVAX,200H[BX]MOVAX,[BX][SI]MOVAX,200H[BX][SI]5立即尋址(ImmediateAddressing)操作數(shù)直接包含在指令中直接給出的操作數(shù)稱(chēng)為立即數(shù),可為字節(jié)或字低地址高地址CS段操作碼34H12H34H12HCX注意:立即數(shù)只能作源操作數(shù),不能作目的操作數(shù);以A~F開(kāi)頭的數(shù)字出現(xiàn)在指令中需在前加0
例:MOVCX,1234H6寄存器尋址(RegisterAddressing)操作數(shù)包含在指令中指定的8位或16位寄存器中寄存器:AX,BX,CX,DX,SI,DI,SP,BPAH,AL,BH,BL,CH,CL,DH,DL寄存器尋址可以在CPU內(nèi)部立即執(zhí)行,故指令執(zhí)行速度最快注意:源操作數(shù)與目的操作數(shù)長(zhǎng)度必須一致,即都為8位或16位例:MOVDX,AXMOVCL,AH7直接尋址(DirectAddressing)指令中的直接給出操作數(shù)的有效地址EA(EffectiveAddress,即偏移地址)
操作數(shù)默認(rèn)在DS段中,如果操作數(shù)在數(shù)據(jù)段以外,必須在直接地址前加段超越前綴操作數(shù)的物理地址=16×段地址+EA地址加[],與立即數(shù)尋址區(qū)分允許出現(xiàn)符號(hào)地址例:MOVAX,[2000H]
MOVAX,ES:[500H]例:MOVAX,ADDR1
MOVAX,[ADDR1]8直接尋址(DirectAddressing)例:MOVAX,[2000H]低地址高地址CS段操作碼00H20H34H12HAXDS300034H12HDS段3000032000200032000+×10H9寄存器間接尋址
(RegisterIndirectAddressing)指令中給出的寄存器中的內(nèi)容是操作數(shù)的有效地址EA寄存器加[],與寄存器尋址區(qū)別間址寄存器:基址寄存器BX、BP和變址寄存器SI、DIBX、SI、DI作間址寄存器時(shí),默認(rèn)段地址為DS中內(nèi)容BP作間址寄存器時(shí),默認(rèn)段地址為SS中內(nèi)容可以指定段超越前綴訪問(wèn)默認(rèn)段以外數(shù)據(jù)例:MOVAX,DS:[BP]MOVAX,ES:[SI]10寄存器間接尋址
(RegisterIndirectAddressing)例:MOVBX,[SI]低地址高地址CS段操作碼8BH31H8BH31HBXDS段1000012000200012000+SIDS1000×10H11寄存器相對(duì)尋址
(RegisterRelativeAddressing)指令中指定寄存器中內(nèi)容與指令中指定的位移量之和為操作數(shù)有效地址EA除了需要加位移量,其它與寄存器間接尋址相同:相對(duì)尋址寄存器:基址寄存器BX、BP和變址寄存器SI、DIBX、SI、DI作間址寄存器時(shí)默認(rèn)段地址為DS中內(nèi)容BP作間址寄存器時(shí),默認(rèn)段地址為SS中內(nèi)容允許使用段超越前綴例:MOVBX,200H[BP]
MOVBX,[BP+200H]
MOVAX,ES:1200H[BP]12寄存器相對(duì)尋址
(RegisterRelativeAddressing)例:MOVBX,4000H[SI]低地址高地址CS段操作碼00H40H34H12H34H12HBXDS段3000036000SI400036000+DS20003000×10H13基址變址尋址
(BasedIndexedAddressing)指令中指定一個(gè)基址和一個(gè)變址寄存器,其內(nèi)容之和為操作數(shù)的有效地址EA基址寄存器:BX或BP;變址寄存器:SI或DI基址寄存器為BX時(shí),段寄存器為DS物理地址=16×DS+BX+SI(DI)基址寄存器為BP時(shí),段寄存器為SS物理地址=16×SS+BP+SI(DI)例:MOVAX,[BX][SI]≌MOVAX,[BX+SI]14基址變址尋址
(BasedIndexedAddressing)例:MOVAX,[BX][SI]低地址高地址CS段操作碼34H12H34H12HAXDS段31700SI31700+DS05003000×10HBX1200操作碼15相對(duì)基址變址尋址
(RelativeBasedIndexedAddressing)指令中指定一個(gè)基址、一個(gè)變址寄存器和一個(gè)位移量,其內(nèi)容之和為操作數(shù)的有效地址EA除了需要加位移量,其他與基址變址尋址相同:基址寄存器:BX或BP;變址寄存器:SI或DI基址寄存器為BX時(shí),段寄存器為DS物理地址=16×DS+BX+SI(DI)+位移量基址寄存器為BP時(shí),段寄存器為SS物理地址=16×SS+BP+SI(DI)+位移量16相對(duì)基址變址尋址
(RelativeBasedIndexedAddressing)例:MOVAX,200H[BX][SI]
≌MOVAX,200H[BX+SI] ≌MOVAX,[200H+BX+SI] ≌MOVAX,[BX+200H][SI]如DS=2000H,BX=1500H,SI=0300H,則物理地址=16×DS+BX+SI+200H
=20000H+1500H+300H+200H
=21A00HAX(21A00H)=26BFH17存儲(chǔ)器尋址188086指令系統(tǒng)數(shù)據(jù)傳送指令算術(shù)運(yùn)算指令邏輯運(yùn)算1920數(shù)據(jù)傳送指令通用數(shù)據(jù)傳送指令輸入輸出指令地址目標(biāo)傳送指令標(biāo)志傳送指令MOV目的,源
PUSH源
POP目的
XCHG目的,源INAL,端口地址
INAX,端口地址
INAL,DXINAX,DXOUT端口地址,ALOUT端口地址,AXOUTDX,ALOUTDX,AXLEA目的,源PUSHFPOPF21通用數(shù)據(jù)傳送指令-MOVMOV指令允許傳送數(shù)據(jù)的途徑存儲(chǔ)器立即數(shù)段寄存器CS,DS,ES,SS通用寄存器AX AHBX ALCX BHDX BLSI CHDI CLSP DHBP DLIP不能作源和目的操作數(shù)立即數(shù)和CS寄存器不能作目的操作數(shù)立即數(shù)不能直接傳送給段寄存器兩個(gè)存儲(chǔ)器和兩個(gè)段寄存器之間不能直接傳送數(shù)據(jù)22通用數(shù)據(jù)傳送指令-MOV例MOV[BX],0FEH MOVAL,30H MOVBL,‘S’ MOVAX,1250H MOVBX,OFFSETTABLE MOV[BP],BXMOVCL,5[BX]MOV[SI],DSMOVES,AXMOVAX,DX例MOV60H,ALMOV[BX],[SI]MOVCS,AXMOVBX,IPMOVDS,ESMOVCX,AL23通用數(shù)據(jù)傳送指令-PUSHPUSH源源操作數(shù)為字?jǐn)?shù)據(jù),但不能是立即數(shù)先進(jìn)后出堆棧區(qū)段地址由SS確定堆棧指針SP指向棧頂,總為偶數(shù),從FFFEH到0PUSHBXSP←SP-2[SP]=BX24通用數(shù)據(jù)傳送指令-POPPOP目的CS不能作為目的操作數(shù)例:設(shè)SS=2000H,SP=40H,BX=3120H,AX=25FEHSPAXBX25FE31202000:003E2000:00002000:004020312000:003CFE25FE25PUSHBXPUSHAXPOPBXBX=[SP]SP←SP+225通用數(shù)據(jù)傳送指令-XCHG段寄存器不能作操作數(shù),兩個(gè)存儲(chǔ)器之間不能直接交換寄存器存儲(chǔ)器例:設(shè)AX=2000H,DS=3000H,BX=1800H,(31A00H)=1995HXCHGAX,[BX+200H]源操作數(shù)物理地址=DS*10H+BX+200H=31A00H執(zhí)行后結(jié)果:AX=1995H;(31A00H)=2000H26輸入輸出指令I(lǐng)N輸入指令(input)INAL,端口地址INAX,端口地址INAL,DX;端口地址存放在DX中INAX,DX8位端口地址16位端口地址16位端口地址8位端口地址OUT輸出指令(output)OUT端口地址,ALOUT端口地址,AXOUTDX,ALOUTDX,AX注:當(dāng)端口地址號(hào)大于FFH時(shí),必須先將端口地址送DX輸入輸出指令輸入指令應(yīng)用舉例:IN AL, 80HIN AX,0F3HMOVDX,310HIN
AL,DX輸出指令應(yīng)用舉例OUT40H,ALMovDX,0FF0HOUTDX,ALMOVDX,310HOUTDX,AX2728地址目標(biāo)傳送指令LEA取有效地址指令格式:LEA目的,源;取源操作數(shù)偏移地址送到目的操作數(shù)中源操作數(shù)必須是存儲(chǔ)單元目的操作數(shù)必須是除段寄存器外的16位寄存器注意與MOV指令的區(qū)別例假設(shè)SI=1000H,DS=5000H,(51000H)=1234H LEABX,[SI] MOVBX,[SI] ;BX=1000H;BX=1234H29標(biāo)志傳送指令PUSHF:標(biāo)志入棧指令PUSHF標(biāo)志內(nèi)容入棧,同時(shí)SP<-SP-2,對(duì)標(biāo)志位無(wú)影響POPF:標(biāo)志出棧指令POPF將當(dāng)前棧頂指針SP所指的字送flags,并使SP<-SP+230算術(shù)運(yùn)算指令加法指令(Addition)減法指令(Subtraction)乘法指令(Multiply)除法指令(Division)3132加法指令(Addition)ADD加法指令A(yù)DD目的,源;目的←源+目的ADC帶進(jìn)位的加法指令A(yù)DC目的,源;目的←源+目的+CF,用于多字節(jié)加法目的操作數(shù)只能是寄存器和存儲(chǔ)單元源操作數(shù)可以是寄存器、存儲(chǔ)器或立即數(shù)注意:源和目的操作數(shù)不能同時(shí)為存儲(chǔ)器,必須都是字節(jié)或字例
ADDAL,45HADDBL,DLADDAX,CXADD[BX],CLADDBX,[BP+SI]例
ADD85H,ALADD5[BX],[BP]ADDBX,CL3334加法指令(Addition)INC增量指令I(lǐng)NC目的;目的←目的+1目的操作數(shù)可以在通用寄存器或內(nèi)存中主要用于循環(huán)程序中,對(duì)地址指針和循環(huán)計(jì)數(shù)器進(jìn)行修改對(duì)AF、OF、PF、SF、ZF有影響,不影響CF對(duì)存儲(chǔ)單元操作時(shí)必須說(shuō)明是字還是字節(jié)例:INCBL;INCBYTE
PTR[BX]INCCX;INCWORD
PTR[BX]35減法指令(Subtraction)SUB減法指令SUB目的,源;目的←目的-源SBB帶借位的減法指令SBB目的,源;目的←目的-源-CF,用于多字節(jié)減法DEC減量指令DEC目的;目的←目的-1NEG取負(fù)指令NEG目的;目的←0-目的CMP比較指令CMP目的,源;目的-源,將結(jié)果反映到標(biāo)志位上36減法指令(Subtraction)SUB、SBB、CMP源操作數(shù)可以是寄存器、存儲(chǔ)器和立即數(shù);目的操作數(shù)可以是寄存器或存儲(chǔ)器源操作數(shù)和目的操作數(shù)不能同時(shí)是存儲(chǔ)器DEC、NEG目的操作數(shù)可以是寄存器或存儲(chǔ)器,不能是立即數(shù)對(duì)存儲(chǔ)器必須說(shuō)明是字節(jié)或是字除DEC指令不影響CF標(biāo)志外,其他均影響OF、SF、ZF、AF、PF和CF37例:x、y、z均為32位數(shù),分別存放在地址為X,X+2;Y,Y+2;Z,Z+2的存儲(chǔ)單元中,用指令序列實(shí)現(xiàn)wx+y+24-z,結(jié)果放在W,W+2單元中。
MOVAX,XMOVDX,X+2ADDAX,YADCDX,Y+2;x+yADDAX,24ADCDX,0;x+y+24
SUBAX,Z
SBBDX,Z+2;x+y+24-zMOVW,AXMOVW+2,DX;結(jié)果存入W,W+2單元邏輯運(yùn)算與移位指令3839邏輯運(yùn)算指令NOT取反指令NOT目的目的←目的AND邏輯與指令A(yù)ND目的,源目的←目的∧源OR邏輯或指令OR目的,源目的←目的∨源XOR異或指令XOR目的,源目的←目的∨源TEST測(cè)試指令TEST目的,源目的∧源邏輯運(yùn)算指令對(duì)字節(jié)或字操作數(shù)進(jìn)行按位操作注:NOT不影響標(biāo)志位,其它指令執(zhí)行后均使CF、OF清0,ZF、SF和PF由結(jié)果定,AF未定義TEST測(cè)試指令
指令格式TEST目的,源指令功能
對(duì)兩個(gè)操作數(shù)進(jìn)行邏輯與操作,并修改標(biāo)志位,但不回送結(jié)果,及指令執(zhí)行后,兩個(gè)操作數(shù)都不變。注意:本指令通常用在需要檢測(cè)某些條件是否滿(mǎn)足,又不希望改變目的操作數(shù)的情況,緊跟在這條指令后的往往是一條條件轉(zhuǎn)移指令。40例:AL寄存器中設(shè)有報(bào)警標(biāo)志位,若D7=1,表示溫度報(bào)警,要轉(zhuǎn)入溫度報(bào)警處理程序T_ALARM,D6=1轉(zhuǎn)壓力報(bào)警程序P_ALARMTESTAL,80HJNZT_ALARMTESTAL,40HJNZP_ALARM41(1)非循環(huán)移位指令算術(shù)左移指令SAL(ShiftArithmeticLeft)算術(shù)右移指令SAR(ShiftArithmeticRight)邏輯左移指令SHL(ShiftLeft)邏輯右移指令SHR(ShiftRight)這4條指令的格式相同,以SAL為例:
SALmem/reg,2.移位指令42CL;移位位數(shù)大于1時(shí)1;移位位數(shù)等于1時(shí)移位指令執(zhí)行的操作如下圖所示:43最低位最高位CF0(a)算術(shù)/邏輯左移SAL/SHL最低位最高位CF(b)算術(shù)右移SAR最低位最高位CF(c)邏輯右移SHR0非循環(huán)移位指令功能示意圖算術(shù)移位——把操作數(shù)看做有符號(hào)數(shù);邏輯移位——把操作數(shù)看做無(wú)符號(hào)數(shù)。移位位數(shù)放在CL寄存器中,如果只移1位,也可以直接寫(xiě)在指令中。例如:
MOVCL,4 SHRAL,CL;AL中的內(nèi)容右移4位影響CF,PF,SF,ZF,OF標(biāo)志。結(jié)果未溢出時(shí):左移1位≡操作數(shù)*2
右移1位≡操作數(shù)/244例:把AL中的數(shù)x乘10因?yàn)?0=8+2=23+21,所以可用移位實(shí)現(xiàn)乘10操作。程序如下:
SALAL,1;2x MOVAH,AL SALAL,1;4xSALAL,1;8xADDAL,AH;8x+2x=10x45(2)循環(huán)移位指令46不含進(jìn)位位的循環(huán)左移指令ROL
不含進(jìn)位位的循環(huán)右移指令ROR含進(jìn)位位的循環(huán)左移指令RCL
含進(jìn)位位的循環(huán)右移指令RCR格式同非循環(huán)移位指令。移位位數(shù)放在CL寄存器中,如果只移1位,也可以直接寫(xiě)在指令中。循環(huán)移位指令只影響標(biāo)志位CF和OF。這4條指令的功能如下圖示:47最低位最高位CF(a)ROL最低位最高位CF(c)RCL最低位最高位CF(b)ROR最低位最高位CF(d)RCR循環(huán)移位指令功能示意圖用移位操作代替乘除法可提高運(yùn)算速度例:前例中計(jì)算x×10。(1)采用乘法指令:
MOV BL,10MUL BL
共需70~77個(gè)T周期。(2)采用移位和加法指令:
SAL AL,1;2TMOV AH,AL;2TSAL AL,1;2TSAL AL,1;2TADD AL,AH;3T只需11個(gè)T周期,僅相當(dāng)于乘法的1/7。4849程序控制指令控制轉(zhuǎn)移指令分為:轉(zhuǎn)移指令循環(huán)控制指令調(diào)用和返回指令中斷指令50511.轉(zhuǎn)移指令轉(zhuǎn)移指令的實(shí)質(zhì):改變IP(或CS)的內(nèi)容。所有轉(zhuǎn)移指令不會(huì)影響標(biāo)志位。分為無(wú)條件轉(zhuǎn)移和條件轉(zhuǎn)移兩種。52本指令無(wú)條件轉(zhuǎn)移到指定的目標(biāo)地址,以執(zhí)行從該地址開(kāi)始的程序段。根據(jù)設(shè)置CS、IP的方法,JMP指令分成4種情況。
①段內(nèi)直接轉(zhuǎn)移:JMPdisp
指令中給出的8/16位的位移量加到IP。CS保持不變。②段內(nèi)間接轉(zhuǎn)移:JMPreg/mem
reg/mem中的16位偏移地址送IP。CS保持不變。③段間直接轉(zhuǎn)移JMPsegment:offset指令中給出的16位的段和16位的偏移地址送到CS和IP。④段間間接轉(zhuǎn)移JMPmem32
mem32中的16位的段和16位的偏移地址送到CS和IP。(1)無(wú)條件轉(zhuǎn)移指令-JMP53①段內(nèi)直接轉(zhuǎn)移轉(zhuǎn)移的目標(biāo)地址由指令直接給出。指令中給出的目標(biāo)地址實(shí)際上是一個(gè)相對(duì)于IP的位移量:
位移量轉(zhuǎn)移范圍匯編語(yǔ)言中格式
8位
-128~+127JMPSHORTOPRD
16位
-32768~+32767JMPNEARPTROPRD例:JMP 0120H ;直接轉(zhuǎn)向0120H JMP SHORTLP ;轉(zhuǎn)向LPJMP NEARPTRBBB ;轉(zhuǎn)向BBB由于是段內(nèi)轉(zhuǎn)移,故轉(zhuǎn)移后CS內(nèi)容保持不變轉(zhuǎn)移的目標(biāo)地址由寄存器或存儲(chǔ)單元的內(nèi)容給出。例1:JMPSI若(SI)=1200H,則指令執(zhí)行后,(IP)=1200H,于是轉(zhuǎn)向代碼段的偏移地址1200H處開(kāi)始執(zhí)行。注意:目標(biāo)地址以段內(nèi)偏移的形式給出,而不是相對(duì)于IP的位移量,所以它是一個(gè)16位的操作數(shù)。54②段內(nèi)間接轉(zhuǎn)移例2:JMP[BX+DI]設(shè)指令執(zhí)行前:(DS)=3000H,(BX)=1300H,(DI)=1200H,(32500H)=2350H;則指令執(zhí)行后:(IP)=2350H在匯編語(yǔ)言中,段內(nèi)間接尋址通常寫(xiě)成:
JMP WORDPTR[BX+DI]表示所取得的目標(biāo)地址是一個(gè)字。55在指令中直接給出要轉(zhuǎn)移到的目的段地址和偏移地址。
例:JMP 2000H:1000H執(zhí)行時(shí),(IP)←1000H,(CS)←2000H注:直接地址為符號(hào)地址時(shí),段間直接轉(zhuǎn)移指令中的符號(hào)地址前應(yīng)加操作符FARPTR。
例:JMPFARPTRfar_label其中的far_label為遠(yuǎn)類(lèi)型的標(biāo)號(hào)。56③段間直接轉(zhuǎn)移57④段間間接轉(zhuǎn)移轉(zhuǎn)移的目的地址(段和偏移)在兩個(gè)相鄰的字存儲(chǔ)單元中。例如:
JMP DWORDPTR[SI]設(shè)指令執(zhí)行前:(DS)=4000H,(SI)=1212H,(41212H)=1000H,(41214H)=4A00H則指令執(zhí)行后:(IP)=1000H,(CS)=4A00H于是轉(zhuǎn)到4B000H處開(kāi)始執(zhí)行指令。例中的DWORDPTR表示轉(zhuǎn)移地址是一個(gè)雙字。58(2)條件轉(zhuǎn)移指令-JXX條件轉(zhuǎn)移指令可實(shí)現(xiàn)程序的條件分支。條件轉(zhuǎn)移指令根據(jù)標(biāo)志位的狀態(tài)來(lái)決定是否進(jìn)行分支轉(zhuǎn)移。格式:
JXXlabel
;xx為條件名稱(chēng)縮寫(xiě)指令的轉(zhuǎn)移范圍為-128~+127字節(jié)。常見(jiàn)的條件轉(zhuǎn)移指令參見(jiàn)P111-112表3-11和表3-12JB/JC;低于,或CF=1,則轉(zhuǎn)移JNB/JNC/JAE;高于或等于,或CF=0,則轉(zhuǎn)移JP/JPE;奇偶標(biāo)志PF=1(偶),則轉(zhuǎn)移JNP/JPO;奇偶標(biāo)志PF=0(奇),則轉(zhuǎn)移JZ/JE;結(jié)果為零(ZF=1),則轉(zhuǎn)移JNZ/JNE;結(jié)果不為零(ZF=0),則轉(zhuǎn)移JS;SF=1,則轉(zhuǎn)移JNS;SF=0,則轉(zhuǎn)移JO ;OF=1,則轉(zhuǎn)移JNO ;OF=0,則轉(zhuǎn)移59①根據(jù)單個(gè)標(biāo)志位設(shè)置的條件轉(zhuǎn)移指令60②根據(jù)組合條件設(shè)置的條件轉(zhuǎn)移指令這類(lèi)指令主要用來(lái)判斷兩個(gè)數(shù)的大小。一般指令序列為:
CMPdist,src;比較Jxxlabel;根據(jù)比較結(jié)果轉(zhuǎn)移判斷無(wú)符號(hào)數(shù)的大小JA高于則轉(zhuǎn)移(dist>src)轉(zhuǎn)移條件為:CF=0且ZF=0JNA/JBE低于或等于則轉(zhuǎn)移(dist≤src)轉(zhuǎn)移條件為:CF=1或ZF=161JG;大于則轉(zhuǎn)移(dist>src)轉(zhuǎn)移條件為:(SF⊕OF=0)且ZF=0JGE;大于或等于則轉(zhuǎn)移(dist≥src)轉(zhuǎn)移條件為:(SF⊕OF=0)或ZF=1JL;小于則轉(zhuǎn)移(dist<src)轉(zhuǎn)移條件為:(SF⊕OF=1)且ZF=0JLE;小于或等于則轉(zhuǎn)移(dist≤src)轉(zhuǎn)移條件為:(SF⊕OF=1)或ZF=1判斷有符號(hào)數(shù)的大小62
JCXZlabel
若(CX)=0,則轉(zhuǎn)移到label處開(kāi)始執(zhí)行。③根據(jù)CX內(nèi)容來(lái)決定是否轉(zhuǎn)移的轉(zhuǎn)移指令條件轉(zhuǎn)移指令舉例:以十六進(jìn)制數(shù)形式顯示BX中的內(nèi)容。
MOV BX,1234H MOV CH,4 ;CH做循環(huán)計(jì)數(shù)器ROT: MOV CL,4 ;CL做移位計(jì)數(shù)器 ROL BX,CL ;將最高4位移到低4位
MOV AL,BL AND AL,0FH ;取出低4位 ADD AL,30H ;轉(zhuǎn)換為ASCII碼
CMP AL,39H ;與’9’比較
JBE DISP ;若(AL)≤‘9’,則轉(zhuǎn)顯示
ADD AL,7 ;若(AL)>’9’,再加7轉(zhuǎn)為‘A’-‘F’DISP: MOV DL,AL ;(DL)←字符
MOV AH,2 INT 21H ;顯示輸出
DEC CH ;4個(gè)十六進(jìn)制數(shù)顯示完否?
JNZ ROT ;沒(méi)有,循環(huán)
MOV DL,48H ;‘H’ MOV AH,2 INT 21H ;最后顯示’H’63642.循環(huán)控制指令用在循環(huán)程序中以確定是否要繼續(xù)循環(huán)。循環(huán)次數(shù)通常置于CX中。轉(zhuǎn)移的目標(biāo)應(yīng)在距離本指令-128~+127的范圍之內(nèi)。循環(huán)控制指令不影響標(biāo)志位。(1)LOOP格式:LOOPlabel操作:(CX)-1→CX;若(CX)≠0,則轉(zhuǎn)至label處執(zhí)行;否則退出循環(huán),執(zhí)行LOOP后面的指令。
注:LOOP指令與下面的指令段等價(jià):
DECCX JNZlabel6566(2)LOOPZ(LOOPE)格式:LOOPZ
label操作:(CX)-1→CX;
若(CX)≠0∧ZF=1,則轉(zhuǎn)至label處執(zhí)行;否則退出循環(huán),執(zhí)行LOOP后面的指令。(3)LOOPNZ(LOOPNE)格式:LOOPNZlabel操作:(CX)-1→CX;若(CX)≠0∧ZF=0,則轉(zhuǎn)至label處執(zhí)行;否則退出循環(huán),執(zhí)行LOOP后面的指令。例1:給1A000H開(kāi)始的256個(gè)內(nèi)存單元均減去1,若發(fā)現(xiàn)某個(gè)單元減為0則立即退出循環(huán),其后的單元不再減1。程序段如下:(邏輯地址為1A00:0H)
MOVAX,1A00HMOVDS,AX;1A00H段MOVDI,-1MOVCX,256GOON:INCDIDECBYTEPTR[DI]LOOPNZ
GOONHLT67例2:在8000H開(kāi)始的長(zhǎng)度為1000字節(jié)的字符串中查找’S’,若找到,把其偏移地址記錄在ADDR中,否則ADDR單元置為0FFFFH。
MOVDI,8000HMOVCX,1000MOVAL,’S’MOVADDR,0FFFFHGOON:SCASBLOOPNZ
GOONJNZDONEDECDIMOVADDR,DIDONE:HLT68過(guò)程(子程序)一段具有特定功能的,供其它程序調(diào)用的公用程序。特點(diǎn)調(diào)用子程序時(shí),IP(CS)的內(nèi)容被壓入堆棧棧頂。從子程序返回時(shí),棧頂?shù)膬?nèi)容又被彈出到IP(CS)。子程序執(zhí)行結(jié)束后一般均要返回調(diào)用程序。一次定義,多次調(diào)用;可帶參數(shù)調(diào)用,以完成不同的功能。優(yōu)點(diǎn)程序代碼短,結(jié)構(gòu)清晰,便于編程、調(diào)試、修改和閱讀。兩條相關(guān)指令:子程序調(diào)用指令CALL子程序返回指令RET693.過(guò)程調(diào)用和返回指令70(1)調(diào)用指令CALL一般格式:CALLsub
;sub為子程序的入口根據(jù)子程序入口的尋址方式,子程序調(diào)用有四類(lèi)。①段內(nèi)直接調(diào)用子程序的偏移地址直接由CALL指令給出。格式:CALLnear_proc
CALL執(zhí)行時(shí),它首先將IP內(nèi)容壓棧,然后把指令中給出的位移量加到IP上。
注:匯編以后的調(diào)用地址是相對(duì)于CALL的下一條指令的位移量。例:CALL0120H;子程序偏移地址由指令給出71②段內(nèi)間接調(diào)用子程序的偏移地址在寄存器或存儲(chǔ)器中。格式:CALLmem16/reg16CALL執(zhí)行時(shí),它首先將IP內(nèi)容壓棧,然后把指定的寄存器/存儲(chǔ)器的內(nèi)容送入IP。
例:CALL BX;子程序地址由BX給出CALL WORDPTR[SI];子程序地址在存儲(chǔ)器中72CALL
IPH
IPL代碼段數(shù)據(jù)段CALLWORDPTR[SI]指令的操作圖示:假定:(DS)
=
8000H,(SI)
=
1200H81200H81201H73③段間直接調(diào)用子程序的段地址和偏移地址直接由CALL指令給出。格式:CALLfar_proc;far_proc為遠(yuǎn)過(guò)程的地址指令的操作為:
CS內(nèi)容壓棧
IP內(nèi)容壓棧
CS←段地址
IP←偏移地址例:CALL2000H:1000HCALLTIMER;TIMER為遠(yuǎn)過(guò)程74④段間間接調(diào)用子程序的段和偏移地址為存儲(chǔ)器的連續(xù)4個(gè)單元中的內(nèi)容。格式:CALLmem32指令的操作為:
SP←(SP)-2((SP)+1,(SP))←(CS);CS壓棧CS←(mem32+2)
SP←(SP)-2((SP)+1,(SP))←(IP);IP壓棧IP←(mem32)例:CALLDWORD
PTR[DI]
調(diào)用地址在[DI],[DI]+1,[DI]+2,[DI]+3四個(gè)存儲(chǔ)單元中。低字內(nèi)容為偏移地址,高字內(nèi)容為段地址。75CALL代碼段數(shù)據(jù)段
IPHIPL
CSHCSL[DI][DI]+1[DI]+2[DI]+3段間間接調(diào)用示意圖CALLDWORD
PTR[DI]
例:下面的程序執(zhí)行后,(AX)=?(DX)=?
CS:2000HMOVAX,2012H2003HMOVCX,200CH2006HPUSHCX2007HCALL4000H200AHADDAX,BX200CHADDAX,DX200EHHLT…………CS:4000HMOVBX,200AHPOPDXRET7677(2)返回指令RET段內(nèi)返回指令RET的操作為:恢復(fù)子程序執(zhí)行前IP的內(nèi)容。段間返回指令RET的操作為:恢復(fù)子程序執(zhí)行前IP和CS的內(nèi)容。
另有一種帶立即數(shù)的返回指令“
RETn”,其中n為偶數(shù),表示從棧頂彈出地址后另外丟棄的字節(jié)數(shù)。例:RET4;返回后再丟棄棧頂?shù)?個(gè)字節(jié)8086/8088CPU在程序中允許安排一條中斷指令來(lái)引起一個(gè)中斷過(guò)程,這種中斷叫內(nèi)部中斷,或叫軟中斷。被中斷的指令地址處稱(chēng)為“斷點(diǎn)”。中斷指令共有三條:(1)INTn
執(zhí)行類(lèi)型n的中斷服務(wù)程序,N=0~255(2)INTO
執(zhí)行溢出中斷的中斷服務(wù)程序(3)IRET
從中斷服務(wù)程序返回調(diào)用程序784.中斷指令格式:
INTn說(shuō)明:
n×4
=向量地址。該向量地址中的內(nèi)容即為中斷服務(wù)程序入口地址(段:偏移),入口地址也稱(chēng)為“中斷向量”。
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國(guó)多功能汽車(chē)電噴嘴電腦檢測(cè)儀數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國(guó)五星水壺?cái)?shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 統(tǒng)編版三年級(jí)語(yǔ)文下冊(cè)期中達(dá)標(biāo)測(cè)試卷(含答案)
- 吉林省長(zhǎng)春市榆樹(shù)市2024-2025學(xué)年九年級(jí)上學(xué)期期末化學(xué)試題(含答案)
- 園林施工員試題及答案
- 2025年消防設(shè)施操作員之消防設(shè)備中級(jí)技能每日一練試卷A卷含答案
- 2025年消防設(shè)施操作員之消防設(shè)備基礎(chǔ)知識(shí)通關(guān)提分題庫(kù)(考點(diǎn)梳理)
- 2020年遼寧省沈陽(yáng)市中考地理試卷(含答案)
- 2025年天津市專(zhuān)業(yè)技術(shù)人員公需考試試題-全面推動(dòng)經(jīng)濟(jì)與民生領(lǐng)域改革推動(dòng)中國(guó)經(jīng)濟(jì)高質(zhì)量發(fā)展
- 高等教育自學(xué)考試《00074中央銀行概論》模擬試卷二
- 2025年湖南國(guó)防工業(yè)職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)完整版
- 2025年國(guó)電投核能限公司招聘高頻重點(diǎn)模擬試卷提升(共500題附帶答案詳解)
- 高中英語(yǔ)新課程標(biāo)準(zhǔn)解讀課件
- 初中數(shù)學(xué)知識(shí)競(jìng)賽-完整版PPT
- 福建省危險(xiǎn)化學(xué)品企業(yè)安全標(biāo)準(zhǔn)化(三級(jí))考核評(píng)分標(biāo)準(zhǔn)指導(dǎo)意見(jiàn)(試行)
- 柱間支撐計(jì)算書(shū)
- 南方醫(yī)科大學(xué)研究生培養(yǎng)點(diǎn)評(píng)價(jià)簡(jiǎn)況表
- 小學(xué)六年級(jí)體育教案(全冊(cè)48課時(shí))
- 運(yùn)籌學(xué)第3版熊偉編著習(xí)題答案
- 北碚區(qū)幼兒園
- 9宮格數(shù)獨(dú)題(word可打印)
評(píng)論
0/150
提交評(píng)論