匯編語言第5章 循環(huán)與分支程序設(shè)計(jì)_第1頁
匯編語言第5章 循環(huán)與分支程序設(shè)計(jì)_第2頁
匯編語言第5章 循環(huán)與分支程序設(shè)計(jì)_第3頁
匯編語言第5章 循環(huán)與分支程序設(shè)計(jì)_第4頁
匯編語言第5章 循環(huán)與分支程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

DOS系統(tǒng)功能調(diào)用DOS系統(tǒng)功能調(diào)用格式在AH中設(shè)置功能號(hào)在指定的寄存器中設(shè)置入口參數(shù)用INT

21H指令執(zhí)行系統(tǒng)功能調(diào)用根據(jù)出口參數(shù)分析執(zhí)行情況DOS系統(tǒng)功能調(diào)用INT

21H的部分I/O操作1).

鍵盤輸入一個(gè)字符并回顯計(jì)算機(jī)等待從標(biāo)準(zhǔn)輸入設(shè)備(主要指鍵盤)輸入,直到按下一個(gè)鍵。如果按下的是數(shù)字、字母等可用ASCII碼表示的字符,則這個(gè)字符就被送到屏幕顯示并把其對(duì)應(yīng)的ASCII碼值送到AL寄存器。如果按下Tab制表鍵,則光標(biāo)通過添加空格。如按下的鍵是組合的Ctrl-Break兩鍵,則執(zhí)行23H的中斷而退出命令執(zhí)行。功能號(hào)AH=01H,出口參數(shù)AL=字符;AH

,

01H21H使用格式:

MOVINTEx2.asm2).

鍵盤輸入字符到緩沖區(qū):功能號(hào):AH=0AH,入口參數(shù):DS:DX=緩沖區(qū)首址(DS:DX)=緩沖區(qū)最大字符數(shù)(DS:DX+1)=緩沖區(qū)實(shí)際輸入字符數(shù)(AL)=00有輸入(AL)=FF無輸入從鍵盤接收字符串存入內(nèi)存。要求事先定義一個(gè)輸入緩沖區(qū),它的始址放于

DS:DX,第一個(gè)字節(jié)指出緩沖區(qū)能容納的最大字符數(shù)(1~255),不能為零,該值由用戶設(shè)置;第二字節(jié)保留以用作由D0S返回實(shí)際讀入的字符數(shù)(回車除外);從第三個(gè)字節(jié)開始存放從鍵盤上接收的字符。若實(shí)際輸入的字符數(shù)少于定義的字節(jié)數(shù),緩沖區(qū)內(nèi)其余字節(jié)填零;若多于定義的字節(jié)數(shù),則后來輸入的字符丟掉并且響鈴。DOS還自動(dòng)在輸入字符串的末尾加上回車字符,然而這個(gè)回車字符未被計(jì)入由DOS填到第二個(gè)輔助字節(jié)內(nèi)的數(shù)目之中。因此,在設(shè)立輸入緩沖區(qū)最大尺寸時(shí)要比所希望輸入的字節(jié)數(shù)多一個(gè)字節(jié)。Ex3.asm3).輸出一個(gè)字符功能號(hào)

:

AH=2入口參數(shù):DL=字符,光標(biāo)隨字符移動(dòng)使用格式:MOVMOVINTDL

,

‘A’AH

,

02H21H執(zhí)行上面程序后,將在屏幕上顯示字符A.Ex4.asm4).輸出字符串,

功能號(hào)

:

AH=9,入口參數(shù):DS:DX=串地址,字串結(jié)束為“$”符號(hào)使用格式:

BUF

DB

‘HELLO!’,’$’……MOVMOVINTDX,

OFFSET

BUFAH,

09H21H……….

