微機原理課件_第1頁
微機原理課件_第2頁
微機原理課件_第3頁
微機原理課件_第4頁
微機原理課件_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第3章程序設(shè)計的基本技術(shù)3.1順序程序設(shè)計3.2分支程序設(shè)計3.3循環(huán)程序設(shè)計3.4串處理程序設(shè)計3.5子程序設(shè)計3.6宏功能程序設(shè)計3.2分支程序設(shè)計重點:掌握使用比較指令和其他有關(guān)指令產(chǎn)生相應(yīng)的標(biāo)志位,繼而通過條件轉(zhuǎn)移指令來形成分支程序的設(shè)計方法。教學(xué)目標(biāo):掌握分支程序的設(shè)計方法。難點:多路分支程序結(jié)構(gòu)的實現(xiàn)方法。3.2分支程序設(shè)計一、分支程序的結(jié)構(gòu)形式特點:根據(jù)不同的條件作不同的處理,在某一種確定的條件下,只能執(zhí)行多個分支中的一個分支。判定條件YN判定條件YN判定條件…3.2分支程序設(shè)計二、實現(xiàn)分支程序的指令轉(zhuǎn)移指令無條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令

(段內(nèi)短轉(zhuǎn)移)段內(nèi)轉(zhuǎn)移(只改變IP)段間轉(zhuǎn)移(改變CS和IP)簡單的條件轉(zhuǎn)移指令(14條)無符號數(shù)條件轉(zhuǎn)移指令(8條)符號數(shù)條件轉(zhuǎn)移指令(8條)區(qū)別:①轉(zhuǎn)移是否帶條件;②轉(zhuǎn)移范圍。3.2.1條件轉(zhuǎn)移指令1.簡單的條件轉(zhuǎn)移指令編程格式:使用比較指令和其他有關(guān)指令產(chǎn)生相應(yīng)的標(biāo)志位Jcond short-lable

;條件滿足,轉(zhuǎn)移到short-lable執(zhí)行。條件不滿足,順序執(zhí)行。CPAZSO×指令助記符轉(zhuǎn)移條件指令助記符轉(zhuǎn)移條件C=1JCC=0JNCP=1JP/JPEP=0JNP/JPOZ=1JZ/JEZ=0JNZ/JNES=1JSS=0JNSO=1JOO=0JNO例1.JZ/JNZ指令

testal,80h ;測試最高位

jznext0 ;D7=0(ZF=1),轉(zhuǎn)移

movah,0ffh ;D7=1,順序執(zhí)行

jmpdone ;無條件轉(zhuǎn)向next0:movah,0done: ... testal,80h ;測試最高位

jnznext1 ;D7=1(ZF=0),轉(zhuǎn)移

movah,0 ;D7=0,順序執(zhí)行

jmpdone ;無條件轉(zhuǎn)向next1: movah,0ffhdone: ...例2.JO/JNO指令;計算Z=X-Y;;X和Y為存放于X單元和Y單元的16位操作數(shù);若溢出,則轉(zhuǎn)移到overflow處理

mov

ax,X subax,Y

jooverflow ... ;無溢出,結(jié)果正確overflow: ... ;有溢出處理例3.JP/JNP指令;設(shè)字符的ASCII碼在AL寄存器中;將字符加上奇校驗位;當(dāng)字符的ASCII碼中“1”的個數(shù)為奇數(shù)時;則令其最高位為“0”;否則令最高位為“1” andal,7fh

;最高位置“0”,同時判斷“1”的個數(shù)

jnpnext

;1的個數(shù)已為奇數(shù),則轉(zhuǎn)向next oral,80h ;否則,最高位置“1”next: ...例4.JC/JNC指令;記錄BX中1的個數(shù)

xor

al,al

;AL=0,CF=0again:testbx,0ffffh ;等價于cmpbx,0

jenext

shlbx,1

jncagain incal

jmpagainnext: ... ;AL保存1的個數(shù)記錄BX中“1”的個數(shù)

xor

al,al

;AL=0,CF=0again:cmpbx,0

jznext

shlbx,1 ;也可使用shrbx,1

adcal,0

jmpagainnext: ... ;AL保存1的個數(shù)3.2.1條件轉(zhuǎn)移指令2.無符號數(shù)條件轉(zhuǎn)移指令8位二進制數(shù):11111111

