匯編語言(天津大學(xué))chapter5_第1頁
匯編語言(天津大學(xué))chapter5_第2頁
匯編語言(天津大學(xué))chapter5_第3頁
匯編語言(天津大學(xué))chapter5_第4頁
匯編語言(天津大學(xué))chapter5_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第5章循環(huán)與分支程序設(shè)計學(xué)習(xí)目標(biāo):了解并掌握循環(huán)程序的構(gòu)造方法,尤其是對循環(huán)控制條件的設(shè)置以及可能出現(xiàn)的邊界情況的考慮。掌握起泡排序算法這種多重循環(huán)程序設(shè)計中的常用方法。交換標(biāo)志位的設(shè)置在此算法中更能提高效率。學(xué)會在數(shù)組排序算法中采用折半查找法來提高查找效率。學(xué)會使用跳躍表法實現(xiàn)CASE結(jié)構(gòu)?!?.1循環(huán)程序設(shè)計一、循環(huán)程序的結(jié)構(gòu)形式二、循環(huán)程序設(shè)計三、多重循環(huán)程序設(shè)計一、循環(huán)程序的結(jié)構(gòu)形式結(jié)束初始化控制條件Y循環(huán)體N修改部分先判斷,后循環(huán)一、循環(huán)程序的結(jié)構(gòu)形式初始化循環(huán)體修改部分Y控制條件N結(jié)束先循環(huán),后判斷prognam

segmentassume

cs:prognamstart:movrotate:ch,4movcl,4rolbx,clmoval,blandal,0fhaddal,30hcmpal,3ahjlprintitaddal,7hprintit:mov

dl,almov

ah,2int

21hdec

chjnz

rotatemov

ah,4chint

21hprognam

endsend

start例5.2

在ADDR單元存放著數(shù)Y的地址,試編制一程序把Y中1的個數(shù)存入COUNT單元中開始1的個數(shù)計數(shù)器←0循環(huán)次數(shù)計數(shù)器CX←16Y左移一次CF=1NY1的個數(shù)計數(shù)器+1NCX

←CX-1=0YCOUNT

←1的個數(shù)計數(shù)器結(jié)束

循環(huán)次數(shù)固定,完全由循環(huán)計數(shù)器控制SEGMENTDW

1234HDATAYADDR

COUNT

DATA

CODEDW

YDB

?ENDSSEGMENTASSUME

CS:CODE,DS:DATAMOV

AX,DATAMOV

DS,AXMOV

DL,0MOV

BX,ADDRMOV

AX,[BX]MOV

CX,16START:REPEAT:SHL

AX,1JNC

NEXTINC

DLNEXT:

LOOP

REPEATEXIT0:

MOV

COUNT,DLMOV

AH,4CHINT

21HCODE

ENDS?????????END

START例5.2開始1的個數(shù)計數(shù)器←0循環(huán)次數(shù)計數(shù)器CX←161的個數(shù)計數(shù)器+1結(jié)束NNCX

←CX-1=0YCOUNT

←1的個數(shù)計數(shù)器Y=0NY左移一次YCF=1

Y例5.2SEGMENTDW

1234HDATAYADDR

COUNT

DATA

CODEDW

YDB

?ENDSSEGMENTASSUME

CS:CODE,DS:DATAMOV

AX,DATAMOV

DS,AXMOV

DL,0MOV

BX,ADDRMOV

AX,[BX]MOV

CX,16START:REPEAT:?????????CMP

AX,0JZ

EXIT0SHL

AX,1JNC

NEXTINC

DLCODE

ENDSEND

START例5.2NEXT:

LOOJPMRPERPEPAETAT

EXIT0:

MOV

COUNT,DLMOV

AH,4CHINT

21H例在附加段中,有一個首地址為LIST和未經(jīng) 排序的字?jǐn)?shù)組。在數(shù)組的第一個字中,存放 著該數(shù)組的長度,數(shù)組的首地址已存放在DI 寄存器中,AX寄存器中存放著一個數(shù)。要求 編制一程序:在數(shù)組中查找該數(shù),如果找到 此數(shù),則把它從數(shù)組中刪除。循環(huán)程序設(shè)計del_ul

proc

nearcldpush

dimov

cx,es:[di]add

di,2repne

scaswje

deletepop

dijmp

short

exitdelete:jcxz

dec_cntnext_el:mov

bx,ex:[di]mov

es:[di-2],bxadd

di,2loop

next_eldec_cnt:pop

didec

word

ptr

es:[di]exit:retdel_up

endp例5.4將正數(shù)N插入一個已升序排列的字?jǐn)?shù)組的正確位置該數(shù)組的首地址和末地址分別為ARRAY_

HEAD和ARRAY_