Ex5.asm5.S系統(tǒng)5)鍵盤輸入一個(gè)字符無回顯,支持CTRL_BREAK,CTRL_C檢查處理。功能號(hào):AH=08H出口參數(shù):AL=字符;6)返回DOS系統(tǒng)功能號(hào):AH=4CH7)清鍵盤緩沖區(qū),并調(diào)用一種鍵盤功能功能號(hào):AH=0CHAL=鍵盤功能號(hào)(1s7s8s0AH)第5章

循環(huán)與分支程序設(shè)計(jì)編制一個(gè)匯編程序的步驟:分析題意,確定算法。這一步是能否編制出高質(zhì)量程序的關(guān)鍵,因此不應(yīng)該一拿到題目就急于寫程序,而是應(yīng)該仔細(xì)地分析和理解題意,找出合理的算法及適當(dāng)?shù)臄?shù)據(jù)結(jié)構(gòu)。根據(jù)算法畫出程序框圖。這樣可以減少出錯(cuò)的可能性。畫框圖時(shí)可以由粗到細(xì)把算法逐步地具體化。根據(jù)框圖編寫程序。上機(jī)調(diào)試程序。任何程序必須經(jīng)過調(diào)試才能檢查出你的設(shè)計(jì)思想是否正確以及你的程序是否符合你的設(shè)計(jì)思想,結(jié)果是否正確。5.1

順序結(jié)構(gòu)程序例1:自然數(shù)0~15的平方表,存在內(nèi)存TABLE開始的連續(xù)16個(gè)單元中,現(xiàn)XAD單元存有任意一自然數(shù)(0

X<15),查表求X的平方,存入YAD單元中。X2的值的地址:TABLE表的首地址

+

Xdatatablesegmentdb

0,1,4,9,16,25,36,49,64,81db

100,121,144,169,196,225xad

db

3yad

db

?datacodeendssegmentassume

cs:code,ds:data,ss:stackstart

proc

farpushds;將DS入棧movax,0000h;AX置零pushax;將0入棧movax

,data;初始化DSmovds

,axah

,0al

,xadbx

,

ax;AH送0;將X送ALadd;求X平方值的地址al

,byte

ptr[bx]

;X平方值送mov

bx,offset

table;表的首址送B

movmovaddmov

movyad

,

almov

ah,4chint

21hstartcodeendpendsend

start例2:編程求y=((a+b)*c-d)/e

其中asbscsdse依次放在VARAsVARBs

VARCsVARDsVARE單元開始的內(nèi)存中,結(jié)果存放在VARY單元中。DATA SEGMEN;定義數(shù)VARAVARBVARCVARDDW

6DW

7DW

8DW

9;

a=6;

b=7;

c=8;

d=9VAREDW

10;

e=10VARYDW

?;

yDATAENDSSTACK SEGMENT;定義堆棧段DW

20H

DUP

(?)STACKCODESTARTENDSSEGMENT;定義代碼段PROC

FARASSUME

CS:CODE,

DS:DATA,SS:STACKPUSH

DS;DS:00壓棧BEGIN:MOV

AX,

0PUSH

AXMOV

AX,

DATAMOV

DS,AX;置數(shù)據(jù)段MOV

AX,VARAADD

AX,

VARB;a+bIMUL

VARCMOV

CX,AXMOV

BX,DX;(a+b)*cMOV

AX,

VARD;(a+b)*c-dCWDSUB

CX,AXSBB

BX,DXMOV

AX,CXMOV

DX,BXIDIV

VARE ;((a+b)*c-d)/eMOV

VARY,

AXRETSTART

ENDPCODE

ENDSEND

BEGIN5.2

分支結(jié)構(gòu)程序設(shè)計(jì)1.分支程序的結(jié)構(gòu)形式分支程序結(jié)構(gòu)可以有兩種形式IF_THEN_ELSE語句和CASE語句。IF_THEN_ELSE語句可以引出兩個(gè)分支,CASE語句則可以引出多個(gè)分支,不論哪一種形式,在某一種確定條件下,只能執(zhí)行多個(gè)分支中的一個(gè)分支。1:符號(hào)函數(shù):DATAXXYYDATACODEASSUMESTARTPROCBEGIN:SEGMENT

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