與00000000比較如果看作無符號數(shù):(11111111)2=(255)10>0如果看作帶符號數(shù):(11111111)2=(-1)10<0指令助記符轉(zhuǎn)移條件<或≥JB/JNAE≤或≯JBE/JNA>或≤JA/JNBE≥或≮JAE/JNB編程格式:CMP dest,source ;dest-source JXX short-lable

;條件滿足,轉(zhuǎn)移到short-lable執(zhí)行。條件不滿足,順序執(zhí)行。J:Jump——轉(zhuǎn)移B:Below——小于(低于)A:Above——大于(高于)E:Equal——等于N:Not——不X<Y BX≤Y BEX>Y AX≥Y AEX=Y(jié) EX≠Y NE例5.比較無符號數(shù)結(jié)果:AX保存較大的無符號數(shù)

cmp

ax,bx

;比較ax和bx

jnbnext ;若ax≥bx,轉(zhuǎn)移

xchg

ax,bx

;若ax<bx,交換next: ...3.2.1條件轉(zhuǎn)移指令3.符號數(shù)條件轉(zhuǎn)移指令指令助記符轉(zhuǎn)移條件<或≥JL/JNGE≤或≯JLE/JNG>或≤JG/JNLE≥或≮JGE/JNL編程格式:CMP dest,source ;dest-source JXX short-lable

;條件滿足,轉(zhuǎn)移到short-lable執(zhí)行。條件不滿足,順序執(zhí)行。J:Jump——轉(zhuǎn)移L:Less——小于G:Greater——大于E:Equal——等于N:Not——不X<Y LX≤Y LEX>Y GX≥Y GEX=Y(jié) EX≠Y NE例6.比較有符號數(shù)結(jié)果:AX保存較大的有符號數(shù)

cmp

ax,bx

;比較ax和bx

jnlnext ;若ax≥bx,轉(zhuǎn)移

xchg

ax,bx

;若ax<bx,交換next: ...3.2.2無條件轉(zhuǎn)移指令分類指令格式功能直接轉(zhuǎn)移JMPtarget修改IP的值——段內(nèi)轉(zhuǎn)移修改IP和CS的值——段間轉(zhuǎn)移間接轉(zhuǎn)移JMPdest

功能:使CPU無條件地轉(zhuǎn)移到指令中指明的目的地址處執(zhí)行。用法:在分支程序中,無條件轉(zhuǎn)移指令常用來將各分支的出口重新匯集到一起。說明:target——為轉(zhuǎn)向的符號地址

dest——轉(zhuǎn)向地址是一個寄存器或一個存儲單元的內(nèi)容JMP FRAPTRSUB3轉(zhuǎn)移范圍:從一個段到另一個段…JMPSHORTSUB1…-128+127JMPNEARPTRSUB2-32768+32767JMP SHORT SUB1轉(zhuǎn)移范圍:-128~+127JMP NEARPTRSUB2轉(zhuǎn)移范圍:-32768~+32767無條件直接轉(zhuǎn)移舉例無條件間接轉(zhuǎn)移舉例設(shè)W為字變量,DUW為雙字變量。JMP WJMP DUWJMPWORDPTR[BX]BXIP……WDUWIPJMP BXIPCSBXIPJMPDWORDPTR[BX]BXIPCS習(xí)題3.11計算Z=X-Y

3.2.3分支程序設(shè)計舉例(1)1.單分支結(jié)構(gòu)的程序設(shè)計——常用一條條件轉(zhuǎn)移指令來實現(xiàn)

mov AX,X sub AX,Y

jns

nonneg;如果(X-Y≥0),轉(zhuǎn)nonneg

neg AX;如果條件不滿足,求補nonneg: mov Z,AXX→AX

AX-Y→AXAX≥0?對AX求補YNAX→Z3.2.3分支程序設(shè)計舉例(2)2.雙分支結(jié)構(gòu)的程序設(shè)計——

常用一條條件轉(zhuǎn)移指令和一條無條件轉(zhuǎn)移指令來實現(xiàn)例:試編寫完成下式功能的程序段。Y=1 X≥00 X<0前一個分支后要使用JMP指令 MOV AL,X CMP AL,0

JGE BIG MOV AL,0

