基本結(jié)構(gòu)程序相關(guān)設(shè)計(jì)_第1頁
基本結(jié)構(gòu)程序相關(guān)設(shè)計(jì)_第2頁
基本結(jié)構(gòu)程序相關(guān)設(shè)計(jì)_第3頁
基本結(jié)構(gòu)程序相關(guān)設(shè)計(jì)_第4頁
基本結(jié)構(gòu)程序相關(guān)設(shè)計(jì)_第5頁
已閱讀5頁,還剩62頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

基本結(jié)構(gòu)程序相關(guān)設(shè)計(jì)5.1順序結(jié)構(gòu)程序設(shè)計(jì)在講順序結(jié)構(gòu)程序設(shè)計(jì)之前,先了解以下三方面的內(nèi)容匯編語言程序設(shè)計(jì)的基本步驟流程圖的畫法規(guī)定程序的基本結(jié)構(gòu)匯編語言程序設(shè)計(jì)一般有以下幾個(gè)步驟:1.分析問題,歸納出數(shù)學(xué)模型2.確定算法3.繪制流程圖4.分配存儲(chǔ)空間和工作單元5.根據(jù)流程圖編制程序6.靜態(tài)檢查7.調(diào)試程序1.流程圖的概念 流程圖是由特定的幾何圖形、指向線、文字說明來表示數(shù)據(jù)處理的步驟,形象描述邏輯控制結(jié)構(gòu)以及數(shù)據(jù)流程的示意圖。流程圖具有簡潔、明了、直觀的特點(diǎn)。2.流程圖符號(hào)表示(1)開始框:表示程序的開始。開始(3)判斷框(2)處理框(執(zhí)行框)條件NY(4)結(jié)束框結(jié)束結(jié)構(gòu)程序設(shè)計(jì)程序的每個(gè)部分都由有限結(jié)構(gòu)結(jié)合中的單元組成,并且只有單一的入口和單一的出口?;窘Y(jié)構(gòu)有:順序結(jié)構(gòu)(線性結(jié)構(gòu))選擇結(jié)構(gòu)(分支結(jié)構(gòu))循環(huán)結(jié)構(gòu)三種結(jié)構(gòu)可以任意組合和嵌套構(gòu)成復(fù)雜的程序。這三種結(jié)構(gòu)可歸納為五種邏輯結(jié)構(gòu):(1)順序結(jié)構(gòu)(2)雙分支結(jié)構(gòu)……(3)多分支結(jié)構(gòu)YN條件條件YN(4)DO_UNTIL循環(huán)結(jié)構(gòu)NY(5)DO_WHILE循環(huán)結(jié)構(gòu)圖程序的邏輯結(jié)構(gòu)格式5.1順序結(jié)構(gòu)程序設(shè)計(jì)特點(diǎn):指令順序執(zhí)行,無分支、無循環(huán)、無轉(zhuǎn)移。例5-1編寫程序段,完成下面公式的計(jì)算(其中:變量X和Y是32位有符號(hào)數(shù),變量A,B和Z是16位有符號(hào)數(shù))。A←(X-Y+24)/Z的商,B←(X-Y+24)/Z的余數(shù)程序如下:DATA1SEGMENTXDD?YDD?ZDW?ADW?BDW?…DATA1ENDSCODE1SEGMENT…MOVAX,XMOVDX,X+2;用(DX:AX)來保存32位變量X的數(shù)值SUBAX,YSBBDX,Y+2;(DX:AX)-(Y+2:Y)ADDAX,24DADCDX,0;(DX:AX)+24IDIVZMOVA,AXMOVB,DX…CODE1ENDSSTART:MOVAX,DATA MOVDS,AX

MOVAL,AD1

ADDAL,AD2