10DB

?ENDSSEGMENT;定義代碼段

CS:CODE,DS:DATA

FARPUSH

DS;DS:00壓棧DS,

AXAL,

XXAL,

0BIGR;置數(shù)據(jù)段;AL=XX;AL與0比較;大于,等于轉(zhuǎn)BIGRAL,

0FFH;AL=-1MOV AX,

0PUSH

AXMOV AX,

DATAMOVMOVCMPJGEMOVJMPEQUT

;轉(zhuǎn)EQUTBIGR:MOVEQUT:JE

EQUT;

等于0,轉(zhuǎn)EQUTAL,

01 ;

AL=1MOV YY,AL

;符號(hào)函數(shù)的結(jié)果存入YY單元

RETSTARTCODEENDENDPENDSBEGIN2:某車站需編寫一個(gè)計(jì)算行李托運(yùn)費(fèi)的程序,其要求為:其中G為托運(yùn)質(zhì)量,當(dāng)G=0時(shí),退出程序,G>60Kg不受理。程序:;定義數(shù)據(jù)段;設(shè)托運(yùn)質(zhì)量為25KgSEGMENT

DW

25DW

?DATAXXYYDATA

ENDSSTACK

SEGMENT;定義堆棧段DW

50h

DUP(?)ENDSSTACKCODESTARTSEGMENT

;定義代碼段PROC

FARASSUME

CS:

CODE,

DS:

DATA,

SS:

STACK;DS:00壓棧DS,AX;置數(shù)據(jù)段AX,XX;取托運(yùn)質(zhì)量DEGIN:

PUSH

DSMOV AX,

0PUSH

AXMOV AX,

DATA

MOVMOV

CMPJLECMPJLEAX,

0EXITAX,

20OK;AX與0比較是否大于;小于、等于轉(zhuǎn)EXIT;質(zhì)量是否大于20Kg;小于、等于轉(zhuǎn)OKCMPJGAX,LAB40;質(zhì)量是否大于40Kg;大于轉(zhuǎn)LABSUBAX,20;G-20movcx,2MULcx;(G-20)*2ADDAX,20;(G-20)*2+20JMPOK;轉(zhuǎn)OK;質(zhì)量是否大于60KgEXIT;大于60Kg轉(zhuǎn)EXIT;(G-40)AX,

40cx,3cxAX,

60YY,

AXLAB:

CMP

AX,

60JGSUBmovMULADDMOVRETENDP;(G-40)*3;(G-40)*3+60;托運(yùn)費(fèi)存入YY中OK:EXIT:STARTCODE

ENDSEND

BEGIN3根據(jù)AL中的被放置位的情況控制轉(zhuǎn)移到8個(gè)子程序(R1~R8)中的一個(gè):若AL為00000001則轉(zhuǎn)移至R1;若AL為00000010則轉(zhuǎn)移至R2;若AL為00000100則轉(zhuǎn)移至R3;若AL為00001000則轉(zhuǎn)移至R4;若AL為00010000則轉(zhuǎn)移至R5;若AL為00100000則轉(zhuǎn)移至R6;若AL為01000000則轉(zhuǎn)移至R7;若AL為10000000則轉(zhuǎn)移至R8。分析:實(shí)現(xiàn)CASE結(jié)構(gòu)時(shí),可以使用跳躍表法,使程序能根據(jù)不同的條件轉(zhuǎn)移到多個(gè)程序分支中去。變址尋址方式、寄存器間接尋址方式基址變址尋址方式實(shí)現(xiàn)跳躍表法的程序。DATASEGMENT;定義數(shù)據(jù)段BRTABDATADW

R11DW

R21DW

R31DW

R41DW

R51DW

R61DW

R71DW