JMP FINBIG: MOV AL,1FIN: MOV Y,ALYAL-0≥0?0→ALN1→ALX→ALJMPAL→Y3.2.3分支程序設(shè)計舉例(3)3.多分支結(jié)構(gòu)的程序設(shè)計——

方法一:用多條比較指令、條件轉(zhuǎn)移指令和無條件轉(zhuǎn)移指令共同實現(xiàn)。例3.9某工廠的產(chǎn)品共有八種加工處理程序P0~P7,而某產(chǎn)品應(yīng)根據(jù)不同情況,作不同的處理,其選擇由鍵入的值0~7來決定。若鍵入0~7以外的鍵,則退出該產(chǎn)品的加工處理程序。YAL=‘0’P0N鍵入字符的ASCII碼→ALYAL=‘1’P1NYAL=‘7’P7N…結(jié)束AGAIN:MOV AH,1 INT 21H CMP AL,‘0’ JE P0

YAL=‘0’P0N鍵入字符的ASCII碼→ALYAL=‘1’P1NYAL=‘7’P7N…結(jié)束 CMP AL,‘1’ JE P1 … CMP AL,‘7’ JE P7P0: … JMP AGAIN …P7: … JMP AGAINRET優(yōu)點:程序條理清楚,容易實現(xiàn)。缺點:各處理程序不能太長,且分支不能太多。多分支結(jié)構(gòu)的程序設(shè)計——方法二:跳轉(zhuǎn)表法P0地址低8位P0地址高8位P1地址低8位P1地址高8位P2地址低8位P2地址高8位…P7地址低8位P7地址高8位分支程序P0P0入口地址分支程序P1P1入口地址分支程序P2P2入口地址分支程序P7P7入口地址PTAB+0+2+4+0×2+14+1×2+2×2+7×2表地址=跳轉(zhuǎn)表偏移首地址+編號×23.2.3分支程序設(shè)計舉例(3)多分支結(jié)構(gòu)的程序設(shè)計——方法二:跳轉(zhuǎn)表法將多個分支處理程序的地址存放在一片連續(xù)的數(shù)據(jù)區(qū),稱為跳轉(zhuǎn)表。設(shè)計思想:①在程序的數(shù)據(jù)段中定義一張?zhí)D(zhuǎn)表,將各個分支程序段的入口地址放入表中。PTABDWP0,P1,P2,P3,P4,P5,P6,P7②根據(jù)不同的條件轉(zhuǎn)換成有序的編號。③計算轉(zhuǎn)向某個分支程序的入口地址的跳轉(zhuǎn)表地址。 表地址=跳轉(zhuǎn)表偏移首地址+編號×2;數(shù)據(jù)段PTABDWP0,P1,P2,P3,P4,P5,P6,P7;代碼段

MOV AH,1 INT 21H CMP AL,‘0’ JB EXIT CMPAL,‘7’ JA EXIT ANDAX,0FH ADD AL,AL MOVBX,AX JMPPTAB[BX]EXIT:RETYAL<‘0’N鍵入字符的ASCII碼→ALYAL>‘7’結(jié)束AX∧0FH→AXAL*2→ALAX→BX轉(zhuǎn)各分支程序N程序填空題將BUF1和BUF2單元中較小的數(shù)據(jù)送MIN單元。[BX]JLBUF1 DB xxxxHBUF2 DB xxxxHMIN DB xxxxH…BEGIN: MOV AX,BUF1 LEA BX,BUF2 CMP AX,

NEXT MOV NEXT: MOV MIN,AXAX,BUF2作業(yè)將數(shù)據(jù)區(qū)中以字節(jié)變量BUF為首址的100個單元清零。在數(shù)據(jù)段中定義100個單元。

DATA SEGMENT COUNT =100 BUF DBCOUNTDUP(?) DATA ENDSBX-100<0?BX+1→BXYNO→BUF[BX]0→BX結(jié)束作業(yè)3.12有一原碼形式的雙字符號數(shù),試編寫求其補碼的程序。①在數(shù)據(jù)段定義原碼形式的雙字符號數(shù)。

DATA SEGMENT W1 DD 8920B094H W2 DD ?

DATA ENDS②原碼形式的正數(shù),

溫馨提示

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

最新文檔

評論

0/150

提交評論