MOVSUM,AL MOVAH,4CHINT21H;返回DOSCODEENDS ENDSTART例5-2利用直接查表法完成將一位16進(jìn)制數(shù)轉(zhuǎn)換成對(duì)應(yīng)它相應(yīng)的ASCII碼。DATASEGMENTTABLEDB30H,31H,32H,33H,34H,35H,36H,37HDB38H,39H,41H,42H,43H,44H,45H,46HNUMDB4ASCIIDB?DATAENDSCOSEGSEGMENT ASSUMECS:COSEG,DS:DATASTART:MOVAX,DATA MOVDS,AX

MOVBX,OFFSETTABLEXORAX,AX;AX清零

MOVAL,NUMADDBX,AXMOVAL,[BX]MOVASCII,ALMOVAH,4CH;返回DOSINT21HCOSEGENDSENDSTART說明:DOS的1號(hào)功能調(diào)用MOVAH,01H;從標(biāo)準(zhǔn)輸入設(shè)備讀一個(gè)字符INT21H;AL=鍵入的ASCII碼DOS的2號(hào)功能調(diào)用MOVAH,02H;向標(biāo)準(zhǔn)輸出設(shè)備輸出一個(gè)字符INT21H;DL=輸出字符的ASCII碼注意XLAT的換碼指令的操作5.2分支程序設(shè)計(jì)轉(zhuǎn)移指令轉(zhuǎn)移指令無條件轉(zhuǎn)移指令有條件轉(zhuǎn)移指令1、無條件轉(zhuǎn)移指令功能是無條件轉(zhuǎn)移到指定地址,執(zhí)行從該地址開始的指令。根據(jù)轉(zhuǎn)移時(shí)是否重置CS的內(nèi)容,無條件轉(zhuǎn)移指令段內(nèi)轉(zhuǎn)移段間轉(zhuǎn)移段內(nèi)轉(zhuǎn)移(近轉(zhuǎn)移):轉(zhuǎn)移時(shí)只改變IP寄存器的內(nèi)容,CS的值保持不變,條件轉(zhuǎn)移和循環(huán)指令只能實(shí)現(xiàn)段內(nèi)轉(zhuǎn)移。段間轉(zhuǎn)移(遠(yuǎn)轉(zhuǎn)移):是在不同代碼段之間轉(zhuǎn)移,不僅改變IP的值,也改變CS的值,軟中斷和中斷返回總是段間轉(zhuǎn)移。(1)段內(nèi)直接短轉(zhuǎn)移格式:JMPSHORTOPR功能:IP←IP+8位偏移量其中OPR為一般標(biāo)號(hào),轉(zhuǎn)移范圍-128~127例:NEXT:MOVAX,CX ……JMPNEXT…… JMPOVER……OVER:MOVAX,1……(2)段內(nèi)直接近轉(zhuǎn)移格式:JMPNEARPTROPR功能:IP←IP+16位的偏移量其中OPR為一般標(biāo)號(hào),轉(zhuǎn)移范圍為-32768~32767地址差為0~65535,所以近轉(zhuǎn)移可以到達(dá)實(shí)模式下當(dāng)前代碼段的任何位置。(3)段內(nèi)間接轉(zhuǎn)移格式:JMPWORDPTROPR功能:IP←(EA)OPR是16位的通用寄存器或字存儲(chǔ)器。例:

JMPCX;CX寄存器的內(nèi)容送IPJMPWORDPTR[1234];字存儲(chǔ)單元[1234]的內(nèi)容送IP7856

……

JMP3412

……

MOVAX,1

……DS:1234H原IP=××××新IP=5678H轉(zhuǎn)移指令(4)段間直接轉(zhuǎn)移格式:JMPFARPTROPR功能:IP←OPR的偏移地址,CS←OPR的段地址其中OPR是一個(gè)標(biāo)號(hào),所代表的指令與JMP指令不在同一個(gè)代碼段中,標(biāo)號(hào)前的FARPTR向匯編程序說明這是段間轉(zhuǎn)移。無條件段間直接轉(zhuǎn)移指令機(jī)器指令格式如下:指令操作碼目標(biāo)地址偏移目標(biāo)地址段值跳轉(zhuǎn)至此……