R81ENDS;子程序R1入口偏移地址,段地址STACKSEGMENT

PARASTACK‘STACK’

;定義堆棧段DB100

DUP

(?)TOPEQU$-STACKSTACKENDSCODESEGMENT;定義代碼段STARTPROC

FARASSUMEDEGIN:

PUSHCS:CODE,DS:DATA,

SS:STACKDSMOVAX,

0;DS:00壓棧PUSHAX;使程序能返回DOSMOVAX,

DATAMOVDS,

AX;置數(shù)據(jù)段MOVAX,

STACMOVSS,

AX;置堆棧段MOVAX,

TOPMOVSP,

AX;置棧頂指針LEAGTBIT:

RCRBX,

BRTABAL,

1;BX指向跳轉(zhuǎn)表JCGETAD;順序檢查AL中各位的狀態(tài)INCBX;BX加2,指向跳轉(zhuǎn)表中INCBX;下一個(gè)子程序地址JMPGTBITGETAD:JMPWORD

PTR

[BX];轉(zhuǎn)移到相應(yīng)的子程序START

ENDP

CODE

ENDSEND

BEGIN基址變址尋址方式;循環(huán)次數(shù)8送cxlea

bx,

BRTABmov

si,7*type

branch_tablemov

cx,8l:shl

al,1jnb

not_yetjmp

word

ptr[bx][si];把a(bǔ)l邏輯左移1位;CF=0轉(zhuǎn)到not_yet;CF=1轉(zhuǎn)到相應(yīng)程序分支not_yet:sub

si,type

branch_table;

修改地址loop

l ;

循環(huán)4、在附加段中,有一個(gè)按從小到大順序排列的無符號(hào)數(shù)數(shù)組,其首地址存放在DI寄存器中,數(shù)組中的第一個(gè)單元存放著數(shù)組長度。在AX中有一個(gè)無符號(hào)數(shù),要求在數(shù)組中查找(AX),如找到,則使CF=0,并在SI中給出該元素在數(shù)組中的偏移地址;如未找到,則使CF=1。折半查找算法:①

折半查找法先取有序數(shù)組的中間元素與查找值相比較,如相等則查找成功;②

如查找值大于中間元素,則再取高半部的中間元素與查找值相比較;如查找值小于中間元素,則再取低半部的中間元素與查找值相比較;如此重復(fù)直到查找成功或最終未找到該數(shù)(查找不成功)為止。③折半查找法的效率高于順序查找法,對(duì)于長度為N的表格,順查找法平均要作N/2次比較,而折半查找法的平均比較次數(shù)為log2N。所以,如果數(shù)組長度為100,則順序查找法平均要作50次比較,而折半查找法平均作7次比較就可以了。①

初始化被查找數(shù)組的首尾下標(biāo),low=1,high=n②

若low>high,則查找失敗,置CF=1,退出程序。否則,計(jì)算中點(diǎn):mid=(low+high)/2K與中點(diǎn)元素r[mid]比較。若k=r[mid],則查找成功,程序結(jié)若k<r[mid],則跳轉(zhuǎn)步驟4;若k>r[mid],則轉(zhuǎn)步驟5③

低半部分查找(lower),high=mid-1返回步驟2繼續(xù)查找。③

高半部分查找(higher),low=mid+1返回步驟2繼續(xù)查找。dseglow_idxsegmentdw?high_idx

dw?endssegmentproc

neardsegcsegb_searchassumecs:cseg,ds:dseg,es:dsegpushpushmov

mov

movpopdsaxax,dsegds,axes,axaxcmp

ax,es:[di+2]ja

chk_lastsi,es:[di+2]leaje

exitstcjmpchk_last:exitmovshladdcmpjbjestcjmpsi,es:[di]si,1si,diax,es:[si]searchexitexitsearch:mov

mov

mov

movlow_idx,1bx,es:[si]high_idx,bxbx,dimid:mov

