汇编语言程序设计基本技术(2)_第1页
汇编语言程序设计基本技术(2)_第2页
汇编语言程序设计基本技术(2)_第3页
汇编语言程序设计基本技术(2)_第4页
汇编语言程序设计基本技术(2)_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

1、第4章 循环与分支程序设计4.1 分支分支程序设计程序设计4.2 循环循环程序设计程序设计编制汇编语言程序的步骤:编制汇编语言程序的步骤:(1) 分析题意,确定算法(2) 根据算法画出程序框图(3) 根据框图编写程序(4) 上机调试程序4.1 分支程序设计 分支实现的基本方法有两种分支实现的基本方法有两种:一种是利用比较转转一种是利用比较转转移指令实现分支;一种是利用跳转表实现分支。移指令实现分支;一种是利用跳转表实现分支。 视视比较对象,正确选择合适的转移指令。比较对象,正确选择合适的转移指令。 要为每个分支安排正确出口。要为每个分支安排正确出口。 凡是可共用的部分,应尽量放在公共程序段中以

2、凡是可共用的部分,应尽量放在公共程序段中以使程序简短。使程序简短。 在调试分支程序时,应使用多组数据,分别对各在调试分支程序时,应使用多组数据,分别对各种分支进行反复测试。种分支进行反复测试。4.1 分支程序设计堆栈段数据段代码段 汇编语言程序框架汇编语言程序框架 stack SEGMENT PARA stack ;定义作为堆栈段的逻辑段,段名为stack DB 100 DUP(?) ;定义堆栈长度 top LABLE word ;定义栈底位置 stack ENDS data SEGMENT ;定义作为数据段的逻辑段,段名为data data ENDS code SEGMENT ;定义作为代码

3、段的逻辑段,段名为;定义作为代码段的逻辑段,段名为code ASSUME CS:code, DS:data, ES:data, SS:stack start: MOV AX, data ;程序执行起始点程序执行起始点 MOV DS, AX MOV ES, AX;将各个段寄存器指向用户定义的各个逻辑段;将各个段寄存器指向用户定义的各个逻辑段 ;MOV AX,stack ;MOV SS, AX ;MOV SP, OFFSET TOP MOV AL, 4CH ;系统功能调用,程序结束返回操作系统;系统功能调用,程序结束返回操作系统OS INT 21H code ENDS END start ;汇编结

4、束,程序起始点为汇编结束,程序起始点为start4.1 分支程序设计例例1: 缓冲区BUF中存在两个不等的无符号数,比较其大小,将大数存入MAX单元,小数据存入MIN单元4.1 分支程序设计例例2: 从键盘输入一个字符,判断这个字符是否为0到9之间的数字,如果是,输出“is a number!”;如不是,则输出“is not a mumber!”例例3. 某工某工厂的产品有厂的产品有8种不同的加工处理程序种不同的加工处理程序P0P0P7P7,根据键盘输入,做不同的处理,若是,根据键盘输入,做不同的处理,若是0 07 7以以外的键,则退出加工处理。外的键,则退出加工处理。 此例可以用两种方法实现

5、此例可以用两种方法实现: :一种是用一种是用逐一比较逐一比较判断判断, ,逐次比较逐次比较转移实现二叉分支、整体上实现转移实现二叉分支、整体上实现多分支多分支; 另一种是另一种是跳转表法跳转表法,直接实现多分支。直接实现多分支。方法一方法一逐一比较法逐一比较法。INPUT DB INPUT DB Input( 0 Input( 07): $7): $ LEA DX , INPUT LEA DX , INPUT MOV AH , 9 MOV AH , 9 INT 21H INT 21H MOV AH , 1MOV AH , 1 INT 21H INT 21H CMP AL , CMP AL ,

6、0 0 JE P0 JE P0 CMP AL ,CMP AL , 1 1 JE P1 JE P1 CMP AL , CMP AL , 2 2 JE P2 JE P2 CMP AL ,CMP AL , 3 3 JE P3 JE P3 CMP AL , CMP AL , 4 4 JE P4 JE P4 CMP AL ,CMP AL , 5 5 JE P5 JE P5 显示提示等待键入一个字符为0字符则转P0为1字符则转P1 CMP AL ,CMP AL , 6 6 JE P6 JE P6 CMP AL ,CMP AL , 7 7 JE P7 JE P7 JMP DOWNJMP DOWN ;不是;不

7、是0 07 7则退出程序则退出程序P0: MOV DL ,P0: MOV DL , 0 0 JMP EXIT JMP EXITP1: MOV DL ,P1: MOV DL , 1 1 JMP EXIT JMP EXIT P7: MOV DL ,P7: MOV DL , 7 7 JMP EXIT JMP EXITEXIT: MOV AH ,2EXIT: MOV AH ,2 INT 21H INT 21HDOWN: RET DOWN: RET ;分支程序一定要注意汇合到结束处;分支程序一定要注意汇合到结束处 键入0则显示0以替代P0程序键入1则显示1以替代P1程序方法一简单,条理清楚,易于实现,但

8、转移范方法一简单,条理清楚,易于实现,但转移范围只能是:围只能是:128128127127。方法二:方法二:跳转表法跳转表法。 利用无条件的间接转移指令可实现远距离的多分支利用无条件的间接转移指令可实现远距离的多分支( (间接间接跳转至不同分支的入口处跳转至不同分支的入口处) ) 。 在数据区造一地址表、存放不同的分支入口地址;在数据区造一地址表、存放不同的分支入口地址; 设表的首地址为设表的首地址为PTABPTAB,每一个,每一个 PTAB P0PTAB P0入口地址占一个字单元,入口地址占一个字单元, 2 P12 P1PPi i的入口地址的入口地址PTABPTAB2 2i i 4 P24

