第06章 分支与循环程序设计(川大汇编语言)_第1页
第06章 分支与循环程序设计(川大汇编语言)_第2页
第06章 分支与循环程序设计(川大汇编语言)_第3页
第06章 分支与循环程序设计(川大汇编语言)_第4页
第06章 分支与循环程序设计(川大汇编语言)_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

第六章分支与循环程序设计

6.1概述6.1.1汇编语言程序设计的步骤和特点

①分析问题,确定算法不管使用何种语言设计程序,这一环节是最重要且最容易被忽略的。这很象写作文时的审题,搞不好就会是“下笔千言,离题万里”。8086汇编语言程序设计1②合理组织数据除了处理计算用数据外,计算机处理的并不是要解决的问题本身,而是处理代表这些问题的数据。如何用数据代表要处理的问题?这就是数据组织问题。数据是否代表了要处理的问题,数据的组织是否方便程序处理?这就是数据组织是否合理的基本标准。数据组织得好,处理数据的程序就会相对简单、清晰,相反会使程序变得很复杂和没有条理。所以,数据的组织是程序总体设计的的重要内容。8086汇编语言程序设计2③编制流程使用流程图规划程序可以使程序的线条清晰,修改代价小,便于和非专业人员讨论。④过程定义如果把整个程序看作是一幢大楼,那么基于流程图分解出的过程就是建筑这幢大楼的预制件。过程是程序整体功能的分头实现;好的程序应该由功能和层次划分合理的过程组成。8086汇编语言程序设计3⑤合理使用寄存器一般来说,能使用寄存器就不用存储器单元;

SI和DI用于存储器寻址;

CX用于循环控制;无须DX作端口访问时,DX辅助AX作数据处理;寻址任务重,BX参与寻址,否则参与数据处理。8086汇编语言程序设计46.1.2程序的基本结构

顺序结构顺序结构示意图AB8086汇编语言程序设计5②分支结构分支结构示意图ABYN?8086汇编语言程序设计6③循环结构循环结构示意图YN?DO8086汇编语言程序设计7例:将一位16进制数转换成对应的ASCⅡ码数据段核心语句:

:TABLEDB30H,31H,….,39H,41H,….,46H :6.2

顺序结构的程序设计8086汇编语言程序设计8代码段核心语句: :

LEA BX,TABLE MOV AL,HEX XOR AH,AH ADD BX,AX MOV AL,[BX] :可以看出,顺序结构依然可以是“智能”的。8086汇编语言程序设计9使用“换码”指令程序可以简化成: :

LEA BX,TABLE MOV AL,HEX XLAT :

XLAT的功能是:

AL←((BX)+(AL))8086汇编语言程序设计10

配合标志寄存器的各种转移指令,是计算机智能的核心所在。转移指令的实质是对指令指针CS:IP的修改。6.3.1无条件转移指令

JMP 目标地址目标地址使用标号。无条件转移指令有段内、段间和间接无条件转移四种类型。6.3

分支结构的程序设计8086汇编语言程序设计11JMP指令多用于配合条件转移指令形成分支结构:

CMP AL,0 JNC POS MOV AH,0

JMP EXIT

POS: MOV AH,1EXIT:

………8086汇编语言程序设计12JMP指令的四种跳转类型:①段内直接转移:编译(汇编)之后操作数的变化:

成为与目标地址差的“位移量”(补码);

优化编译(短转移和长转移)。②段内相对转移:指令将16位通用寄存器或字类型内存单元中的数据用作目标地址偏移量。8086汇编语言程序设计13③段间直接: 目标段的偏移量送IP; 目标段的段基值送CS。④段间间接转移:

JMPDWORDPTR当前段变量存储转移目标的地址指针。8086汇编语言程序设计146.3.2条件转移指令配合标志位,是现代计算机智能的物理基础。

JXX 目标地址XX表示转移条件;目标地址使用标号。

8086CPU条件转移指令有如下三类:

单条件转移指令;

无符号数条件转移指令;