mov

cmpjaaddshrmovshlcompare:cx,low_idxdx,high_idxcx,dxno_matchcx,dxcx,1si,cxsi,1cmpax,es:[bx+si]jeexitjahigherdeccxmovhigh_idx,cxjmpmidhigher:inccxmovlow_idx,cxjmpmidno_match:stcexit:popdsretb_searchendpcsegendsend5.3

循環(huán)結(jié)構(gòu)程序設(shè)計(jì)1、循環(huán)程序的結(jié)構(gòu)形式①

DO_WHILE結(jié)構(gòu)形式。DO_WHILE結(jié)構(gòu)把對(duì)循環(huán)控制條件的判斷放在循環(huán)的入口,先判斷條件,滿足條件就執(zhí)行循環(huán)體,否則則退出循環(huán)。②

DO_UNTIL結(jié)構(gòu)形式。先執(zhí)行循環(huán)體然后再判斷條件,不滿足則繼續(xù),否則退出循環(huán)。循環(huán)結(jié)構(gòu)程序設(shè)計(jì)(2)循環(huán)程序的結(jié)構(gòu)形式流程圖:循環(huán)結(jié)構(gòu)程序設(shè)計(jì)(3)循環(huán)程序由三部分組成:設(shè)置循環(huán)的初始狀態(tài)。設(shè)置循環(huán)次數(shù)的計(jì)數(shù)值,以及循環(huán)體正常工作而建立的初始狀態(tài)等。循環(huán)體。由循環(huán)的工作部分及修改部分組成,循環(huán)的工作部分是為完成程序功能而設(shè)計(jì)的主要程序段,循環(huán)的修改部分則是為保證每一次重復(fù)(循環(huán))時(shí),參加執(zhí)行的信息能發(fā)生有規(guī)律的變化而建立的程序段。循環(huán)控制部分。每個(gè)循環(huán)程序必須選擇一個(gè)循環(huán)控制條件來控制循環(huán)的運(yùn)行和結(jié)束。循環(huán)結(jié)構(gòu)程序設(shè)計(jì)(4)AX;00壓棧

AX,DATADS,AX

;置數(shù)據(jù)段PUSH

MOV

MOV

MOV

MOV

MOVAX,0;累加器清0CX,MAX;循環(huán)控CX=MAXBX,1;初始加數(shù)用1例1求S=1+2+3+…+100AGAIN:ADDAX,BX;累加求和DATASEGMENT;定義數(shù)據(jù)段INCBX;下一個(gè)數(shù)MAXDW100LOOPAGAIN;循環(huán)轉(zhuǎn)AGAINSUMDW?MOVSUM,

AX;求和結(jié)果存SUM中DATAENDSRETSTACKSEGMENTPARASTARTENDPSTACK;定義堆棧段CODEENDSSTACKCODEDW

20HENDSDUP(?)

END

BEGINSEGMENT;定義代碼段STARTPROCFARASSUMEBEGIN:CS:CODE,PUSHDS:DATA,

SS:STACKDS

;DS壓棧MOVAX,

0循環(huán)結(jié)構(gòu)程序設(shè)計(jì)(5)例2求N!DATA

SEGMENT;定義數(shù)據(jù)段DW

5DW

?NYYDATA

ENDSSTACKSEGMENT;定義堆棧段50H

DUP

(?);定義代碼段STACKCODESTARTDWENDSSEGMENTPROC

FARASSUME

CS:CODE,

DS:DATA,

SS:STACKBEGIN:PUSHDS;DS壓棧MOVAX,

0PUSHAX;00壓棧MOVAX,

DATAMOVDS,

AX;置數(shù)據(jù)段MOVAX,

N;

AX=NCMP AX,0;比較是否為0JNENOZ;非0轉(zhuǎn)NOZINCAX;0則AX=1JMPEXIT;轉(zhuǎn)EXITNOZ:MOVBX,