9、P2若将若将2 2i iBXBX,则,则JMP PTABBXJMP PTABBX : 可转到可转到P Pi i入口处。入口处。INPUT DB INPUT DB INPUT INPUT(0 07 7):):$ $ PTAB DW P0,P1,P2,P3,P4,P5,P6,P7 PTAB DW P0,P1,P2,P3,P4,P5,P6,P7 ;定义地址表;定义地址表 LEA DX , INPUT LEA DX , INPUT MOV AH , 9 MOV AH , 9 INT 21H INT 21H MOV AH , 1 MOV AH , 1 INT 21H INT 21H CMP AL ,CM

10、P AL , 0 0 JB EXIT JB EXIT CMP AL CMP AL , 7 7 JA EXIT JA EXIT AND AX AND AX ,0FH0FH ADD AX ADD AX ,AX AX MOV BX MOV BX ,AXAX JMP PTABBXJMP PTABBX ;EXITEXIT:RETRET 显示提示等待键入07的数字检查输入数据,不是07则退出i2BX(PTAB2i)PiIP 循环 按照一定规律按照一定规律, ,多次重复执行一串指令多次重复执行一串指令一、循环程序的结构一、循环程序的结构 和高级语言一样和高级语言一样, ,循环程序一般由循环程序一般由四部分组

11、成:四部分组成: 循环准备循环准备 初始化初始化,为保证循环能正常进行而做的必,为保证循环能正常进行而做的必要的准备。要的准备。 主要包括:主要包括:建立地址指针,置计数初值,设置某些必建立地址指针,置计数初值,设置某些必要的常数,对工作寄存器及工作单元置初值或清要的常数,对工作寄存器及工作单元置初值或清0 0等。等。 循环体循环体 重复重复执行的部分,循环的核心。执行的部分,循环的核心。 循环的修改循环的修改 为下一轮循环作准备为下一轮循环作准备,包括,包括修改修改计数计数 器、寄存器、地址指针、恢复某些参数。器、寄存器、地址指针、恢复某些参数。4.2 循环程序设计循环程序设计循环控制循环控

12、制 控制循环正常结束,判断循环是否结束,控制循环正常结束,判断循环是否结束, 或继续。或继续。任何循环都包括上述四部分,但各部分界线并不很清楚。任何循环都包括上述四部分,但各部分界线并不很清楚。具体结构流程和高级言一样有两种:具体结构流程和高级言一样有两种:直到型、当型。直到型、当型。 DO-WHILE 结构结构 DO-UNTIL 结构结构控制条件控制条件 初始化初始化循环体循环体 YN控制条件控制条件初始化初始化 循环体循环体YN4.2 循环程序设计循环程序设计初始化初始化:设置循环的初始状态设置循环的初始状态循环体:循环的工作部分及修改部分循环体:循环的工作部分及修改部分控制条件:控制条件

13、: 计数控制计数控制 特征值控制特征值控制 地址边界控制地址边界控制例例1:在数据段的:在数据段的ARRY存储区中存放有存储区中存放有100个字数据,计算这个字数据,计算这100个数据的和,并将其存放在个数据的和,并将其存放在SUM单元中单元中 MOV CX, 100 ;循环次数送;循环次数送CX MOV SI, OFFSET ARRAY ;置地址指针初始值;置地址指针初始值 MOV AX, 0 ;累加器初始化累加器初始化 LOOP1: ADD AX, SI ;累加累加 ADD SI,2 ;修改地址指针修改地址指针 LOOP LOOP1 ;修改计数器指针,判断循环修改计数器指针,判断循环 是否

14、结束是否结束 MOV SUM, AX MOV AH, 4CH INT 21H例例2:把:把 BX 中的二进制数以十六进制的形式显示在屏幕上中的二进制数以十六进制的形式显示在屏幕上 mov ch, 4rotate: mov cl, 4 rol bx, cl mov al, bl and al, 0fh add al, 30h ; 09 ASCII 30H39H cmp al, 3ah jl printit add al, 7h ; AF ASCII 41H46Hprintit: mov dl, al mov ah, 2 int 21h dec ch jnz rotate 4.2 循环程序设计循环

15、程序设计多重循环程序设计多重循环程序设计 设计方法与单重循环设计的方法是一致的。注意:分别考虑各重循环的控制条件; 外循环再次进入内循环时,初始条件必须重新设置。多重循环程序设计多重循环程序设计 即循环体内再套有循环。即循环体内再套有循环。例例. .对对N N个字节个字节符号数符号数降序降序排列(大排列(大小)小)N-1N-1轮轮 2 3 2 3 1 41 4 4 2 4 2 1 331 33次次外计数外计数 4 3 4 3 1 221 22次次 DX 4 3 2 -11DX 4 3 2 -11次次内循环内循环CXCXl采用逐一比较法,即将第一个数与其后的N-1个数逐一比较,将最大数放在第一个单元;l第二轮从第二个数开始比较,将次大数放在第二个单元;经N-1轮比较,便已排序。l在每一轮的比较中总是将 maxAL。l内循环次数依赖于外循环。BUF DB 2 ,3 ,-1 ,4,0,5COUNT EQU $-BUF MOV SI ,OFFSET BUF 外循环初始

温馨提示

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

评论

0/150

提交评论