A3000127

JMP遠(yuǎn)轉(zhuǎn)移1000010001100021000310004A3126A3127(5)段間間接轉(zhuǎn)移格式:JMPDWORDPTROPR功能:IP←(EA),CS←(EA+2)其中OPR是一個(gè)雙字存儲(chǔ)器,低字存放轉(zhuǎn)移目標(biāo)的偏移地址,高字存放轉(zhuǎn)移目標(biāo)的段地址。例如:JMPDWORDPTR[1234]雙字存儲(chǔ)單元的低字節(jié)送IP雙字存儲(chǔ)單元的高字節(jié)送CS2.條件轉(zhuǎn)移指令條件轉(zhuǎn)移只能實(shí)現(xiàn)段內(nèi)轉(zhuǎn)移,而且轉(zhuǎn)移范圍是-128~127。(1)單條件轉(zhuǎn)移指令根據(jù)標(biāo)志位的值進(jìn)行轉(zhuǎn)移①JZ/JEOPR;ZF=1轉(zhuǎn)移(結(jié)果為零或相等轉(zhuǎn)移)②JNZ/JNEOPR;ZF=0轉(zhuǎn)移(結(jié)果不為零或不相等轉(zhuǎn))③JSOPR;SF=1轉(zhuǎn)移(結(jié)果為負(fù)轉(zhuǎn)移)④JNSOPR;SF=0轉(zhuǎn)移(結(jié)果為正轉(zhuǎn)移)格式轉(zhuǎn)移條件說明⑤JOOPR;OF=1轉(zhuǎn)移(結(jié)果溢出轉(zhuǎn)移)⑥JNOOPR;OF=0轉(zhuǎn)移(結(jié)果不溢出轉(zhuǎn)移)⑦JP/JPEOPR;PF=1轉(zhuǎn)移(結(jié)果為偶轉(zhuǎn)移)⑧JNP/JPOOPR;PF=0轉(zhuǎn)移(結(jié)果為奇轉(zhuǎn)移)⑨JCOPR;CF=1轉(zhuǎn)移(有進(jìn)位或借位轉(zhuǎn)移)⑩JNCOPR;CF=0轉(zhuǎn)移(無進(jìn)位或借位轉(zhuǎn)移)注:通常在使用條件指令前,總有用于條件判斷的相關(guān)指令例如:要測試寄存器AX的低四位是否全為0,如果全為0,則CX=0,否則CX=-1MOVCX,-1;CX賦初值TESTAX,0FH;測試AX的低4位JNZNZERO;不全為0轉(zhuǎn)NZEROMOVCX,0;全為0,置CX=0NZERO:……

例3-45已知一個(gè)字節(jié)變量Char,試編寫一程序段,把其所存的大寫字母變成小寫字母。程序如下:

CharDB‘F’;變量說明

NEXT:…

MOVAL,CharCMPAL,'A'JBNEXT;注意:字符是無符號(hào)數(shù)

CMPAL,'Z'JANEXTADDChar,20H;大小寫轉(zhuǎn)換

(2)兩個(gè)無符號(hào)數(shù)比較(X,Y)①JB/JNAE/JCOPRX<Y轉(zhuǎn)移②JAE/JNB/JNCOPRX>=Y轉(zhuǎn)移③JBE/JNAOPRX<=Y轉(zhuǎn)移④JA/JNBEOPRX.>Y轉(zhuǎn)移指令系統(tǒng)提供了兩組指令,分別用于無符號(hào)數(shù)和有符號(hào)數(shù)的比較。無符號(hào)數(shù)比較,用A代表大于,用B代表小于,用E代表等于有符號(hào)數(shù)比較,用G代表大于,用L代表小于,用E代表等于(3)兩個(gè)有符號(hào)數(shù)的比較(X,Y)①JL/JNGEOPRX<Y轉(zhuǎn)移②JGE/JNLOPRX>=Y轉(zhuǎn)移③JLE/JNGOPRX<=Y轉(zhuǎn)移④JG/JNLEOPRX>Y轉(zhuǎn)移(4)CX的值為零轉(zhuǎn)移