AX ;

BX=AX=NMOVAX,1

;累積AX=1AGAIN:MULBX;相乘AX*BX->AXDECBX;BX減1EXIT:MOVJNE

AGAIN;非0繼續(xù)

YY,AX;保存N!結(jié)果到Y(jié)Y中RETSTARTCODE

ENDENDPENDSBEGIN循環(huán)結(jié)構(gòu)程序設(shè)計(jì)(6)VARADW500;

minVARBDW?VARCDW?DATASTACKENDSSEGMENT;定義堆棧段

DW

20H

DUP(?)ENDSSTACKCODESTARTSEGMENT ;定義代碼段PROC

FARASSUME

CS:CODE,

DS:DATA,SS:STACK;DS壓棧;0壓棧DSAX,

0AXAX,

DATADS,

AXDX,

VARABEGIN:

PUSHMOV

PUSH

MOV

MOV

MOV

MOV

MOV

MOVAX,0;累加器清0BX,2;加數(shù)初值

CX,0;項(xiàng)數(shù)記錄CX例3:求2+4+6+…直到和剛大于500,保存實(shí)際和及項(xiàng)數(shù)nDATA

SEGMENT;

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

AGAIN:

ADD AX,

BX

;

求和INC

CX

;項(xiàng)數(shù)記錄CX加1INCINCBXBXCMP大于VARAJGE;加數(shù)加2AX,DX

;是否EXIT

;大于、等于轉(zhuǎn)繼續(xù)

EXIT:JMP

AGAIN

;否則,VARB,AX;保存和

VARC,CX;保存項(xiàng)數(shù)nENDSMOV

MOVRETSTART

ENDP

CODEENDBEGIN循環(huán)結(jié)構(gòu)程序設(shè)計(jì)(7)例4試編制一個(gè)程序把BX寄存器內(nèi)的二進(jìn)制數(shù)用十六進(jìn)制數(shù)的形式在屏幕上顯示出來。循環(huán)結(jié)構(gòu)程序設(shè)計(jì)(9)PROGNAM

MAINSEGMENT

PROC

FAR;代碼段定義;主程序ASSUME

CS:

PROGNAMSTART:PUSH

DSSUBAX,

AX;DS:00壓棧PUSHAXMOVCH,4

;CH循環(huán)次數(shù)ROTATE:

MOVCL,

4;每次循環(huán)輸出一位十六進(jìn)制數(shù)ROLBX,

CL;即移位4個(gè)二進(jìn)制位MOVAL,

BL;

AL=BLANDAL,0FH

;取低4位ADDAL,30H

;轉(zhuǎn)變?yōu)锳SCII碼CMPAL,3AH;是否為’0’-‘9’JLPRINTIT;是轉(zhuǎn)PRINTITADDAL,7

H

;否轉(zhuǎn)為’A’-‘F’PRINTIT:MOVDL,

AL;DL=輸出字符MOVAH,

2INT21H

;調(diào)用DOS中斷,顯示字符DECCHJNZROTATE;沒循環(huán)結(jié)束,繼續(xù)RET;返回MAINENDPENDSPROGNAMEND

START循環(huán)結(jié)構(gòu)程序設(shè)計(jì)(10)例5:在ADDR單元中存放著數(shù)Y的地址,試編制一程序把Y中1的個(gè)數(shù)存入COUNT單元中。程序框圖循環(huán)結(jié)構(gòu)程序設(shè)計(jì)(11)DATAREA

SEGMENT;數(shù)據(jù)段定義ADDR

NUMBER

COUNTDW

NUMBER

DW

YDW

?DATAREA

ENDS

PROGNAMMAIN

PROCSEGMENT;代碼段定義

FARASSUME

CS:PROGNAM,

DS:DATAREASTART:

PUSH

DSSUBAX,

AX;DS:00壓棧PUSHAXMOVAX,

