版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
教學(xué)提示在正確理解每條指令的功能基礎(chǔ)上,可以閱讀和編寫有實(shí)際意義的程序段多多閱讀程序段3.3位操作類指令位操作類指令以二進(jìn)制位為基本單位進(jìn)行數(shù)據(jù)的操作;這是一類常用的指令,都應(yīng)該特別掌握注意這些指令對(duì)標(biāo)志位的影響1、邏輯運(yùn)算指令A(yù)NDORXORNOTTEST2、移位指令SHLSHRSALSAR3、循環(huán)移位指令ROLRORRCLRCR邏輯與指令A(yù)ND對(duì)兩個(gè)操作數(shù)執(zhí)行邏輯與運(yùn)算,結(jié)果送到目的操作數(shù)AND指令設(shè)置CF=OF=0,根據(jù)結(jié)果設(shè)置SF、ZF和PF狀態(tài),而對(duì)AF未定義ANDreg,imm/reg/mem;reg←reg∧imm/reg/memANDmem,imm/reg;mem←mem∧imm/reg只有相“與”的兩位都是1,結(jié)果才是1;否則,“與”的結(jié)果為0AND邏輯或指令OR對(duì)兩個(gè)操作數(shù)執(zhí)行邏輯或運(yùn)算,結(jié)果送到目的操作數(shù)OR指令設(shè)置CF=OF=0,根據(jù)結(jié)果設(shè)置SF、ZF和PF狀態(tài),而對(duì)AF未定義ORreg,imm/reg/mem;reg←reg∨imm/reg/memORmem,imm/reg;mem←mem∨imm/reg只要相“或”的兩位有一位是1,結(jié)果就是1;否則,結(jié)果為0OR邏輯異或指令XOR對(duì)兩個(gè)操作數(shù)執(zhí)行邏輯異或運(yùn)算,結(jié)果送到目的操作數(shù)XOR指令設(shè)置CF=OF=0,根據(jù)結(jié)果設(shè)置SF、ZF和PF狀態(tài),而對(duì)AF未定義XORreg,imm/reg/mem;reg←reg⊕imm/reg/memXORmem,imm/reg;mem←mem⊕imm/reg只有相“異或”的兩位不相同,結(jié)果才是1;否則,結(jié)果為0XOR邏輯非指令NOT對(duì)一個(gè)操作數(shù)執(zhí)行邏輯非運(yùn)算NOT指令是一個(gè)單操作數(shù)指令NOT指令不影響標(biāo)志位NOTreg/mem;reg/mem←~reg/mem按位取反,原來(lái)是“0”的位變?yōu)椤?”;原來(lái)是“1”的位變?yōu)椤?”NOT例題:邏輯運(yùn)算moval,45h ;邏輯與al=01handal,31h ;CF=OF=0,SF=0、ZF=0、PF=0moval,45h ;邏輯或al=75horal,31h ;CF=OF=0,SF=0、ZF=0、PF=0moval,45h ;邏輯異或al=74hxoral,31h ;CF=OF=0,SF=0、ZF=0、PF=1moval,45h ;邏輯非al=0bahnotal ;標(biāo)志不變例題:邏輯指令應(yīng)用;AND指令可用于復(fù)位某些位(同0相與),不影響其他位.例:將BL中D3和D0位清0,其他位不變andbl,11110110B例:將AL中的字符‘8’轉(zhuǎn)換成對(duì)應(yīng)的數(shù)字8.moval,‘8’
andal,0fh;方法一subal,‘0’;方法二例題:邏輯指令應(yīng)用;OR指令可用于置位某些位(同1相或),不影響其他位。例:將BL中D3和D0位置1,其他位不變orbl,00001001B;XOR指令可用于求反某些位(同1相異或),不影響其他位。例:將BL中D3和D0位求反,其他不變xorbl,00001001B測(cè)試指令TEST對(duì)兩個(gè)操作數(shù)執(zhí)行邏輯與運(yùn)算,結(jié)果不回送到目的操作數(shù)AND指令設(shè)置CF=OF=0,根據(jù)結(jié)果設(shè)置SF、ZF和PF狀態(tài),而對(duì)AF未定義TESTreg,imm/reg/mem ;reg∧imm/reg/memTESTmem,imm/reg ;mem∧imm/reg只有相“與”的兩位都是1,結(jié)果才是1;否則,“與”的結(jié)果為0TEST例3.32:測(cè)試為0或1testal,01h
;測(cè)試AL的最低位D0jnzthere ;標(biāo)志ZF=0,即D0=1 ;則程序轉(zhuǎn)移到there... ;否則ZF=1,即D0=0,順序執(zhí)行there:...
TEST指令通常用于檢測(cè)一些條件是否滿足,但又不希望改變?cè)僮鲾?shù)的情況TEST思考:若要測(cè)試ax中的第8、10位是否同時(shí)位1,如何實(shí)現(xiàn)?第一步:將第8、10位翻轉(zhuǎn)xorax,0500h第二步:測(cè)試第8、10位是否同時(shí)為0testax,0500h若結(jié)果為0則說(shuō)明以上兩位同時(shí)為1移位指令(shift)將操作數(shù)移動(dòng)一位或多位,分成邏輯移位和算術(shù)移位,分別具有左移或右移操作SHLreg/mem,1/CL;邏輯左移,最高位進(jìn)入CF,最低位補(bǔ)0SHRreg/mem,1/CL;邏輯右移,最低位進(jìn)入CF,最高位補(bǔ)0SALreg/mem,1/CL;算術(shù)左移,最高位進(jìn)入CF,最低位補(bǔ)0SARreg/mem,1/CL;算術(shù)右移,最低位進(jìn)入CF,最高位不變SAL與SHL相同演示演示演示移位指令的操作數(shù)移位指令的第一個(gè)操作數(shù)是指定的被移位的操作數(shù),可以是寄存器或存儲(chǔ)單元后一個(gè)操作數(shù)表示移位位數(shù)(1)1,表示移動(dòng)一位;(2)CL,移位位數(shù)大于1,用CL寄存器值表示移位指令對(duì)標(biāo)志的影響按照移入的位設(shè)置進(jìn)位標(biāo)志CF根據(jù)移位后的結(jié)果影響SF、ZF、PF對(duì)AF沒有定義如果進(jìn)行一位移動(dòng),則按照操作數(shù)的最高符號(hào)位是否改變,相應(yīng)設(shè)置溢出標(biāo)志OF:如果移位前的操作數(shù)最高位與移位后操作數(shù)的最高位不同(有變化),則OF=1;否則OF=0。當(dāng)移位次數(shù)大于1時(shí),OF不確定例3.33:移位指令movcl,4moval,0f0h ;al=f0hshlal,1 ;al=e0h;CF=1,SF=1、ZF=0、PF=0,OF=0shral,1 ;al=70h;CF=0,SF=0、ZF=0、PF=0、OF=1saral,1 ;al=38h;CF=0,SF=0、ZF=0、PF=0、OF=0saral,cl ;al=03h;CF=1,SF=0、ZF=0、PF=1分析下面每次移位后,AH、CF中的值各是多少?MOVAH,11HSHLAH,1MOVCL,2SHLAH,CL思考:左移一位相當(dāng)于乘以幾?例3.34:移位實(shí)現(xiàn)乘movsi,axshlsi,1 ;si←2×axaddsi,ax ;si←3×axmovdx,bxmovcl,03hshldx,cl ;dx←8×bxsubdx,bx ;dx←7×bxadddx,si ;dx←7×bx+3×ax邏輯左移一位相當(dāng)于無(wú)符號(hào)數(shù)乘以2
邏輯右移一位相當(dāng)于無(wú)符號(hào)數(shù)除以2循環(huán)移位指令(rotate)將操作數(shù)從一端移出的位返回到另一端形成循環(huán),分成不帶進(jìn)位和帶進(jìn)位,分別具有左移或右移操作ROLreg/mem,1/CL;不帶進(jìn)位循環(huán)左移RORreg/mem,1/CL;不帶進(jìn)位循環(huán)右移RCLreg/mem,1/CL;帶進(jìn)位循環(huán)左移RCRreg/mem,1/CL;帶進(jìn)位循環(huán)右移演示演示演示演示循環(huán)移位指令對(duì)標(biāo)志的影響按照指令功能設(shè)置進(jìn)位標(biāo)志CF不影響SF、ZF、PF、AF如果進(jìn)行一位移動(dòng),則按照操作數(shù)的最高符號(hào)位是否改變,相應(yīng)設(shè)置溢出標(biāo)志OF:如果移位前的操作數(shù)最高位與移位后操作數(shù)的最高位不同(有變化),則OF=1;否則OF=0。當(dāng)移位次數(shù)大于1時(shí),OF不確定例3.35:32位數(shù)移位;將DX.AX中32位數(shù)值左移一位shlax,1rcldx,1DXAXCF0例3.36:位傳送;把AL最低位送BL最低位,保持AL不變r(jià)orbl,1roral,1rclbl,1rolal,1AL、BLCFBLCFALCFAL之D0例3.37:BCD碼合并;AH.AL分別存放著非壓縮BCD碼的兩位;將它們合并成為一個(gè)壓縮BCD碼存ALandax,0f0fh ;保證高4位為0movcl,4rolah,cl ;也可以用shlah,claddal,ah ;也可以用oral,ah3.4控制轉(zhuǎn)移類指令控制轉(zhuǎn)移類指令用于實(shí)現(xiàn)分支、循環(huán)、過(guò)程等程序結(jié)構(gòu),是僅次于傳送指令的最常用指令重點(diǎn)掌握:JMP、Jcc、LOOP常用系統(tǒng)功能調(diào)用int21h一般了解:LOOPZ、LOOPNZ、INTO、CALL、RET、INTn、IRET
控制轉(zhuǎn)移類指令通過(guò)改變IP(和CS)值,實(shí)現(xiàn)程序執(zhí)行順序的改變3.4.1無(wú)條件轉(zhuǎn)移指令JMP3.4.2條件轉(zhuǎn)移指令JCC3.4.3循環(huán)指令LOOPJCXZ3.4.4~5子程序指令、中斷指令(以后講)3.4.6系統(tǒng)功能調(diào)用INT21H3.4.1無(wú)條件轉(zhuǎn)移指令只要執(zhí)行無(wú)條件轉(zhuǎn)移指令JMP,就使程序轉(zhuǎn)到指定的目標(biāo)地址處,從目標(biāo)地址處開始執(zhí)行那里的指令操作數(shù)label是要轉(zhuǎn)移到的目標(biāo)地址(目的地址、轉(zhuǎn)移地址)JMP指令分成4種類型:⑴段內(nèi)轉(zhuǎn)移、直接尋址(重點(diǎn)掌握)⑵段內(nèi)轉(zhuǎn)移、間接尋址⑶段間轉(zhuǎn)移、直接尋址⑷段間轉(zhuǎn)移、間接尋址JMPlabel ;程序轉(zhuǎn)向label標(biāo)號(hào)指定的地址JMP第2章目標(biāo)地址的尋址方式直接尋址方式轉(zhuǎn)移地址象立即數(shù)一樣,直接在指令的機(jī)器代碼中,就是直接尋址方式間接尋址方式轉(zhuǎn)移地址在寄存器或主存單元中,就是通過(guò)寄存器或存儲(chǔ)器的間接尋址方式第2章用標(biāo)號(hào)表達(dá)用寄存器或存儲(chǔ)器操作數(shù)表達(dá)JMP目標(biāo)地址的范圍:段內(nèi)段內(nèi)轉(zhuǎn)移——近轉(zhuǎn)移(near)在當(dāng)前代碼段64KB范圍內(nèi)轉(zhuǎn)移(±32KB范圍)不需要更改CS段地址,只要改變IP偏移地址段內(nèi)轉(zhuǎn)移——短轉(zhuǎn)移(short)轉(zhuǎn)移范圍可以用一個(gè)字節(jié)表達(dá),在段內(nèi)-128~+127范圍的轉(zhuǎn)移代碼段代碼段第2章JMP目標(biāo)地址的范圍:段間段間轉(zhuǎn)移——遠(yuǎn)轉(zhuǎn)移(far)從當(dāng)前代碼段跳轉(zhuǎn)到另一個(gè)代碼段,可以在1MB范圍需要更改CS段地址和IP偏移地址目標(biāo)地址必須用一個(gè)32位數(shù)表達(dá),叫做32位遠(yuǎn)指針,它就是邏輯地址第2章代碼段代碼段
實(shí)際編程時(shí),匯編程序會(huì)根據(jù)目標(biāo)地址的距離,自動(dòng)處理成短轉(zhuǎn)移、近轉(zhuǎn)移或遠(yuǎn)轉(zhuǎn)移程序員可用操作符short、nearptr
或farptr
強(qiáng)制JMPJMP段內(nèi)轉(zhuǎn)移、直接尋址JMPlabel ;IP←IP+位移量位移量是緊接著JMP指令后的那條指令的偏移地址,到目標(biāo)指令的偏移地址的地址位移當(dāng)向地址增大方向轉(zhuǎn)移時(shí),位移量為正;向地址減小方向轉(zhuǎn)移時(shí),位移量為負(fù) jmpagain
;轉(zhuǎn)移到again處繼續(xù)執(zhí)行
……again:
deccx
;標(biāo)號(hào)again的指令
…… jmpoutput
;轉(zhuǎn)向output
……output:
movresult,al
;標(biāo)號(hào)output的指令第2章實(shí)際為相對(duì)尋址段內(nèi)轉(zhuǎn)移、間接尋址JMPr16/m16 ;IP←r16/m16將一個(gè)16位寄存器或主存字單元內(nèi)容送入IP寄存器,作為新的指令指針,但不修改CS寄存器的內(nèi)容jmpax ;IP←AXjmpwordptr[2000h] ;IP←[2000h]
第2章JMPJMP段間轉(zhuǎn)移、直接尋址JMPfarptrlabel ;IP←label的偏移地址 ;CS←label的段地址將標(biāo)號(hào)所在段的段地址作為新的CS值,標(biāo)號(hào)在該段內(nèi)的偏移地址作為新的IP值;這樣,程序跳轉(zhuǎn)到新的代碼段執(zhí)行jmpfarptrotherseg ;遠(yuǎn)轉(zhuǎn)移到代碼段2的otherseg第2章JMP段間轉(zhuǎn)移、間接尋址JMPfarptrmem ;IP←[mem],CS←[mem+2]用一個(gè)雙字存儲(chǔ)單元表示要跳轉(zhuǎn)的目標(biāo)地址。這個(gè)目標(biāo)地址存放在主存中連續(xù)的兩個(gè)字單元中的,低位字送IP寄存器,高位字送CS寄存器movwordptr[bx],0movwordptr[bx+2],1500hJMPfarptr[bx];轉(zhuǎn)移到1500h:0第2章JMP3.4.2條件轉(zhuǎn)移指令指定的條件cc如果成立,程序轉(zhuǎn)移到由標(biāo)號(hào)label指定的目標(biāo)地址去執(zhí)行指令;條件不成立,則程序?qū)㈨樞驁?zhí)行下一條指令操作數(shù)label是采用短轉(zhuǎn)移,稱為相對(duì)尋址方式JccJcclabel;條件滿足,發(fā)生轉(zhuǎn)移:IP←IP+8位位移量;條件不滿足,順序執(zhí)行第2章相對(duì)尋址方式Jcc指令的操作數(shù)label是一個(gè)標(biāo)號(hào)一個(gè)8位位移量,表示Jcc指令后的那條指令的偏移地址,到目標(biāo)指令的偏移地址的地址位移8位位移量是相對(duì)于當(dāng)前IP的,且距當(dāng)前IP地址-128~+127個(gè)單元的范圍之內(nèi),屬于段內(nèi)短距離轉(zhuǎn)移Jcc目標(biāo)地址就采用這種相對(duì)尋址方式Jcc指令為2個(gè)字節(jié),條件不滿足時(shí)的順序執(zhí)行就是當(dāng)前指令偏移指針I(yè)P加2JccJcc指令的分類Jcc指令不影響標(biāo)志,但要利用標(biāo)志(表3.2)。根據(jù)利用的標(biāo)志位不同,16條指令分成3種情況:判斷單個(gè)標(biāo)志位狀態(tài)(重點(diǎn)掌握一個(gè),其它類似)3.
比較無(wú)符號(hào)數(shù)高低3.比較有符號(hào)數(shù)大小Jcc條件轉(zhuǎn)移指令中的條件ccJcc實(shí)際雖然指令只有16條,但卻有30個(gè)助記符采用多個(gè)助記符,只是為了方便記憶和使用1.判斷單個(gè)標(biāo)志位狀態(tài)這組指令單獨(dú)判斷5個(gè)狀態(tài)標(biāo)志之一⑴JZ/JE和JNZ/JNE:利用零標(biāo)志ZF,判斷結(jié)果是否為零(或相等)⑵JS和JNS:利用符號(hào)標(biāo)志SF,判斷結(jié)果是正是負(fù)⑶JO和JNO:利用溢出標(biāo)志OF,判斷結(jié)果是否產(chǎn)生溢出⑷JP/JPE和JNP/JPO:利用奇偶標(biāo)志PF,判斷結(jié)果中“1”的個(gè)數(shù)是偶是奇⑸JC/JB/JNAE和JNC/JNB/JAE:利用進(jìn)位標(biāo)志CF,判斷結(jié)果是否進(jìn)位或借位Jcc例題3.38例題3.39例題3.40例題3.41例題3.42例3.38:JZ/JNZ指令 testal,80h ;測(cè)試最高位
jznext0 ;D7=0(ZF=1),轉(zhuǎn)移 movah,0ffh ;D7=1,順序執(zhí)行
jmpdone ;無(wú)條件轉(zhuǎn)向next0: movah,0done: ... testal,80h ;測(cè)試最高位
jnznext1 ;D7=1(ZF=0),轉(zhuǎn)移 movah,0 ;D7=0,順序執(zhí)行
jmpdone ;無(wú)條件轉(zhuǎn)向next1: movah,0ffhdone: ...例3.39:JS/JNS指令;計(jì)算|X-Y|(絕對(duì)值);X和Y為存放于X單元和Y單元的16位操作數(shù);結(jié)果存入result movax,X subax,Y
jnsnonneg negax ;neg是求補(bǔ)指令nonneg: movresult,ax源程序見:EX2_39.ASM并分析分支結(jié)構(gòu)例3.40:JO/JNO指令;計(jì)算X-Y;;X和Y為存放于X單元和Y單元的16位操作數(shù);若溢出,則轉(zhuǎn)移到overflow處理 movax,X subax,Y
jooverflow ... ;無(wú)溢出,結(jié)果正確overflow: ... ;有溢出處理例3.41:JP/JNP指令;設(shè)字符的ASCII碼在AL寄存器中;將字符加上奇校驗(yàn)位;在字符ASCII碼中為“1”的個(gè)數(shù)已為奇數(shù)時(shí);則令其最高位為“0”;否則令最高位為“1” andal,7fh ;最高位置“0”,同時(shí)判斷“1”的個(gè)數(shù)
jnpnext ;個(gè)數(shù)已為奇數(shù),則轉(zhuǎn)向next oral,80h ;否則,最高位置“1”next: ...例3.42:JC/JNC指令;記錄BX中1的個(gè)數(shù)源程序見ex2_43.asm
xoral,al ;AL=0,CF=0again: testbx,0ffffh;等價(jià)于cmpbx,0
jenext shlbx,1
jncagain incal jmpagainnext: ... ;AL保存1的個(gè)數(shù)另一種做法記錄BX中“1”的個(gè)數(shù)
xoral,al ;AL=0,CF=0again: cmpbx,0
jznext shlbx,1 ;也可使用shrbx,1 adcal,0 jmpagainnext: ... ;AL保存1的個(gè)數(shù)在debug中改變bx的值,再運(yùn)行,分析結(jié)果比較無(wú)符號(hào)數(shù)高低無(wú)符號(hào)數(shù)的大小用高(Above)低(Below)表示利用CF確定高低、利用ZF標(biāo)志確定相等(Equal)兩數(shù)的高低分成4種關(guān)系:⑴低于(不高于等于):JB(JNAE)⑵不低于(高于等于):JNB(JAE)⑶低于等于(不高于):JBE(JNA)⑷不低于等于(高于):JNBE(JA)Jcc(重點(diǎn)掌握)例3.43a:比較無(wú)符號(hào)數(shù) cmpax,bx ;比較ax和bx
jnbnext ;若ax≥bx,轉(zhuǎn)移 xchgax,bx ;若ax<bx,交換next: ...結(jié)果:AX保存較大的無(wú)符號(hào)數(shù)比較有符號(hào)數(shù)大小有符號(hào)數(shù)的大(Greater)小(Less)需要組合OF、SF標(biāo)志,并利用ZF標(biāo)志確定相等(Equal)兩數(shù)的大小分成4種關(guān)系:⑴小于(不大于等于):JL(JNGE)⑵不小于(大于等于):JNL(JGE)⑶小于等于(不大于):JLE(JNG)⑷不小于等于(大于):JNLE(JG)Jcc(重點(diǎn)掌握)例3.43b:比較有符號(hào)數(shù) cmpax,bx ;比較ax和bx
jnlnext ;若ax≥bx,轉(zhuǎn)移 xchgax,bx ;若ax<bx,交換next: ...結(jié)果:AX保存較大的有符號(hào)數(shù)條件轉(zhuǎn)移指令應(yīng)用——
分支結(jié)構(gòu)例:當(dāng)dx的高4位全為0時(shí),使ax=0;否則使ax=-1。(習(xí)題3.26(3))分析、畫流程圖、編程分析:dx于0f000h與,根據(jù)結(jié)果判斷源程序見:xi2_26_3.asmtip:jmp指令的應(yīng)用分支結(jié)構(gòu)應(yīng)用:比如,判斷一個(gè)字符是否為小寫字母、是否為0~9的數(shù)字.3.363.37…….code.startupmovdx,200fhtestdx,0f000hjzzeromovax,-1
jmpend1zero:movax,0
end1:.exit03.4.3循環(huán)指令(loop)循環(huán)指令默認(rèn)利用CX計(jì)數(shù)器,方便實(shí)現(xiàn)計(jì)數(shù)循環(huán)的程序結(jié)構(gòu)label操作數(shù)采用相對(duì)尋址方式LOOPlabel ;CX←CX-1,;CX≠0,循環(huán)到標(biāo)號(hào)labelLOOPZlabel ;CX←CX-1,;CX≠0且ZF=1,循環(huán)到標(biāo)號(hào)labelLOOPNZlabel ;CX←CX-1,;CX≠0且ZF=0,循環(huán)到標(biāo)號(hào)labelJCXZlabel ;CX=0,轉(zhuǎn)移到標(biāo)號(hào)label(重點(diǎn)掌握)例3.44:記錄空格個(gè)數(shù);設(shè)待處理字符串存放在以string開始的存儲(chǔ)區(qū),長(zhǎng)度為count.
movcx,count ;設(shè)置循環(huán)次數(shù),count為字符串長(zhǎng)度 movsi,offsetstring;用lea如何? xorbx,bx ;bx=0,記錄空格數(shù)
jcxzdone;如果長(zhǎng)度為0,退出 moval,20h ;空格字符的ascii碼20hagain: cmpal,es:[si] jnznext ;ZF=0非空格,轉(zhuǎn)移 incbx ;ZF=1是空格,個(gè)數(shù)加1next: incsi
loopagain
;字符個(gè)數(shù)減1,不為0繼續(xù)循環(huán)done:movresult,bxdeccxjnzagaincmpcx,0jzdone源程序見:ex2_44.asm循環(huán)結(jié)構(gòu)習(xí)題3.26(6)(7)(8)3.4.4子程序指令子程序是完成特定功能的一段程序當(dāng)主程序(調(diào)用程序)需要執(zhí)行這個(gè)功能時(shí),采用CALL調(diào)用指令轉(zhuǎn)移到該子程序的起始處執(zhí)行當(dāng)運(yùn)行完子程序功能后,采用RET返回指令回到主程序繼續(xù)執(zhí)行演示(先了解,以后細(xì)講)主程序與子程序CALLlabel主程序RET子程序回到CALL指令后的指令處——返回地址子程序調(diào)用指令CALL指令分成4種類型(類似JMP)CALLlabel ;段內(nèi)調(diào)用、直接尋址CALLr16/m16 ;段內(nèi)調(diào)用、間接尋址CALLfarptrlabel ;段間調(diào)用、直接尋址CALLfarptrmem ;段間調(diào)用、間接尋址CALL指令需要保存返回地址:段內(nèi)調(diào)用——入棧偏移地址IPSP←SP-2,SS:[SP]←IP段間調(diào)用——入棧偏移地址IP和段地址CSSP←SP-2,SS:[SP]←IPSP←SP-2,SS:[SP]←CS第2章CALL子程序返回指令根據(jù)段內(nèi)和段間、有無(wú)參數(shù),分成4種類型RET ;無(wú)參數(shù)段內(nèi)返回RETi16 ;有參數(shù)段內(nèi)返回RET ;無(wú)參數(shù)段間返回RETi16 ;有參數(shù)段間返回需要彈出CALL指令壓入堆棧的返回地址段內(nèi)返回——出棧偏移地址IPIP←SS:[SP],SP←SP+2段間返回——出棧偏移地址IP和段地址CSIP←SS:[SP],SP←SP+2CS←SS:[SP],SP←SP+2i16參數(shù)的作用RET第2章返回指令RET的參數(shù) RETi16
;有參數(shù)返回RET指令可以帶有一個(gè)立即數(shù)i16,則堆棧指針SP將增加,即SP←SP+i16這個(gè)特點(diǎn)使得程序可以方便地廢除若干執(zhí)行CALL指令以前入棧的參數(shù)例3.45:子程序;主程序
moval,0fh ;提供參數(shù)AL
callhtoasc ;調(diào)用子程序 ...;子程序:將AL低4位的一位16進(jìn)制數(shù)轉(zhuǎn)換成ASCII碼htoasc: andal,0fh ;只取al的低4位 oral,30h ;al高4位變成3 cmpal,39h ;是0~9,還是0Ah~0Fh jbehtoend addal,7 ;是0Ah~0Fh,加上7htoend: ret
;子程序返回轉(zhuǎn)換原理3.4.5中斷指令中斷(Interrupt)是又一種改變程序執(zhí)行順序的方法中斷具有多種中斷類型中斷的指令有3條:INTi8IRETINTO本節(jié)主要掌握類似子程序調(diào)用指令的中斷調(diào)用指令I(lǐng)NTi8,進(jìn)而學(xué)習(xí)使用DOS功能調(diào)用(先了解,以后細(xì)講)中斷的過(guò)程主程序IRET中斷服務(wù)程序斷點(diǎn)中斷請(qǐng)求中斷請(qǐng)求可以來(lái)自處理器外部的中斷源,也可以由處理器執(zhí)行指令引起:例如執(zhí)行INTi8指令。8086的外部中斷8086可以管理256個(gè)中斷各種中斷用一個(gè)向量編號(hào)來(lái)區(qū)別主要分成外部中斷和內(nèi)部中斷外部中斷——來(lái)自CPU之外的原因引起的中斷,又可以分成可屏蔽中斷:可由CPU的中斷允許標(biāo)志IF控制非屏蔽中斷:不受CPU的中斷允許標(biāo)志IF控制8086的內(nèi)部中斷內(nèi)部中斷——CPU內(nèi)部執(zhí)行程序引起的中斷,又可以分成:除法錯(cuò)中斷:執(zhí)行除法指令,結(jié)果溢出產(chǎn)生的0號(hào)中斷指令中斷:執(zhí)行中斷調(diào)用指令I(lǐng)NTi8產(chǎn)生的i8號(hào)中斷斷點(diǎn)中斷:用于斷點(diǎn)調(diào)試(INT3)的3號(hào)中斷溢出中斷:執(zhí)行溢出中斷指令,OF=1產(chǎn)生的4號(hào)中斷單步中斷:TF=1在每條指令執(zhí)行后產(chǎn)生的1號(hào)中斷中斷指令I(lǐng)NTINTi8;中斷調(diào)用指令:產(chǎn)生i8號(hào)中斷IRET;中斷返回指令:實(shí)現(xiàn)中斷返回INTO;溢出中斷指令:;若溢出標(biāo)志OF=1,產(chǎn)生4號(hào)中斷;否則順序執(zhí)行3.4.6系統(tǒng)功能調(diào)用21H號(hào)中斷是DOS提供給用戶的用于調(diào)用系統(tǒng)功能的中斷,它有近百個(gè)功能供用戶選擇使用,主要包括設(shè)備管理、目錄管理和文件管理三個(gè)方面的功能ROM-BIOS也以中斷服務(wù)程序的形式,向程序員提供系統(tǒng)的基本輸入輸出程序匯編語(yǔ)言程序設(shè)計(jì)需要采用系統(tǒng)的各種功能程序充分利用操作系統(tǒng)提供的資源是程序設(shè)計(jì)的一個(gè)重要方面,需要掌握(重點(diǎn)掌握)功能調(diào)用的步驟通常按照如下4個(gè)步驟進(jìn)行:⑴在AH寄存器中設(shè)置系統(tǒng)功能調(diào)用號(hào)⑵在指定寄存器中設(shè)置入口參數(shù)⑶執(zhí)行指令I(lǐng)NT21H(或ROM-BIOS的中斷向量號(hào))實(shí)現(xiàn)中斷服務(wù)程序的功能調(diào)用⑷根據(jù)出口參數(shù)分析功能調(diào)用執(zhí)行情況輸入輸出類功能調(diào)用向顯示器輸出字符⒈字符的輸出⒉字符串的輸出從鍵盤輸入數(shù)據(jù)⒊字符的輸入⒋字符串的輸入⒌ROMBIOS中斷調(diào)用裸機(jī)ROM-BIOSDOS功能調(diào)用匯編語(yǔ)言程序第2章字符輸出的功能調(diào)用DOS功能調(diào)用INT21H功能號(hào):AH=02H入口參數(shù):DL=字符的ASCII碼功能:在顯示器當(dāng)前光標(biāo)位置顯示給定的字符,光標(biāo)右移一個(gè)字符位置。如按Ctrl-Break或Ctrl-C則退出例3.46:顯示問(wèn)號(hào);在當(dāng)前顯示器光標(biāo)位置顯示一個(gè)問(wèn)號(hào)movah,02h ;設(shè)置功能號(hào):ah←02hmovdl,'?' ;提供入口參數(shù):dl←'?'int21h
;DOS功能調(diào)用:顯示字符串輸出的功能調(diào)用DOS功能調(diào)用INT21H功能號(hào):AH=09H入口參數(shù):DS:DX=欲顯示字符串在主存中的首地址字符串應(yīng)以$(24H)結(jié)束功能:在顯示器輸出指定的字符串可以輸出回車(0DH)和換行(0AH)字符產(chǎn)生回車和換行的作用例3.47:顯示字符串stringdb'Hello,Everybody!',0dh,0ah,'$';在數(shù)據(jù)段定義要顯示的字符串 ... movah,09h
;設(shè)置功能號(hào):ah←09h movdx,offsetstring
;提供入口參數(shù):dx←字符串的偏移地址
int21h ;DOS功能調(diào)用:顯示字符輸入的功能調(diào)用DOS功能調(diào)用INT21H功能號(hào):AH=01H出口參數(shù):AL=字符的ASCII碼功能:獲得按鍵的ASCII代碼值調(diào)用此功能時(shí),若無(wú)鍵按下,則會(huì)一直等待,直到按鍵后才讀取該鍵值例3.48:判斷按鍵getkey: movah,01h ;功能號(hào):ah←01h
int21h
;功能調(diào)用 cmpal,’Y’ ;處理出口參數(shù)al jeyeskey ;是“Y” cmpal,’N’ jenokey ;是“N” jmpgetkey;重新輸入 ...yeskey: ...nokey: ...舉例調(diào)試:輸入一個(gè)字符,接著換行輸出字符串輸入的功能調(diào)用DOS功能調(diào)用INT21H功能號(hào):AH=0AH入口參數(shù):DS:DX=緩沖區(qū)首地址執(zhí)行該功能調(diào)用時(shí),用戶按鍵,最后用回車確認(rèn)本
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年學(xué)校衛(wèi)生健康教育工作計(jì)劃例文(三篇)
- 2024年城市租房合同范例(四篇)
- 2024年工作人員手衛(wèi)生管理制度模版(三篇)
- 2024年工業(yè)土地租賃合同常用版(三篇)
- 2024年固定期限勞動(dòng)合同標(biāo)準(zhǔn)范文(二篇)
- 2024年物業(yè)管理服務(wù)項(xiàng)目資金申請(qǐng)報(bào)告代可行性研究報(bào)告
- 2024年媒介專員工作的主要職責(zé)范文(三篇)
- 2024年醫(yī)院被服管理制度范文(三篇)
- 2024年工業(yè)品買賣合同范文(二篇)
- 2024年崗位勞動(dòng)合同參考范本(三篇)
- 全國(guó)常規(guī)免疫接種率監(jiān)測(cè)方案
- 地源熱泵機(jī)房調(diào)試方案 (1)
- 附表 電力服務(wù)(涉電維護(hù)、檢測(cè)等)收費(fèi)項(xiàng)目及標(biāo)準(zhǔn)
- 《礦山機(jī)械設(shè)備》復(fù)習(xí)題
- 焊接工藝設(shè)計(jì)方案
- 二手車舊機(jī)動(dòng)車評(píng)估圖文實(shí)例及交易注意事項(xiàng)珍貴教材PPT課件
- 公司“師帶徒”實(shí)施方案
- 管02酸洗、鈍化記錄
- 《內(nèi)科護(hù)理學(xué)》病例分析(完整版)
- 低壓有源濾波柜訂貨技術(shù)文件
- 全國(guó)中學(xué)生物理競(jìng)賽純電阻電路的簡(jiǎn)化和等效變換
評(píng)論
0/150
提交評(píng)論