JCXZOPRCX=0時(shí)轉(zhuǎn)移(5)ECX的值為零轉(zhuǎn)移

JECXZOPRECX=0時(shí)轉(zhuǎn)移下面的程序段說明無符號(hào)數(shù)比較與有符號(hào)數(shù)比較的區(qū)別:

MOVAL,88H CMPAL,68H JAENEXT MOVAL,68HNEXT:HLTAL=______________

MOVAL,88H CMPAL,68H JGENEXT MOVAL,68HNEXT:HLTAL=______________88H68H5.2.1分支程序的結(jié)構(gòu)形式5.2.2分支程序設(shè)計(jì)1、雙分支程序的一般結(jié)構(gòu)2、雙分支程序設(shè)計(jì)(1)只有一個(gè)分支需要處理,要注意判斷條件的選取。(2)兩個(gè)分支都要做相應(yīng)的處理,要注意分支結(jié)束后需要轉(zhuǎn)到結(jié)束處。程序分支判斷實(shí)現(xiàn)的辦法:比較指令+條件指令邏輯指令+條件指令算術(shù)指令+條件指令一、雙分支程序設(shè)計(jì)例5-3設(shè)有單字節(jié)無符號(hào)數(shù)X,Y,Z,若X+Y>255,則求X+Z,否則求X-Z,運(yùn)算結(jié)果放在F1中。X,Y,Z,F(xiàn)1均為字節(jié)變量名。開始結(jié)束AL,BX

XAL+Y>255BL

BL+ZBL

遾BL-ZF1

BLNY程序段如下:MOVAL,X MOVBL,AL ADDAL,Y JNCLET;若無進(jìn)位則轉(zhuǎn)LET ADDBL,ZDONE: MOVF1,BL HLTLET: SUBBL,Z

JMPDONE二、多分支程序設(shè)計(jì)多分支程序結(jié)構(gòu)設(shè)計(jì)的實(shí)現(xiàn)過程相當(dāng)于CASE語句形式。最直接的方法就是使用簡單的分支結(jié)構(gòu)進(jìn)行組合,使用條件轉(zhuǎn)移指令結(jié)合無條件轉(zhuǎn)移指令來實(shí)現(xiàn)。例5.4:編寫一程序段,計(jì)算以下公式:1X>0Y=0X=0-1X<0X≥0?X=0?YNYY=0Y=-1Y=1NNEXT程序段如下:

CMPX,0;X≥0? JGEBIGER;若X≥0轉(zhuǎn)BIGER MOVY,F(xiàn)FH;若X<0,Y←-1 JMPNEXTBIGER:JZEQUL;X=0轉(zhuǎn)EQUL,否則

MOVY,1 JMPNEXTEQUL:MOVY,0NEXT:…………例5.5請(qǐng)編寫一個(gè)程序,根據(jù)AL寄存器中哪一位為1,轉(zhuǎn)到8個(gè)不同的分支中去。使用跳躍表示法,需求程序如下:

DSEGSEGMENT;定義數(shù)據(jù)段

ADDRESS_tableDWMATTER1DWMATTER2DWMATTER3DWMATTER44DWMATTER5DWMATTER6DWMATTER7DWMATTER8 DSEGENDSCODESEGMENT;定義代碼段

ASSUMECS:CODE,DS:DSEGstart:;程序開始執(zhí)行地址

PUSHDS;保存舊DSSUBBX,BX;BX清0