DATAREAMOVDS,

AX;置數(shù)據(jù)段MOVCX,

0;CX計(jì)數(shù)器清0MOVBX,

ADDRMOVAX,

[BX];取Y值給AXREPEAT:TESTAX,0FFFFHJZ

EXIT;測試AX是否為0?,是轉(zhuǎn)EXITJNS

SHIFT;符號(hào)為不為1轉(zhuǎn)SHIFTINC

CX;計(jì)數(shù)器加1SHIFT:SHLAX,

1;左移一位JMP

REPEAT;繼續(xù)找1EXIT:MOVCOUNT,

CX;保存計(jì)數(shù)值RETMAINENDPPROGNAMENDSENDS例6:學(xué)生成績統(tǒng)計(jì),要求鍵盤輸入成績、人數(shù),并統(tǒng)計(jì)優(yōu)、良中、及格和不及格各多少人。循環(huán)結(jié)構(gòu)程序設(shè)計(jì)(12)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)(13)DATASEGMENT;定義數(shù)據(jù)段STUNUM

EQU30;學(xué)生人數(shù)SCOREDB68,75,37,93,65,80,78,70,84,67;學(xué)生成績DB86,74,65,54,56,77,85,69,78,95DB69,53,77,68,88,93,84,76,77,80LT60DB0;存放不及格人數(shù)GE60DB0;存放及格人數(shù)GE70DB0;存放中人數(shù)GE80DB0;存放良人數(shù)GE90DB0;存放優(yōu)人數(shù)DATASEGMENTSTACKSEGMENT;定義堆棧段STADW20HDUP(?)TOPDW?STACKENDSCODESEGMENT;定義代碼段MAINPROCFARASSUME

CS:CODE,

DS:DATA,

SS:STACKSTART:PUSHDS;DS壓棧MOVAX,0PUSHAX;0壓棧MOVAX,DATAMOVDS,AX;置數(shù)據(jù)段循環(huán)結(jié)構(gòu)程序設(shè)計(jì)(14)MOVCX,STUNUM;取學(xué)生人數(shù)MOVBX,OFFSET

SCORE;BX指向?qū)W生成績表首地址B60:MOVAL,[BX];取出一個(gè)學(xué)生成績CMPAL,60;是否大于60JAM60;大于、等于轉(zhuǎn)M60LEASI,LT60;SI指向LT60單元INC[SI];SI加1JMPNEXT;繼續(xù)統(tǒng)計(jì)下一個(gè)成績M60:CMPAL,70;是否大于70JAM70;大于、等于轉(zhuǎn)M70LEASI,GE60;SI指向GE60單元INC[SI];SI加1JMPNEXT;繼續(xù)統(tǒng)計(jì)下一個(gè)成績M70:CMPAL,80;是否大于80JAM80;大于、等于轉(zhuǎn)M80LEASI,GE70;SI指向GE70單元INC[SI];SI加1JMPNEXT;繼續(xù)統(tǒng)計(jì)下一個(gè)成績M80:CMPAL,90;是否大于90JAM90;大于、等于轉(zhuǎn)M90LEASI,GE80;SI指向GE80單元INC[SI];SI加1JMPNEXT;繼續(xù)統(tǒng)計(jì)下一個(gè)成績M90:LEASI,GE90;SI指向GE90單元INC[SI];SI加1NEXT:INCBX;BX加1LOOPB60;沒有統(tǒng)計(jì)完,繼續(xù)RETMAINENDPENDSTART循環(huán)結(jié)構(gòu)程序設(shè)計(jì)(12)多重循環(huán)程序設(shè)計(jì)例1、延時(shí)程序DELAY:MOV

DX,3FFH;外層循環(huán)3FFH次TIME:MOVAX,0FFFFH;內(nèi)層循環(huán)FFFFH次TIME1:DECAXNOP;空操作,起延時(shí)作用

溫馨提示

  • 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)論