![第3章 常用偽指令與匯編語言程序設(shè)計(2)-順序程序與分支程序_第1頁](http://file4.renrendoc.com/view/49a2ef9c255434584dad3d1ebfc09615/49a2ef9c255434584dad3d1ebfc096151.gif)
![第3章 常用偽指令與匯編語言程序設(shè)計(2)-順序程序與分支程序_第2頁](http://file4.renrendoc.com/view/49a2ef9c255434584dad3d1ebfc09615/49a2ef9c255434584dad3d1ebfc096152.gif)
![第3章 常用偽指令與匯編語言程序設(shè)計(2)-順序程序與分支程序_第3頁](http://file4.renrendoc.com/view/49a2ef9c255434584dad3d1ebfc09615/49a2ef9c255434584dad3d1ebfc096153.gif)
![第3章 常用偽指令與匯編語言程序設(shè)計(2)-順序程序與分支程序_第4頁](http://file4.renrendoc.com/view/49a2ef9c255434584dad3d1ebfc09615/49a2ef9c255434584dad3d1ebfc096154.gif)
![第3章 常用偽指令與匯編語言程序設(shè)計(2)-順序程序與分支程序_第5頁](http://file4.renrendoc.com/view/49a2ef9c255434584dad3d1ebfc09615/49a2ef9c255434584dad3d1ebfc096155.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
3.3.程序的基本結(jié)構(gòu)最基本的程序結(jié)構(gòu):順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)。AB順序結(jié)構(gòu)分支結(jié)構(gòu)判斷ABNYABC1ABC2ABC3子程序、中斷服務(wù)程序是一種特殊的程序,它們也是由以上三種基本結(jié)構(gòu)構(gòu)成的。i=初值A(chǔ)修改并判斷iYN循環(huán)結(jié)構(gòu)BGLUT_C2013-08J.CB13.3.1簡單程序設(shè)計例:編寫程序?qū)⒆肿兞縒中的無符號數(shù)W=65525除以8,將商保存在字變量QOUT中,將余數(shù)保存在字節(jié)變量REMA中。算法分析:可以使用除法指令,也可以使用右移三位實現(xiàn)除以8的運算。65525→0FFF5H11111111
11110101B(1)右移3位,移出的三位就是余數(shù),剩余的就是商。余數(shù)的保留:可以選擇兩種方法GLUT_C2013-08J.CB211111111
11110101CREMA→→0111111111111010C10000000→→0011111111111101C01000000→→000111111111110C10100000→→10100000右移5位00000101GLUT_C2013-08J.CB3開始定義W、QOUT、REMAAX←W,BL←0AX右移1位,最低位移進CBL右移1位,C移入它的最高位AX右移1位,最低位亦如CBL右移1位,C移入最高位AX右移1位,最低位亦如CBL右移1位,C移入最高位QOUT←AXBL右移5位,REMA←BL結(jié)束使用偽指令定義W、QOUT、REMA三個內(nèi)存單元,W、QOUT為16位,REMA為8位。這里的結(jié)束是結(jié)束應(yīng)用程序,返回操作系統(tǒng)??梢允褂肐NT21H的4CH號功能調(diào)用返回操作系統(tǒng)
MOV AH,4CHINT 21HGLUT_C2013-08J.CB4DATASEGMENTDATAW DW 65525QOUT DW ?REMA DB ?DATAENDSCODE SEGMENTCODEASSUMECS:CODE,DS:DATASTART:MOV AX,DATA ;取數(shù)據(jù)段開始地址
MOV DS,AX ;數(shù)據(jù)段開始地址送數(shù)據(jù)段基址寄存器
MOV AX,W ;從存儲器取出DS:WAX MOV BL,0 ;余數(shù)寄存器清0 SHR AX,1 ;無符號數(shù),邏輯右移1位,高位移入0, ;W最低位進入C RCR BL,1 ;帶進位循環(huán)右移1位,C進入BL最高位
SHR AX,1 ;邏輯右移1位,高位補0,W次低位進入C RCR BL,1 ;帶進位循環(huán)右移1位
SHR AX,1 ;邏輯右移1位,高位補0,W次低位進入C RCR BL,1 ;帶進位循環(huán)右移1位,余數(shù)在BL高3位
MOV CL,5數(shù)據(jù)段結(jié)束代碼段開始數(shù)據(jù)段開始GLUT_C2013-08J.CB5
SHR BL,CL ;余數(shù)右移5位,將其移到BL低3位
MOV QOUT,AX ;保存商
MOV REMA,BL ;保存余數(shù)
MOV AH,4CH INT 21HCODEENDS END本程序是返回操作系統(tǒng)代碼段結(jié)束匯編源程序結(jié)束GLUT_C2013-08J.CB6還有就是:W直接取低3位作為余數(shù)然后W右移3位得到商開始定義W、QOUT、REMAAX←W,REMA←7REMA←REMAANDALAX右移3位QOUT←AX開始AX右移3位:MOVCL,3SHRAX,CL注意:如果是帶符號數(shù),就要用算術(shù)右移SAR,不要用邏輯右移SHRGLUT_C2013-08J.CB7
…… MOV AX,W ;從變量W取數(shù)據(jù)
MOVREMA,7 ;余數(shù)變量REMAP賦值00000111B AND REMA,AL ;余數(shù)是AL的最低3位,
MOVCL,3 ; SHR AX,CL ;邏輯右移3位,AX中得到商
MOV QOUT,AX ;保存商
MOV AH,4CH INT 21H該程序結(jié)果相同,但程序代碼簡單了,執(zhí)行速度也快了GLUT_C2013-08J.CB8(2)使用除法指令
DIVsrc注意:對于8086處理器為了商是字?jǐn)?shù)據(jù),被除數(shù)32位:DXAX(DX=0,AX=W)除數(shù)16位BX=8DIVBX商在AX,余數(shù)在DX,對于本次運算,余數(shù)為字節(jié)數(shù)據(jù),實際上只有DL有效.DATAW DW65525QOUTDW?REMADB?.CODE MOV AX,DATA MOV DS,AX MOV DX,0 MOV AX,W MOV BX,8 DIV BX MOV QOUT,AX MOV REMA,DL MOV AH,4CH INT 21H END如果是帶符號數(shù),應(yīng)該使用符號擴展指令CWD和帶符號除法指令I(lǐng)DIV由于題目指定是無符號數(shù),這里可以將高16位擴展為0,用DIV除法指令GLUT_C2013-08J.CB9例將AX中的3位BCD數(shù)轉(zhuǎn)換為二進制數(shù)存入字節(jié)變量SB中(AX中的數(shù)大于0,小于255)每位十進制用一個8421編碼(自然二進制編碼)表示(即每一位十進制數(shù)都是用二進制表示)十進制數(shù)的展開表達式3位BCD碼N2N1N00ALAHGLUT_C2013-08J.CB10主要部分程序流程圖AL=AL+AHAL=AL*CHAHBLAL=百位*10既執(zhí)行AL=AL*CHAL=BLand0FHAL=AL+BL因百位*10不會大于255,AH=0,可以使用AH右移4位,高位補0得到十位數(shù)ALSB保留個位十位到BL取百位到ALALAHCH10,CL=4AH=BLAH右移4位得到十位由于題目給出不大于255,因此最后一次乘10加個位也只是一個字節(jié)相加GLUT_C2013-08J.CB11
M0VCH,10 MOVCL,4 MOVBL,AL ;暫存十位和個位到BL, MOVAL,AH ;百位存入AL中
MULCH ;百位×10→AX MOVAH,BL SHRAH,CL ;取十位
ADDAL,AH ;百位×10+十位→AL MULCH ;(百位×10+十位)×10→AX ANDBL,0FH ;取個位
ADDAL,BL ;(百位×10+十位)×10+個位→AL
;約定結(jié)果不大于255 MOV[SB],AL;AL→SB,如果沒有明確結(jié)果不大于255,則需要考慮16位結(jié)果GLUT_C2013-08J.CB120~999的BCD數(shù)轉(zhuǎn)換為二進制,主要部分程序流程圖AL取百位AX百位*10AH取十位百位*10+十位AL=AL+AHAX=AL*10BX=BXand0FHAX=AX+BX因百位*10不會大于255,AH=0,可以使用AH右移4位,高位補0得到十位數(shù)AXSBSB應(yīng)該是字操作數(shù)(16位)加個位,BH要清0AX為000~999之間的BCD數(shù)(百位*10+十位)*10GLUT_C2013-08J.CB13
M0VCH,10 MOVCL,4 MOVBL,AL;暫存十位和個位到BL, MOVAL,AH;百位存入AL中
MULCH;百位×10→AX MOVAH,BL SHRAH,CL;取十位
ADDAL,AH;百位×10+十位→AL MULCH;(百位×10+十位)×10→AX ANDBX,0FH;取個位
ADDAX,BX;(百位×10+十位)×10+個位→SB
;最后結(jié)果為16位數(shù),不能簡單+低8位
MOV[SB],AX;AXSBGLUT_C2013-08J.CB14
簡單程序設(shè)計例下面再看幾個補充的例題。例
:將存儲器單元DAT1中保存的一個組合BCD數(shù)轉(zhuǎn)換成兩個對應(yīng)ASCII碼值,并存入DAT2開始的兩個單元,低位在前,高位在后。GLUT_C2013-08J.CB15BCD碼轉(zhuǎn)換成ASCII碼數(shù)據(jù):非壓縮BCD數(shù)據(jù)在高半字節(jié)+3.例如數(shù)字55:0000010100110101000001010011000000110101用邏輯或指令OROR000001010011000000110101用加法指令OR+得到的結(jié)果是相同的。都是在高半字節(jié)加3。GLUT_C2013-08J.CB16該問題算法就很簡單:從DAT1取出BCD數(shù)據(jù),先將高4位清“0”,與30H相加或進行邏輯或運算,存入DAT2,再取出數(shù)據(jù),將數(shù)據(jù)邏輯右移4位(高位BCD數(shù)移到低4位,高4位變“0”,再與30H相加(或進行邏輯或),存入DAT2+1單元。程序流程圖:GLUT_C2013-08J.CB17程序流程圖程序代碼DATASEGMENT DAT1DB34H
;待轉(zhuǎn)換的數(shù) DAT2DB?,?DATAENDSCODESEGMENTASSUMECS:CODE,
DS:DATASTARA:
MOVAX,DATA MOVDS,AX
;送段地址
LEASI,DAT1LEADI,DAT2 MOVAL,[SI] ANDAL,0FH ADDAL,30H MOV[DI],AL MOVAL,[SI]
開始段定義AL(SI)AL(AL)FH(DI)(AL)+30HAL(SI)結(jié)束AL(AL)右移4位(DI+1)(AL)+30H設(shè)置DS,SIDAT1DIDAT2顯示:MOVDL,ALMOVAH,02HINT21HGLUT_C2013-08J.CB18
MOVCL,4SHRAL,CLORLAL,30H MOV[DI+1],AL MOVAH,4CH INT21HCODEENDS ENDSTART如果要送到屏幕顯示,則將轉(zhuǎn)換結(jié)果先送DL,02送AH,調(diào)用DOS功能。送ASCII字符顯示的系統(tǒng)調(diào)用: 功能AH=02H,
需要顯示的字符ASCII碼DL
, 執(zhí)行INT21H顯示:MOVDL,ALMOVAH,02HINT21HAH=4CH功能調(diào)用。功能是結(jié)束本程序,返回DOSGLUT_C2013-08J.CB19再看一個順序程序:
編寫一個計算Z=(x2-3y)/2的程序,x,y為單字節(jié)正整數(shù),Z用2字節(jié)保存。這是一個算術(shù)運算程序,算法設(shè)計:首先計算X2=X*X,暫存該結(jié)果,其次計算3*y,第三步計算X2-3*y第四步計算(x2-3y)/2。該步使用算術(shù)右移實現(xiàn)除2運算,比用除法指令執(zhí)行速度快。依據(jù)該算法,可以畫出程序流程框圖。GLUT_C2013-08J.CB20開始計算Z=x*x計算Z=(X*X-3Y)/2結(jié)束計算3*yX2的計算,可以分解為3*Y的計算,可以分解為ALxMULALBXAXCXAXADDAX,CXADDAX,CXALY,AH=0GLUT_C2013-08J.CB21;數(shù)據(jù)段定義
DATA SEGMENT X DB25 Y DB32 Z DW ? DATAENDS;代碼段開始
CODE SEGMENT ASSUMECS:CODE,DS:DATA
EXPREPROCFAR
;過程定義,遠過程 START:PUSHDS;DS:00保存的是一條返回
SUBAX,AX ;DOS指令。
PUSHAX ;這里,將返回DOS的地址
;壓入堆棧
MOVAX,DATA操作系統(tǒng)會自動在DS:00處安排一條返回操作系統(tǒng)的指令,故子程序開始處向堆棧中壓入DS:00執(zhí)行RET指令,則就是轉(zhuǎn)到DS:00——返回DOSGLUT_C2013-08J.CB22 MOVDS,AX
;數(shù)據(jù)段首地址(基地址) MOVAL
,
X
;取變量X
MOVBL,AL
MULBL ;X*X=X2
MOVBX,AX
MOVAL,
Y
;取變量Y
MOVAH,0 ;正整數(shù),高字節(jié)直接擴展0
MOVCX,AX ADDAX,CX ;2Y ADDAX,CX ;3Y
XCHGAX,BX
SUB
AX,BX
;X2-3Y SHR
AX,1
;右移一位/2 MOV
Z,
AX RET ;將DS:00彈出到CS:IP
EXPREENDP;過程定義結(jié)束CODEENDS ENDSTARTRET指令,轉(zhuǎn)到DS:00,對于EXE格式程序,它是一條返回DOS的指令。GLUT_C2013-08J.CB23;數(shù)據(jù)段定義
DATA SEGMENT X DB25 Y DB32 Z DW ? DATAENDS;代碼段開始
CODE SEGMENT ASSUMECS:CODE,DS:DATAMOVAX,DATA MOVDS
,
AX MOVAL
,
X MOV BL,AL可以使用常規(guī)返回DOS方法——INT21H的4CH功能調(diào)用GLUT_C2013-08J.CB24
MULBL ;X*X=X2
MOVBX,AX
MOVAL,
Y
;Y
MOVAH,0
MOVCX,AX ADDAX,CX ;2Y ADDAX,CX ;3Y
XCHGAX,BX
SUB
AX,
BX
;X2-3Y SHR
AX,1
;右移一位/2 MOV
Z,
AX MOVAH,4CH INT21H EXPREENDP;過程定義結(jié)束
CODEENDS ENDSTART用INT21的4CH號功能調(diào)用返回DOS。GLUT_C2013-08J.CB25例BCD加法程序例如:已知字變量W1、W2分別存放兩個非壓縮的BCD數(shù),編寫程序求兩數(shù)之和,并將結(jié)果存入SUM字變量中。注意:W!,W2為2為字變量(2字節(jié))壓縮BCD數(shù),00~99,它們的和則可能為3位BCD數(shù),故SUM應(yīng)該定義3個字節(jié)(用DB定義三個字節(jié))。計算機內(nèi)部只有二進制運算指令,對于BCD數(shù)運算,是十進制數(shù),用二進制運算指令運算,需要進行調(diào)整。 加法、減法、乘法在運算后進行調(diào)整 除法在運算前先進行調(diào)整。只有字節(jié)運算才能進行調(diào)整
非壓縮BCD數(shù)加法調(diào)整AAA(壓縮BCD數(shù)加法用DAA)GLUT_C2013-08J.CB26壓縮BCD加法后,用DAA調(diào)整非壓縮BCD加法后,用AAA調(diào)整壓縮BCD減法后,用DAS調(diào)整非壓縮BCD加法后,用AAS調(diào)整壓縮BCD加法后,用AAM調(diào)整(壓縮的BCD乘法,不能調(diào)整)除法指令前用AAD調(diào)整(存放在AX中的兩位非壓縮BCD數(shù))開始定義W1、W2、SUMAL←W1第一字節(jié)(個位)ADDAL,W2第一字節(jié),AAAC送SUM+2最低位(百位)結(jié)束SUMALAL←W1第二字節(jié)(十位)ADCAL,W2第二字節(jié),AAASUM+1AL將SUM+2清0,然后進行帶進位的循環(huán)左移,就可將CY移進SUM+2最低位,其余位=0GLUT_C2013-08J.CB27例如:0809+0607=010506,程序段如下:DATASEGMENTW1DW0809HW2DW06078HSUMDB3DUP(0)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKMOVAX,DATAMOVDS,AX ;MOVAL,BYTEPTRW1
;取第一個數(shù),AL=09HADD
AL,BYTEPTRW2
;AL=09H+07=10h,AF=1AAA
;AL=06H,產(chǎn)生CF=1
MOV[SUM],AL;保存?zhèn)€位,進位信號在CFMOVAL,BYTEPTRW1+1;AL=08H
GLUT_C2013-08J.CB28
ADCAL,BYTEPTRW2+1;AL=0FH,CF=0AAA
;AL=05H,CF=1MOVSUM+1,AL;存百位和千位
MOVSUM+2,0;處理向百位的進位,先將SUM+2RCLUM+2,1 ;清0,然后用帶進位循環(huán)左移指
;令將進位位移到SUM+2最低位實際上,在SUM定義時,已經(jīng)初始化為0,程序中可以不清0定義的變量W1,W2,SUM在匯編語言源程序中可以直接使用,匯編程序在對源程序進行匯編時,可以識別是從變量所存放的存儲器中取出數(shù)據(jù)——實際上就是匯編程直接尋址指令
MOVAL,[W1],為了書寫簡單,我們直接寫成MOVAL,W1.GLUT_C2013-08J.CB29以上例子,有一些只給出了實現(xiàn)所要求功能的核心部分分代碼,沒有給出段定義的完整部分。有一些則給出了包含段定義的完整代碼;段定義的格式是相似的,可以參照教材上的例子和前面的段定義例子編寫。教材上還有一些順序程序的例子,由于時間關(guān)系,就不一一列舉了。GLUT_C2013-08J.CB30順序程序的結(jié)構(gòu)簡單,但實際程序設(shè)計中,往往需要對某些條件進行判斷,依據(jù)不同的條件執(zhí)行不同的分支,這樣,順序程序?qū)⒉荒軡M足要求。GLUT_C2013-08J.CB313.3.2
分支程序的設(shè)計
就是利用CPU的條件轉(zhuǎn)移指令,通過判斷某個標(biāo)志為的狀態(tài),控制程序的執(zhí)行過程。PF=0奇轉(zhuǎn)移JNP/JPOPF=1偶轉(zhuǎn)移
JP/JPEOF=0無溢出轉(zhuǎn)移JNOOF=1溢出轉(zhuǎn)移JOSF=0為正轉(zhuǎn)移JNSSF=1為負轉(zhuǎn)移JSCF=0無進(借)位轉(zhuǎn)移JNCCF=1有進(借)位轉(zhuǎn)移JCZF=0不相等/不等于0轉(zhuǎn)移JNE/JNZZF=1相等/等于0轉(zhuǎn)移JE/JZ標(biāo)志設(shè)置功能指令助記符GLUT_C2013-08J.CB32二分支結(jié)構(gòu)分支結(jié)構(gòu)判斷ABNYABC1ABC2ABC3分支結(jié)構(gòu)判斷BNYABC1ABC2GLUT_C2013-08J.CB33多分支結(jié)構(gòu)條件判斷1Y……程序1N條件判斷2Y程序2條件判斷n程序nY程序n+1NNGLUT_C2013-08J.CB34也可以按照條件編碼實現(xiàn)多分枝轉(zhuǎn)移例如段內(nèi)間接轉(zhuǎn)移指令JMPREG轉(zhuǎn)移到CS:AXJMPWORDPTRMEM轉(zhuǎn)移到CS:[MEM]AX←條件編碼CODAX←AX*kJMPAX分支程序0分支程序1分支程序nCOD=0COD=1COD=nK是一個不小于2的整數(shù)。GLUT_C2013-08J.CB35我們還是通過實例來討論。例:內(nèi)存單元M中有一個16位的帶符號數(shù),求它的絕對值,并將結(jié)果放回原處。
算法:求一個數(shù)的絕對值時,如果是正數(shù),絕對值不變,如果是負數(shù),則求它的機器負數(shù)(連同符號位一起每位取反,最低位+1,就是使用NEG指令)。有了算法,可以畫出程序流程圖。GLUT_C2013-08J.CB36轉(zhuǎn)移目的指令給出標(biāo)號(符號地址)開始設(shè)置DSSIMAX[SI]ORLAX,AXSF=0NEGAXNYDONE[SI](AX)結(jié)束N_DATAN_DATA,負數(shù),該標(biāo)號為了閱讀程序方便判斷數(shù)據(jù)的符號,在X86中就是判斷SF標(biāo)志位,數(shù)據(jù)傳送指令不改變標(biāo)志位,因此用一條邏輯運算指令ORLAx,AX,它不改變AX的值,但設(shè)置標(biāo)志位SFGLUT_C2013-08J.CB37
DATASEGMENT
MDW789AH ;可以任意輸入一個數(shù)
DATAENDSCODESEGMENT
ASSUMECS:CODE2,DS:DATA2START:MOVAX,DATA MOVDS,AX LEASI,M;MOVSI,OFFSETM MOVAX,[SI] ORLAX,AX;ANDAX,AX JNSDONE
;符號為SF=0轉(zhuǎn)移到DONEN_DATA:NEGAX
;負數(shù),利用NEG指令求負DONE:MOV[SI],AX MOVAH,4CH INT21HCODEENDSEND
GLUT_C2013-08J.CB38多分支程序?qū)Ψ种С绦?,可以由這種2分支程序構(gòu)成。滿足條件1?NYFUN1滿足條件2?滿足條件3?分支4分支3分支2分支1YYNNFUN2FUN3FUN4FUN5TST2TST1TST3GLUT_C2013-08J.CB39計算函數(shù)的程序,x是十六位長度字?jǐn)?shù)據(jù)算法分析:取出數(shù)據(jù)X,判斷它的符號,首先判斷是否>=0,如果不是,則是負數(shù),Y=-1,如果是,還須再次判斷是否等于0。程序流程框圖為:GLUT_C2013-08J.CB40開始段定義及初始化取數(shù)據(jù)-->AX(AX)≥0?(AX)=0?Y=-1Y=0Y=1結(jié)束YYNNLP1LP3LP2END1畫流程圖的時候,對轉(zhuǎn)移目標(biāo)地址(最好是分支程序的兩個分支點)都給出一個標(biāo)號,在寫代碼時好使用LP0GLUT_C2013-08J.CB41DATASEGMENT
XDW-8
YDB?DATAENDSCODESEGMENT
ASSUMECS:CODE3,DS:DATA3START: MOVAX,DATA3;設(shè)置段基址
MOVDS,AX LEASI,X ;取偏移地址
MOVAX,[SI] ANDAX,AXGLUT_C2013-08J.CB42
JNSLP1 ;SF=0,轉(zhuǎn)到LP1LP0:
MOVY,0FFH ;<0,Y=-1的補碼
JMPEND1LP1:
JZLP3
;X>=0,繼續(xù)判斷,
;=0轉(zhuǎn)到LP3LP2:
MOVY,01H ;X>0時,y=1 LJMPEND1LP3:
MOV Y,00H ;X=0時,Y=0END1:
MOVAH,4CH ;返回操作系統(tǒng) INT21HCODEENDS ENDSTARTGLUT_C2013-08J.CB43教材上有一個例子(102頁例3.7)算法分析:取出數(shù)據(jù)X,Y,異或,判斷符號,SF=1,表明符號異號Z=0;SF=0,表明符號相同,判斷是否X>0,是,Z=1,否Z=-1。GLUT_C2013-08J.CB44多分支的另一種實現(xiàn)方法除了用二分支指令實現(xiàn)多分支外,還可以用以下指令實現(xiàn):
JMPREG ;
JMPWORDPTRMEM例如,我們要依據(jù)AL中的低4位數(shù)據(jù)(0~15)不同,分別轉(zhuǎn)移到對應(yīng)的分支去執(zhí)行,每個分支約定占用200字節(jié)空間。這類指令應(yīng)用方法如下:GLUT_C2013-08J.CB45
ANL AL,0FH MOVBL,100 MUL BL MOV AX,FUN0 ; JMP AXFUN0: ….
ORGFUN0+100
FUN1: … ;FUN1-FUN0=100
;可以用定位偽指令確定每個… ;分支相距的距離
ORGFUN14+100 ;只要保證這段空間能存下FUN15: … ;這段代碼。也可以是一個轉(zhuǎn)移表,利用遠轉(zhuǎn)移指令轉(zhuǎn)到各處理程序,這樣各功能分值的距離就比較小,而且相距的字節(jié)數(shù)也相同。GLUT_C2013-08J.CB46例3.9從鍵盤上鍵入2位十六進制數(shù)將其拼合成一個字節(jié)存入字節(jié)變量SB中。DATASEGMENT IBUF DB3,0,3DUP(0) SB DB0DATAENDSCODESEGMENT ASSUMECS:CODE,DS:DATA MOV AX,DATA MOV DS,AX MOVDX,OFFSETIBUF;鍵入2位十六進制數(shù)
MOVAH,10 INT21H MOVAX,WORDPTRIBUF+2;鍵入字符從+2單元開始,取出送AX
SUBAX,3030H ;字符變?yōu)槭M制數(shù)
CMPAL,0AH JBLNSUB7 ;0·9,ASCII-30H就是它對應(yīng)的HEX值
SUBAL,7 ;A·F,ASCII-37H就是它對應(yīng)的HEX值GLUT_C2013-08J.CB47LNSUB7:CMPAH,0AH JBLNSUB7 SUBAH,7HNSUB7:MOVCL,4 ;將AX中的數(shù)拼合成一個字節(jié)
SHLAL,CL ORAL,AH MOVSB,AL MOVAH,4CH INT21HCODEENDS ENDGLUT_C2013-08J.CB48例3.10某工廠的產(chǎn)品有8種不同的加工處理程序P0~P7,根據(jù)鍵盤輸入,做不同的處理,若是0~7以外的鍵,則退出加工處理
此例可以用兩種方法實現(xiàn):一種是用逐一比較判斷,逐次比較轉(zhuǎn)移實現(xiàn)二叉分支、整體上實現(xiàn)多分支;另一種是跳轉(zhuǎn)表法,直接實現(xiàn)多分支.GLUT_C2013-08J.CB49方法一︰逐一比較法.簡單,條理清楚,易于實現(xiàn),但轉(zhuǎn)移范圍只能是:-128~+127DATA SEGMENT INPUTDB’Input(0~7):$’DATAENDSCODESEGMENT MOV AX,DATA MOV DS,AX
MOVDX,OFFSETINPUT
;顯示提示符
MOVAH,9 ;09號功能是顯示字符串,$是字符串結(jié)束符
INT21H ;
MOVAH,1
;等待鍵入一個字符到AL,
INT21HCMPAL,’0’
;為0字符則轉(zhuǎn)P0
JEP0CMPAL,’1’
;為1字符則轉(zhuǎn)P1
JEP1GLUT_C2013-08J.CB50
CMPAL,’2’ JEP2 CMPAL,’3’ JEP3 CMPAL,’4’
JEP4 CMPAL,’5’ JEP5 CMPAL,’6’ JEP6 CMPAL,’7’ JEP7 JMPDOWN
;
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度建筑工程零工合同施工廢棄物處理合同
- 2025年特白陶瓷行業(yè)深度研究分析報告
- 2025年哈爾濱租賃合同范本(含房屋使用限制條款)
- 2025年度駕校場地租賃及智能系統(tǒng)升級合同
- 2025年度金融風(fēng)控人員保密及業(yè)務(wù)合規(guī)協(xié)議
- 2025年度健康體檢服務(wù)購銷合同規(guī)范文本
- 旅游列車與景區(qū)資源整合與協(xié)同發(fā)展
- 2025年度金融風(fēng)險管理與內(nèi)部控制培訓(xùn)協(xié)議
- 教研活動的組織與管理模式
- 2025年度國際貿(mào)易實務(wù)模擬實驗實訓(xùn)報告審核合同
- 2025年南京信息職業(yè)技術(shù)學(xué)院高職單招語文2018-2024歷年參考題庫頻考點含答案解析
- 二零二五年知識產(chǎn)權(quán)共享及收益分成合作協(xié)議3篇
- 北師大版二年級數(shù)學(xué)上冊計算題專項復(fù)習(xí)大全272
- 屋頂分布式光伏電站設(shè)計及施工方案
- 南通市2025屆高三第一次調(diào)研測試(一模)生物試卷(含答案 )
- 2024年09月2024渤海銀行天津濱海新區(qū)分行校園招聘筆試歷年參考題庫附帶答案詳解
- 2024低血糖的急救診斷和治療
- 期末考試成績分析報告課件
- 兒童哮喘的防治與治療
- 學(xué)校安全教師培訓(xùn)
- 金融警示教育案例
評論
0/150
提交評論