PUSHBX;BX壓棧MOVBX,DSEG;數(shù)據(jù)段地址送BXMOVDS,BX;BX送DSCMPAL,0;判斷AL是否為0JEEXCULEABX,ADDRESS_table;跳轉(zhuǎn)表的首地址賦給BXcycle:SHRAL,1;將AL的最低位移入CFJNCnoACT;如果CF=0,轉(zhuǎn)NOACTJMPWORDPTR[BX];如果CF=1,轉(zhuǎn)到相應(yīng)分支執(zhí)行5.3循環(huán)結(jié)構(gòu)程序設(shè)計(jì)5.3.1、循環(huán)程序結(jié)構(gòu)5.3.2、循環(huán)程序設(shè)計(jì)方法循環(huán)指令(1)LOOP循環(huán)指令格式:LOOPOPR(OPR為一般標(biāo)號(hào))功能:CX←CX-1;若CX≠0,轉(zhuǎn)至標(biāo)號(hào)處,否則繼續(xù)執(zhí)行。注意:①循環(huán)次數(shù)先放在CX中,先減1后判斷②若為32位指令模式,LOOP默認(rèn)使ECX減1。LOOPWOPR(指明用CX作為循環(huán)次數(shù))LOOPDOPR(指明用ECX作為循環(huán)次數(shù))例:顯示輸出5個(gè)A

MOVCX,5AGAIN:MOVDL,’A’ MOVAH,2 INT21H DECCX JNZAGAIN

MOVCX,5AGAIN:MOVDL,’A’ MOVAH,2 INT21H LOOPAGAIN(2)LOOPZ/LOOPE(零或相等時(shí)循環(huán)指令)格式:LOOPZ/LOOPEOPR功能:CX←CX-1;若CX≠0且ZF=1時(shí)轉(zhuǎn)至標(biāo)號(hào),否則繼續(xù)執(zhí)行后續(xù)指令。(3)LOOPNZ/LOOPNE(不為零或不相等時(shí)循環(huán)指令)格式:LOOPNZ/LOOPNEOPR功能:CX←CX-1;CX≠0且ZF=0,轉(zhuǎn)至標(biāo)號(hào),否則,順序執(zhí)行后續(xù)指令。

DISP:MOVDX,DIADDDL,30H;得到下標(biāo)的ASCII碼MOVAH,2INT21HMOVAH,4CHINT21HCODEENDSENDSTART例:在字符串中查找空格字符,找到顯示Y,否則顯示N。STRDB‘ASDFJJFJFDSLF’ LEQU$-STR…… MOVCX,L MOVSI,-1 MOVAL,20HNEXT:INTSI CMPAL,STR[SI] LOOPNENEXT JNZNFOUND MOVDL,’Y’ MOVAH,2 INT21H JMPEXITNFOUND:MOVDL,’N’ MOVAH,2 INT21HEXIT:MOVAH,4CH INT21H5.3.1循環(huán)程序的結(jié)構(gòu) ……

MOVCX,CNT-1 MOVBX,OFFSETBUF MOVAL,[BX]LOOP1:INCBX CMPAL,[BX] JAENEXT MOVAL,[BX]NEXT:DECCX JNZLOOP1初始化循環(huán)體修改部分控制部分先執(zhí)行后判斷先判斷后執(zhí)行單循環(huán)程序設(shè)計(jì)即循環(huán)體內(nèi)只是一些簡單和分支程序;

例5.6:數(shù)據(jù)段的BLOCK數(shù)組中存放有10個(gè)無符號(hào)數(shù),試找出其中最大者送MAX單元。DATASEGMENT;定義數(shù)據(jù)段BLOCKDB5,15,10,38,-6,72,120,-64COUNTDB$-BLOCKMAXDB?DATAENDS;數(shù)據(jù)段結(jié)束CODESEGMENT;定義代碼段

ASSUMECS:CODE,DS:DATAMAINPROCFAR;主過程

PUSHDS;DS值壓棧

