汇编语言(天津大学)chapter5_第1页
汇编语言(天津大学)chapter5_第2页
汇编语言(天津大学)chapter5_第3页
汇编语言(天津大学)chapter5_第4页
汇编语言(天津大学)chapter5_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第5章循环与分支程序设计学习目标:了解并掌握循环程序的构造方法,尤其是对循环控制条件的设置以及可能出现的边界情况的考虑。掌握起泡排序算法这种多重循环程序设计中的常用方法。交换标志位的设置在此算法中更能提高效率。学会在数组排序算法中采用折半查找法来提高查找效率。学会使用跳跃表法实现CASE结构。§5.1循环程序设计一、循环程序的结构形式二、循环程序设计三、多重循环程序设计一、循环程序的结构形式结束初始化控制条件Y循环体N修改部分先判断,后循环一、循环程序的结构形式初始化循环体修改部分Y控制条件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单元存放着数Y的地址,试编制一程序把Y中1的个数存入COUNT单元中开始1的个数计数器←0循环次数计数器CX←16Y左移一次CF=1NY1的个数计数器+1NCX

←CX-1=0YCOUNT

←1的个数计数器结束

循环次数固定,完全由循环计数器控制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的个数计数器←0循环次数计数器CX←161的个数计数器+1结束NNCX

←CX-1=0YCOUNT

←1的个数计数器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和未经 排序的字数组。在数组的第一个字中,存放 着该数组的长度,数组的首地址已存放在DI 寄存器中,AX寄存器中存放着一个数。要求 编制一程序:在数组中查找该数,如果找到 此数,则把它从数组中删除。循环程序设计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将正数N插入一个已升序排列的字数组的正确位置该数组的首地址和末地址分别为ARRAY_

HEAD和ARRAY_

END,其中所有的数均为正数。解法一:从数组的尾部开始比较N较大,则在比较对象后插入,结束循环N较小,则把比较对象及其后元素后移一 个字循环结束的控制:♦执行插入操作后结束循环若N比所有元素都小,扫描整个数组后仍无法结束循环,将-1加 在数组前可解决该问题32DHE

E-

A2D3,

37,

49,N15,2♦

-

23♦,

3

37,

49,15,2

2,将N放在K的位置修改地址K后移一个字单元结束开始(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将正数N插入一个已升序排列的字数组的正确位置。该数组的首地址和末地址分别为ARRAY_

HEAD和

ARRAY_

END,其中所有的数均为正数。解法二:从数组的头部开始比较N较小,则在比较对象前插入,结束循环N较大,则把比较对象及其前元素前移一循环结束的控制:♦个字可扫描整个数组,循环次数为数组元素个数执行插入操作后结束循环若N比所有元素都小,形成新的头;若N比所有元素都大,则被 置于尾部例5.4

例5设有数组X(X1,…,X10)和Y(Y1,…,Y10),编程计算数组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的缓冲区中(空格符不存入),直到接收到第二个空格符时退出程序。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三、多重循环程序设计例5.7有一个首地址为A的N字数组,请编制程序使该数组中的数按照从大到小的次序整序➢冒泡法从第一个元素开始,依次对相邻的两个元素进行比较,使前一个元素不大于后一个元素;将所有元素比较完之后,最大的元素排到了最后;然后,除掉最后一个元素之外的元素依上述方法再进行比较,得到次大的元素排在后面;如此重复,直至完成就实现元素从小到大的排序➢这需要一个双重循环程序结构冒泡法的排序序号数比

较遍

数123413232161582851615815316158161641583232325885

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论