END,其中所有的數(shù)均為正數(shù)。解法一:從數(shù)組的尾部開始比較N較大,則在比較對象后插入,結(jié)束循環(huán)N較小,則把比較對象及其后元素后移一 個字循環(huán)結(jié)束的控制:?執(zhí)行插入操作后結(jié)束循環(huán)若N比所有元素都小,掃描整個數(shù)組后仍無法結(jié)束循環(huán),將-1加 在數(shù)組前可解決該問題32DHE

?

E-

A2D3,

37,

49,N15,2?

-

23?,

3

37,

49,15,2

2,將N放在K的位置修改地址K后移一個字單元結(jié)束開始(ARRAY_HEAD-2)←-1初始化變址寄存器SIYK<=NN例5.4Datareaxsegmentdw

?Array_head

dw3,5,15,23,37,49dw

105dw

32endssegmentArray_endnDatareaProgramassumecs:program,ds:datareaStart:mov

ax,datareamov

ds,axmov

ax,n???mov

array_head-2,mov

si,0??Insert:

mov??array_end[si+2],axmov

ah,4chint

21hProgram

ends?end

start例5.4Comp:?cmpovarbrxa,ya_rernady[_sein]d,[asxi]?

cmp

bjxl,eaixnsert?

jle

imnosvebrxt,array_end[movarray_end[si+2],bxsub

si,2jmp

comp例5.4將正數(shù)N插入一個已升序排列的字?jǐn)?shù)組的正確位置。該數(shù)組的首地址和末地址分別為ARRAY_

HEAD和

ARRAY_

END,其中所有的數(shù)均為正數(shù)。解法二:從數(shù)組的頭部開始比較N較小,則在比較對象前插入,結(jié)束循環(huán)N較大,則把比較對象及其前元素前移一循環(huán)結(jié)束的控制:?個字可掃描整個數(shù)組,循環(huán)次數(shù)為數(shù)組元素個數(shù)執(zhí)行插入操作后結(jié)束循環(huán)若N比所有元素都小,形成新的頭;若N比所有元素都大,則被 置于尾部例5.4

例5設(shè)有數(shù)組X(X1,…,X10)和Y(Y1,…,Y10),編程計算數(shù)組Z

(Z1,…,Z10),其中:Z1

=

X1

+

Y1

Z2

=

X2

+

Y2

Z3

=

X3

-

Y3

Z4

=

X4

-

Y4

Z5

=

X5

-

Y5

Z6

=

X6

+

Y6

Z7

=

X7

-

Y7

Z8

=

X8

-

Y8

Z9

=

X9

+

Y9Z10

=

X10

+

Y10datarea

segmentx

dwx1,x2,x3,x4,x5,x6.x7,x8,x9,x10y

dwy1,y2,y3,y4,y5,y6,y7,y8,y9,y10logic_rule

dw

00dchdatareaprognamassumeendssegmentcs:prognam,ds:datareastart:mov

ax,datareamov

ds,axmov

bx,0mov

cx,10mov

dx,logic_rulenext:movshrz

dw

z1,z2,z3,z4,z5,z6,z7,z8,z9,z10

jcax,x[bx]dx,1subtractax,y[bx]addjmp

short

resultsubtract:subresult:movaddax,y[bx]z[bx],axbx,2loop

nextmovintah,4ch21hprognamendsend

start例5.5試編制一程序:從鍵盤輸入一行字

符,要求第一個鍵入的字符必須是空格符, 如不是,則退出程序;如是,則開始接收

鍵入的字符并順序存放在首地址為BUFFER的緩沖區(qū)中(空格符不存入),直到接收到第二個空格符時退出程序。datareabufferflagdatareaprognamassumesegmentdb

80

dup(?)db

?endssegmentcs:prognam,ds:datareastart:mov

ax,datareamov

ds,axlea

bx,buffermov

flag,0next:

movintah,0121htest

flag,01hjnz

followcmp

al,20hjnz

exitmov

flag,1jmp

nextfollow:

cmp

al,20hjz

exit

mov

[bx],alinc

bxjmp

nextexit:

mov

ah,4chint

21hprognam

endsend

start三、多重循環(huán)程序設(shè)計例5.7有一個首地址為A的N字?jǐn)?shù)組,請編制程序使該數(shù)組中的數(shù)按照從大到小的次序整序?冒泡法從第一個元素開始,依次對相鄰的兩個元素進(jìn)行比較,使前一個元素不大于后一個元素;將所有元素比較完之后,最大的元素排到了最后;然后,除掉最后一個元素之外的元素依上述方法再進(jìn)行比較,得到次大的元素排在后面;如此重復(fù),直至完成就實現(xiàn)元素從小到大的排序?這需要一個雙重循環(huán)程序結(jié)構(gòu)冒泡法的排序序號數(shù)比

較遍

數(shù)123413232161582851615815316158161641583232325885

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論