SUBAX,AXPUSHAXMOVAX,DATAMOVDS,AXmovsi,offsetblockmovcx,9moval,[si]lop:incsicmpal,[si]jaenextmoval,[si]NEXT:DECCXJNZLOPMOVMAX,ALMOVAH,4CHINT21HCODEENDSENDSTARTDATASEGMENT ARRAYDB0,0,0,16,0,88,72,0,35,42,99 CONTEQU$-ARRAYMESSDB‘NOFOUND!$’DATAENDSCODESEGMENT ASSUMECS:CODE,DS:DATASTART:MOVAX,DATA MOVDS,AX例5-8在字節(jié)數(shù)組中找出第一個(gè)非0數(shù)據(jù),并顯示其下標(biāo),否則輸出NOFOUND。MOVCX,CONT;設(shè)置循環(huán)計(jì)數(shù)器

MOVDI,F(xiàn)FFFH;設(shè)置DI為-1

NEXT:INCDI

CMPARRAY[DI],0;取數(shù)組元素與0比較

LOOPZNEXT;CX≠0且ZF=1時(shí)循環(huán)

JNEDISP;找到,顯示下標(biāo)

MOVDX,OFFSETMESS;未找到

MOVAH,09H

INT21H例:統(tǒng)計(jì)數(shù)據(jù)塊中正數(shù)和負(fù)數(shù)的個(gè)數(shù)。建立地址→SI;0→CX結(jié)果寄存器清0(BL=0,DL=0)取一數(shù)→ALAL≥0?

DL+1→DLBL+1→BLCX+1=次數(shù)?

修改地址指針(SI+1→SIN存放結(jié)果YNDATASEGMENT BUFDB-32,25,36,-45,-34,0,-5 COUNTEQU$-BUF PLUSDB? MINUSDB?DATAENDSCODESEGMENT ASSUMECS:CODE,DS:DATASTART:MOVAX,DATA MOVDS,AX

MOVBL,0 MOVDL,0 MOVSI,OFFSETBUF MOVCX,0LOP1:MOVAL,[SI] CMPAL,0 JGE NEXT0 INCBL JMPNEXT1NEXT0:INCDLNEXT1:INCSI INCCX CMPCX,COUNTJLLOP1 MOVMINUS,BL MOVPLUS,DL MOVAH,4CH INT21HCODEENDSENDSTART例5-7在STRING開始的緩沖區(qū)中存放一個(gè)字符串,結(jié)束符‘$’,計(jì)算該字符串的長度并存入LEN單元中。DATASEGMENT STRINGDB‘FJSLFJSLFSAL$’ LENDB?DATAENDSCODESEGMENT ASSUMECS:CODE,DS:DATASTART:MOVAX,DATA MOVDS,AX MOVSI,OFFSETSTRING XORBL,BLLOP:MOVAL,[SI] CMPAL,24H JZSTOP INCBL INCSI JMPLOPSTOP:MOVLEN,BL

MOVAH,4CHINT21HCODEENDS ENDSTART2、多重循環(huán)程序設(shè)計(jì)多重循環(huán):循環(huán)中嵌套循環(huán)即多重循環(huán)設(shè)計(jì)時(shí)注意:1、分清每層循環(huán)的任務(wù)和要求2、分別考慮每層循環(huán)的控制條件和程序?qū)崿F(xiàn)。例:從BUF開始存放N個(gè)有符號(hào)字節(jié)數(shù),用冒泡法將數(shù)據(jù)按從小到大順序排列。1、編程思路從第一個(gè)數(shù)起,對(duì)相鄰兩個(gè)數(shù)比較,若前一個(gè)數(shù)比后一個(gè)數(shù)大,則兩數(shù)交換位置。否則不變。經(jīng)過N-1次比較,可把最大數(shù)放到最后。再進(jìn)行第二遍兩兩比較,可將次大數(shù)放在次后位……,經(jīng)過N-1遍比較,可排好序。需要兩重循環(huán)完成排序,其中內(nèi)層完成每一遍的比較,外層完成比較多少次的控制。2、程序的實(shí)現(xiàn)DATASEGMENT BUF

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論