带符号数条件转移指令。8086汇编语言程序设计15指令助忆符转移条件功能描述JCCF=1JumpCarryJNCCF=0JumpNotCarryJOOF=1JumpOverflowJNOOF=0JumpNotOverflowJP/JPEPF=1JumpParityorJumpParityEvenJNP/JPOPF=0JumpNotParityorJumpParityOddJSSF=1JumpSign(negative)JNSSF=0JumpNoSign(positive)JZZF=1JumpZeroJNZZF=0JumpNotZero①单条件转移指令8086汇编语言程序设计16②无符号数条件转移指令指令助忆符转移条件功能描述JE/JZZF=1JumpEqualorJumpZeroJNE/JNZZF=0JumpNotEqualorJumpNotZeroJA/JNBECF=0andZF=0JumpAboveorJumpNotBeloworEqualJAE/JNBCF=0JumpAboveorEqualorJumpNotBelowJB/JNAECF=1JumpBeloworJumpNotAboveorEqualJBE/JNACF=1orZF=1JumpBeloworEqualorJumpNotAbove上述条件转移指令中有两条用到了复合条件,功能更强;另外四条和单条件转移指令的功能完全一样,同一指令有多个命名旨在提高代码的可读性。8086汇编语言程序设计17③带符号数条件转移指令指令助忆符转移条件功能描述JE/JZZF=1JumpEqualorJumpZeroJNE/JNZZF=0JumpNotEqualorJumpNotZeroJG/JNLEZF=0andSF=OFJumpGreaterorJumpNotLessorEqualJGE/JNLSF=OFJumpGreaterorEqualorJumpNotLessJL/JNGESF≠OFJumpLessorJumpNotGreaterorEqualJLE/JNGZF=1orSF≠OFJumpLessorEqualorJumpNotGreater

在8086CPU的指令系统中,所有条件转移指令实现的流程转移均为段内短转移。如果分支结构过大,可结合无条件转移指令来增大转移范围。8086汇编语言程序设计18JCXZ指令:

JCXZ指令所判断的条件不是标志位的状态,而是CX寄存器中的数据:若(CX)=0,则转移至目标地址,否则顺序执行。JCXZ常用作下述结构的循环控制:NEXT:

JCXZ OK …… DEC CX JMP NEXTOK:

8086汇编语言程序设计196.3.3分支程序设计举例 例7.3.1关键点:使用带符号数条件转移指令。

CMPAL,0 ;条件判断

JGL1 ;如果用错指令将会怎样? MOVBL,0FFH

;第二分支入口

JMPL2L1: MOVBL,0

;第一分支入口L2: …… 8086汇编语言程序设计20例7.3.2 CMP AL,AH JNA L1 MOV BH,0 JMP L3L1:CMP AL,BL JNA L2 MOV BH,1 JMP L3L2: MOV BH,2L3: ……8086汇编语言程序设计21

多次重复的操作,比如将1000个字节清0,如果不用循环结构,将写上1000条语句。6.3.1循环控制指令①LOOP指令格式:LOOP 目的地址指令功能:(CX)←(CX)-1;若(CX)≠0,跳转至目的地址;否则退出循环。6.3循环程序设计8086汇编语言程序设计22

②LOOPZ指令格式:LOOPZ 目的地址指令功能:(CX)←(CX)–1;若(CX)≠0

且ZF=1,跳转至目的地址;否则退出循环。③LOOPNZ

指令格式:LOOPNZ 目的地址指令功能:(CX)←(CX)–1;若(CX)≠0

且ZF=0,跳转至目的地址;否则退出循环。8086汇编语言程序设计236.3.2循环程序的结构

①DO-UNTIL和DO-WHILE结构 ②循环程序段的组成部分 初始化部分; 循环体; 循环控制部分(LOOP等); 结束处理部分。8086汇编语言程序设计24例7.5.1

数据段部分:DATA SEGMENTARRY DB75,82,64,50,70,45,90LENGTH EQU$-ARRYNUM DB?DATA ENDS

8086汇编语言程序设计25例7.5.1

代码部分:

XOR

AL,AL ;统计计数器清0

LEABX,ARRY ;BX指向ARRY首地址

MOVCX,LENGTH ;初始化循环计数器

JCXZL1 ;若计数值为0则退出循环L2: CMP[BX],60 JLL3 INCAL ;若成绩大于等于60,则计数加1L3:INCBX ;BX指向ARRY数组中下一字节

LOOPL2 ;(CX)减1后不为0则继续循环L1: MOVNUM,AL ;保存统计结果8086汇编语言程序设计26例7.5.2

数据段部分DATA SEGMENTSTR1 DB‘BBCABCDAC’LEN EQU$-STR1POS1 DB?DATA ENDS8086汇编语言程序设计27例7.5.2

代码段关键语句: MOVBX,-1 ……L2:INCBX;BL存储搜寻结果 CMPSTR1[BX],‘A’ LOOPNZL2 L1: JZL3 ;检验是否查找成功8

温馨提示

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

评论

0/150

提交评论