汇编语言程序的设计-分支结构
实验二 分支结构程序设计实验

实验二 分支结构程序设计实验1、实验目的和要求:掌握汇编语言分支程序的设计方法;2、实验内容:编程序求分段函数Y 的值。
已知变量X 为16位带符号数, 分段函数的值要求 保存到字单元Y 中。
函数定义如下:1 (当X>0)Y = 0 (当x=0)—1 (当X<0)3、实验仪器与器材:计算机及EMU8086汇编软件等。
4、实验原理:分支结构的程序设计方法的关键在于构造合适的分支条件和分析程序流程,根据不同的程序流程选择适当的分支语句。
分支结构适合于带有逻辑或关系比较等条件判断的计算,设计这类程序时往往都要先绘制其程序流程图,然后根据程序流程写出源程序,这样做把程序设计分析与语言分开,使得问题简单化,易于理解。
程序流程图是根据解题分析所绘制的程序执行流程图。
5、实验过程与测试数据(含电路图/程序流程框图):6、实验分析:自己分析7、实验体会:自己总结实验参考程序:DATA SEGMENTX DW -128Y DW ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA START: MOV AX,DATAMOV DS,AXMOV AX,XCMP AX,0JG ISPNJZ ISZNMOV Y,-1JMP FINISHISPN: MOV Y,1JMP FINISHISZN: MOV Y,0FINISH: MOV AH,4CHINT 21HCODE ENDSEND START思考题:把程序修改成如下的分段函数的值—1 (当X>=0)Y=1 (当X<0)。
汇编语言分支结构程序设计技巧

《 编语 言程 序 设 计 》 高 等 院 校计 算 机 专 业 教 学 体 系 中的 汇 是 门重 要 的专 业 基 础 课 程 r1 汇编 语 言是 能 够 充 分 发 挥计 算 机 1。 所 有硬 件 特 性 并 能 直 接 控 制 硬 件 的 最 快 、 有 效 的语 言 。 和 计 最 它 算 机 的 硬 件 系 统 紧 密 联 系 .本 文 主 要 讨 论 8 8/0 8的 汇 编 语 0 68 8 言 。汇 编 语 言 是 结 构 化 的 『1结 构 化 编程 技 术 简 化 了程 序 实 现 , 2,
一
指 令 的通 用格 式是 : 件 标 号 , 件 转 移 指 令 的 功 能 是 : 果 J条 条 如 条 件 成 立 , 转 到 标 号 所 标 明 的指 令 去 执 行 ; 果 条 件 不 成 立 , 则 如 则顺序执行。 由此 可 以得 到 , 号 处 是 ” ” 标 Y 分支 , 紧跟 条件 转 移 指
这 里我 们 以这 样 的一 个 例 子 为 例 进 行 介 绍 : 已定 义 了 两个 整 数 变 量 A和 B. 编 写程 序完 成 以下 功 能 : 试 1 若 两 个 数 中 有 一 个 是 奇 数 , 将 奇 数 存 入 A 中 , 数 存 ) 则 偶
入 B中。
2 若 两个 数 均 为 奇 数 . 将 两 数 均 加 l 存 回原 变量 。 ) 则 后 3 若 两个 数 均为 偶 数 . 两 个 变 量 均 不 变 。 ) 则 首先 , 我们 对 题 意 进 行 分 析 。变 量 A 和 B的 奇偶 情 况 有 四
要 是 用条 件 转 移 指 令 来 实现 的 , 文 结 合 汇 编 语 言 中条 件 转 移 指 令 的特 点及 作 者 多年 的 教 学 经验 提 出 了设 计 分 支结 构程 序 本
汇编语言程序设计方法

C 名字前加 下划线
从右到左 调用程序
是
SYSCALL
从右到左 被调用程序
是
STDCALL 名字前加
下划线 (注)
被调用程序
是
PASCAL 名字变大写
BASIC 名字大写
FORTRAN 名字大写
从左到右 被调用程序
是
从左到右 被调用程序
是
从左到右 被调用程序
是
12
PROTO是过程声明伪指令,用于事先声明过程的结构。它的格 式如下:
结束处理部分
AGAIN: ADD AX,CX
;从20,19,……2,1倒序累加到AX
LOOP AGAIN ;每循环一遍,CX自动减1
MOV SUM,AX ;将累加和送入SUM单元
.EXIT 0
END
初始化部分
循环结束? 是 否
工作部分 修改部分 结束处理部分
7
二、用MASM 6.x循环控制伪指令实现循环结构
.CODE
.STARTUP
MOV AL, B
IMUL AL
MOV BX,AX MOV AL,A
;BX中为B的平方
IMUL C
MOV CX,4
IMUL CX
;AX中为4AC
.IF SWORD PTR BX>=AX ;比较B的平方和4AC的大小
MOV SIGN,1
;条件成立,SIGN得到1
.ELSE
MOV SIGN,0
.IF 条件表达式 ;条件为真(非0),执行分支体
分支体
[.ELSEIF 条件表达式
分支体
;前面IF条件为假,并且当前ELSEIF条件为真执行分支体
[.ELSE
;前面IF条件为假执行分支体
第5章 汇编语言程序

Y
条件满足?
N
处理段
例5-5 设内部RAM30H,31H单元存放两个无符号数, 将大数存在31H,小数存于30H。 ORG 1000H START:CLR C MOV A,30H SUBB A,31H JC NEXT ;次序符合,返回 MOV A,30H ;交换 XCH A,31H MOV 30H,A NEXT: NOP SJMP $ END
$
5-3 分支程序
由条件转移指令构成程序判断框,形成程序分支结构。 5-3-1 单重分支程序 一个判断决策框,程序有两条出路。 两种分支结构: 例1 求R2中补码绝对值,正数不变, 影响条件 负数变补。
MOV A,R2 JNB ACC.7,NEXT;为正数? CPL A ;负数变补 INC A MOV R2,A NEXT:SJMP NEXT ;结束
五、对源程序进行交叉汇编得到机器代码; 反汇编 —— 分析现成产品的程序,要将二进制 的机器代码语言程序翻译成汇编语言源程序。
六、程序调试。
通过微计算机的串行口(或并行口)把机器代 码传送到用户样机(或在线仿真器)进行程序 的调试和运行。
5.1.3评价程序质量的标准
(1)程序的执行时间。 (2)程序所占用的内存字节数。 (3)程序的逻辑性、可读性。 (4)程序的兼容性、可扩展性。 (5)程序的可靠性。
方法二:采用除10H取余数将BCD拆开 ORG 1000H MOV A,20H; 2B 1T MOV B,#10H ; 3B 2T DIV AB ; 1B 4T ORL B,#30H ; 3B 2T MOV 22H,B ; 3B 2T ORL A,#30H; 2B 1T MOV 21H,A ; 2B 1T SJMP $ END;7条指令、16个内存字节、13个机器周期。
《汇编语言程序设计》实验指导书

实验一简单程序编制和上机过程一.实验目的1.掌握计算机常用代码的软件转换技术。
2.熟悉DEBUG软件的使用。
3.掌握简单程序的编程方法。
二.实验内容代码转换是计算机和I/O设备进行信息交换的重要技术之一。
各种I/O设备所提供和接收的数据编码不尽相同。
为了处理这些信息,计算机必须将各种不同编码形式的信息转换成别种适当的数据形式。
例如,键盘输入的数据均为ASC Ⅱ码形式存储在内存中,通常要求将其转换成相应的数据形式。
一般实现代码转换有两种方法:1.软件法利用CPU的算术逻辑运算功能,通过运算或查表实现各种数据代码间的转换。
该方法经济但速度慢。
2.硬件法利用专用代码转换集成电路进行转换。
如74LS74可把BCD码转换为七段代码。
这种方法需要硬件费用,但速度快。
本实验要求掌握软件编码转换技术。
计算机常用的代码有二进制、八进制、十六进制、BCD码、ASCⅡ码、七段码等,它们之间的相互关系如下表所示。
本次试验的内容是ASCⅡ码转换为未组合BCD码设从键盘输入十进制数的ASCⅡ码已存放在起始地址CS :150H的单元中,把它转换成未组合BCD码后,再分别存入起始地址为CS:15AH的单元中。
若输入的不是十进制数的ASCⅡ码,则相应存放结果单元的内容为“FF”。
提示:1.组合BCD码是一位十进制数字占一个字节,高半字节为0,低半字节为该十进制数字的BCD码。
ASCⅡ码转换为未组合BCD码只需减30H。
2.程序框图如下图所示。
3.程序执行前,需要在CS:150H内存缓冲区写入待转换的ASCⅡ码。
方法如下:方法一:用A命令-ACS:150 DB 35,39,30,41,32CS:155 ∧C方法二:用E 命令-ECS:150,35,39,30,41,32方法三:用F命令-FCS:150 L5 35,39,30,41,321.执行程序后检查执行结果可用D命令:-DCS:15ACS:15A 05,09,00,FF,02ASCⅡ码转换为未组合BCD码的程序流程图参考程序如下:ORG 100HMOV CX,0005HMOV DI,150HBB:MOV BL,0FFHMOV A,[DI]CMP AL,3AHJNB DONESUB AL,30HJB DONEMOV BL,ALDONE:MOV AL,BLMOV [DI+0AH],ALINC DILOOP BBINT 20HORG 150HDB 35H,39H,30H,41H,32H实验二顺序结构的程序设计一.实验目的1.掌握计算机常用代码的软件转换技术。
汇编语言程序设计

…… 跳转到出口处end
……
casen:
跳转到出口处end ……
(执行条件n成立的语句)
end 分支结束出口
图9.13 汇编语言多重分支方第式14页
2021/12/8
下面我们用相应的例子来详细的说明这两种分支结构。
例 阶跃函数
说明:这是一个典型的双分支结构,输入值大于等于0时则返回1,输入值小于0时返 回0。r1>=0?r1=0r1=1退出图9.14 阶跃函数流程图NY
//与0比较 //大于等于0则跳转到非负数处理 //小于0则返回0 //跳转到程序结束处
//大于0,则返回1
第16页
2021/12/8
3、循环程序设计
(1) 循环程序的结构形式
循环程序可以有两种结构形式,一种是WHILE_DO结构 形式;另一种是DO_UNTIL结构形式。如图9.16所示.
初始化
初始化
入口参数:R1;(有符号数) 出口参数:R1
流程图如图9.14所示。
N
Y
R1>=0 ?
r1=0
r1=1
退出
图9.14 阶跃函数流程图
第15页
2021/12/8
程序的代码如下: .PUBLIC F_Step; .CODE F_Step: .proc CMP R1,0; JGE ?negtive; R1 = 0; JMP ?Step_end; ?negtive: R1 = 1; ?Step_end: RETF; .ENDP
1.4 嵌套与递归
1、 子程序的嵌套
子程序嵌套就是指子程序调用子程序。其中嵌套的层数称为嵌套深度。图9.27表
示了三重嵌套的过程。
SUB1
主 程 序
第四章-汇编语言程序的设计

第四章汇编语言程序设计本章的汇编语言程序设计的主要容有:汇编语言程序设计概述、汇编语言程序的结构形式、汇编语言的伪指令。
(一个单片机应用系统和其它计算机系统一样,在完成一项具体工作的时候,它要按照一定的次序,去执行操作,这些操作实际上就是由设计人员,以单片机能够接受的指令编制的程序,那么无论计算机也好,单片机也好,实际上编制程序的过程,就是用计算机来反映设计者的编程思想,那么这一章中,我们将向大家介绍怎样使用单片机指令系统来编制一些应用程序。
在介绍之前,我们还是来学习汇编语言的一些基础知识)4.1 汇编语言程序设计概述1、计算机的汇编语言以助记符表示的指令,每一条指令就是汇编语言的一条语句。
(汇编语言程序设计实际上就是使用汇编指令来编写计算机程序。
汇编语言的语句有严格的格式要求)2、汇编语言的语句格式MCS-51汇编语言的语句格式表示如下:[<标号>]: <操作码> [<操作数>]; [<注释>]标号:指令的符号地址,有了标号,程序中的其它语句才能访问该语句。
①标号是由1~8个ASCII字符组成,但头一个字符必须是字母,其余字符可以是字母、数字或其它特定字符。
②不能使用汇编语言已经定义了的符号作为标号,如指令助记符、伪指令记忆符以及寄存器的符号名称等。
(同一个标号在程序中只能定义一次,不能重复定义;一条语句可以有标号,也可以没有标号,所以是否有标号,取决于程序中是否需要访问该语句。
)操作码:规定语句执行的操作容,操作码是以指令助记符表示的,是汇编指令格式中唯一不能空缺的部分。
操作数:给指令的操作提供数据或地址。
注释:是对语句或程序段的解释说明。
(在单片机中,这四个部分怎么加以区分呢?使用分界符)分界符(分隔符):用于把语句格式中的各部分隔开,以便于编译程序区分不同的指令段。
冒号(:)用于标号之后空格()用于操作码和操作数之间逗号(,)用于操作数之间,分割两个以上的操作数分号(;)用于注释之前。
分支结构在程序设计的作用

分支结构在程序设计中的作用主要体现在以下几个方面:
逻辑判断:分支结构可以根据不同的条件执行不同的代码块,从而实现程序的逻辑判断。
通过使用分支结构,程序能够根据不同的条件做出决策,从而改变程序的执行流程。
条件执行:在程序设计中,有时候需要根据不同的条件执行不同的操作。
分支结构允许程序员根据条件判断的结果来选择要执行的代码块,从而实现更加灵活的程序行为。
异常处理:分支结构可以用于实现异常处理。
当程序遇到错误或异常情况时,可以使用分支结构来处理这些情况,避免程序崩溃或出现不可预测的行为。
输入验证:在接收用户输入时,分支结构可以帮助验证输入的有效性。
根据输入的不同情况,分支结构可以执行不同的代码块,从而对无效的输入进行适当的处理。
多路选择:分支结构可以用于实现多路选择,即根据不同的条件执行不同的代码路径。
这对于需要处理多种可能情况或条件的程序来说非常有用。
总的来说,分支结构在程序设计中的作用是实现条件控制和多路选择,使得程序能够根据不同的情况做出决策,更加智能地处理问题,提高程序的灵活性和可维护性。
同时,正确使用分支结构也是保证程序逻辑正确、提高程序性能的重要手段。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5.2 分支程序设计
AD2:MOV DL,’2’;第2位为1, JMP DISP AD3:MOV DL,’3’ JMP DISP AD4:MOV DL,’4’ JMP DISP AD5:MOV DL,’5’ JMP DISP AD6:MOV DL,’6’ JMP DISP AD7:MOV DL,’7’ DISP:MOV AH,2;显示 INT 21H MOV AH,4CH ;返回DOS INT 21H CODE ENDS END START
6.1 子程序的设计方法
subt proc push push push push …… pop dx pop pop pop far ax bx cx dx
cx bx ax ret subt endp
4.子程序的参数传送
6.1 子程序的设计方法
入口参数(输入参数): 主程序提供给子程序 出口参数(输出参数): 子程序返回给主程序 参数的形式:
segx
subt
segment
proc …… ret endp …… subt …… far
subt call
main
segx
subr1 proc …… ret subr1 endp near
ends segment
…… far ptr subt ……
segy
call
code ends
segy
ends
① 数据本身(传值) ② 数据的地址(传址)
传递的方法:
① 寄存器 ② 变量 ③ 堆栈
(1)通过寄存器传送参数 最常用的一种方式,但能传递的参数有限, 适合于参数较少的情况。 需要注意:用于传递出口参数的寄存器不 能进行现场保护和恢复。
6.1 子程序的设计方法
6.1 子程序的设计方法
6.1 子程序的设计方法
例:用地址表法编写程序实现从低到高逐位检测 一个字节数据,找到第一个非0的位数。检测时, 为0,则继续检测;为1,则转移到对应的处理程 序段显示相应的位数。
DATA SEGMENT NUM DB 78H ADTAB DW AD0,AD1,AD2,AD3,AD4,AD5,AD6,AD7;地址 表 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX
过程名(子程序名)为符合语法的标识符
NEAR属性(段内近调用)的过程只能被相同代码段的 其他程序调用,主程序和子程序在同一代码段 FAR属性(段间远调用)的过程可以被相同或不同代码 段的程序调用,主程序和子程序不在同一代码段
code segment
main proc …… call …… ret endp far subr1
1.双分支结构 典型的双分支结构程序的流程图:
条件成立跳转执行第2个分 支语句体,否则顺序执行第 1个分支语句体。注意第1 个分支体后一定要有一个 JMP指令跳到第2个分支体 后
5.2 分支程序设计
5.2 分支程序设计
条件成立跳转,否则顺 序执行分支语句体; 注意选择正确的条件 转移指令和转移目标 地址
第6章 子程序结构
把功能相对独立的程序段单独编写和调试, 作为一个相对独立的模块供程序使用,就 形成子程序 子程序可以实现源程序的模块化,可简化 源程序结构,可以提高编程效率
6.1 子程序的设计方法 1.过程定义伪操作
过程名 过程名
6.1 子程序的设计方法
PROC [NEAR|FAR] ... ENDP
function0
function1 function2
地址表形成多分支
5.2 分支程序设计
利用地址表法实现多分支程序设计的一般方法为: 把各分支程序段的入口地址(一般是偏移地址,也 可以使段地址与偏移地址)依次存放在数据段的一 个表中,形成地址表。取各分支程序段的编号作为 给分支入口地址的表地址的位移量。 某个分支程序入口地址的表地址为: 表地址=编号*2+入口地址首地址。 根据条件首先在地址表中找到转移的目标地址,然 后转到相应位置,从而实现多分支。
2.多分支程序设计
5.2 分支程序设计
多个条件对应各自的分支语句体,哪个条件成立 就转入相应分支体执行。多分支可以化解为双分 支或单分支结构的组合,例如:
Y Xor ah,ah ;等效于cmp ah,0 AH=0 jz function0 ;ah=0,转向function0 N dec ah ;等效于cmp ah,1 Y AH=1 jz function1 ;ah=1,转向function1 N dec ah ;等效于cmp ah,2 Y jz function2 ;ah=2,转向function2 AH=2 N
程舒慧
汇编语言
程舒慧
2011.11.15
5.2 分支程序设计
分支结构是对问题的处理方法有两种以上 不同选择时采用的程序设计方法,在程序 中,根据某一判断的不同结果执行不同的 程序段。 根据执行的程序段数量的多少不同,可分 为双分支结构程序和多分支结构程序。 每一次对条件的判断都会产生两种可能的 结果:真(条件满足)或假(条件不满 足)。
6.1 子程序的设计方法
5.2 分支程序设计
MOV AL,NUM MOV DL,’?’ CMP AL,0 JZ DISP MOV BX,0;BX用来记录位1的位数 AGAIN:SHR AL,1 JC NEXT INC BX JMP AGAIN NEXT:SHL BX,1 JMP ADTAB[BX] AD0:MOV DL,’0’ JMP DISP AD1:MOV DL,’1’ JMP DISP
6.1 子程序的设计方法 子程序调用方法说明
一个子程序可以供多个用户编写的主程序调用。在不了解 子程序内部算法的前提下能够很好地使用子程序也是子程 序应具备的特性。 一个完整的子程序,应包括子程序调用方法说明。主要包 括以下6个方面内容。 (1)子程序名:供调用子程序时使用 (2)子程序功能:供选择子程序时参考 (3)占用寄存器:说明子程序执行时,要使用哪些寄存器; 子程序执行完后,哪些寄存器的内容被改变,哪些寄存器 的内容保持不变。 (4)入口参数:说明子程序执行应具备的条件。 (5)输出参数:说明子程序执行后的结果存放在何处。 (6)子程序调用示例:说明子程序的调用格式。
6.1 子程序的设计方法
2. 子程序的调用与返回
子程序调用:隐含使用堆栈保存返回地址
call near ptr subp
(1) 保存返回地址 (2) 转子程序
(SP)→
(IP)
call far ptr subp
(1) 保存返回地址 (2) 转子程序
(SP)→
(IP) (CS)
子程序返回:ret
3.保存与恢复寄存器 一般通过堆栈来实现, 主要在子程序中进行, 例如,子程序subt中 用到了寄存器ax,bx, cx和dx,则可能的保 存与恢复寄存器如左: