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

合集下载

实验二 分支结构程序设计实验

实验二 分支结构程序设计实验

实验二 分支结构程序设计实验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章 汇编语言程序

第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字符组成,但头一个字符必须是字母,其余字符可以是字母、数字或其它特定字符。

②不能使用汇编语言已经定义了的符号作为标号,如指令助记符、伪指令记忆符以及寄存器的符号名称等。

(同一个标号在程序中只能定义一次,不能重复定义;一条语句可以有标号,也可以没有标号,所以是否有标号,取决于程序中是否需要访问该语句。

)操作码:规定语句执行的操作容,操作码是以指令助记符表示的,是汇编指令格式中唯一不能空缺的部分。

操作数:给指令的操作提供数据或地址。

注释:是对语句或程序段的解释说明。

(在单片机中,这四个部分怎么加以区分呢?使用分界符)分界符(分隔符):用于把语句格式中的各部分隔开,以便于编译程序区分不同的指令段。

冒号(:)用于标号之后空格()用于操作码和操作数之间逗号(,)用于操作数之间,分割两个以上的操作数分号(;)用于注释之前。

分支结构在程序设计的作用

分支结构在程序设计的作用

分支结构在程序设计中的作用主要体现在以下几个方面:
逻辑判断:分支结构可以根据不同的条件执行不同的代码块,从而实现程序的逻辑判断。

通过使用分支结构,程序能够根据不同的条件做出决策,从而改变程序的执行流程。

条件执行:在程序设计中,有时候需要根据不同的条件执行不同的操作。

分支结构允许程序员根据条件判断的结果来选择要执行的代码块,从而实现更加灵活的程序行为。

异常处理:分支结构可以用于实现异常处理。

当程序遇到错误或异常情况时,可以使用分支结构来处理这些情况,避免程序崩溃或出现不可预测的行为。

输入验证:在接收用户输入时,分支结构可以帮助验证输入的有效性。

根据输入的不同情况,分支结构可以执行不同的代码块,从而对无效的输入进行适当的处理。

多路选择:分支结构可以用于实现多路选择,即根据不同的条件执行不同的代码路径。

这对于需要处理多种可能情况或条件的程序来说非常有用。

总的来说,分支结构在程序设计中的作用是实现条件控制和多路选择,使得程序能够根据不同的情况做出决策,更加智能地处理问题,提高程序的灵活性和可维护性。

同时,正确使用分支结构也是保证程序逻辑正确、提高程序性能的重要手段。

汇编语言分支结构实验报告

汇编语言分支结构实验报告
3.编写程序,判断键盘输入的值,若输入数字0则显示'input digit0 !$',若输入数字1则显示'input digit1 !$',……,若输入数字9则显示'input digit9 !$';否则显示'input character !$'。
1)输入源程序:
data segment
dis0 db 'input digit0 !$'
exit:mov ah,4ch
int 21h
code ends
end start
3.编制程序,判断键盘输入的一个数,若输入1~5,则将该数转换为二进制数存放至RLT单元,若输入其它数则显示输出“ERROR”。
答:
data segment
rlt db dup(5)
dis db'error!$'
data ends
jmp short p1
jmp short p2
jmp short p3
jmp short p4
jmp short p5
jmp short p6
jmp short p7
jmp short p8
jmp short p9
jmp short p10
p0:lea dx,dis0
mov ah,9
int 21h
int 21h
code ends
end start
2.如果不采用上述方法判断两数的符号,而采用两数异或的方法判断两数符号,当两数符号不相同时,其结果的最高位必定为1;当两数符号相同时,其结果的最高位必定为0;再根据其中一数的符号是正还是负决定两数是正数还是负数。请做程序完成。

第四章:8086汇编语言程序设计

第四章:8086汇编语言程序设计

第 4章
汇编语言程序设计
汇编语言程序设计
(2)尽量采用循环结构和子程序 (2)尽量采用循环结构和子程序 采用循环结构和子程序可以使程序的长度减少、 采用循环结构和子程序可以使程序的长度减少、 占用内存空间减少。 占用内存空间减少。 多重循环,注意各重循环的初值和循环结束条件, 多重循环,注意各重循环的初值和循环结束条件, 死循环”现象; 避免出现 “死循环”现象; 通用的子程序, 通用的子程序,除了用于存放子程序入口参数的寄 存器外, 存器外,子程序中用到的其它寄存器的内容应压入堆栈 进行现场保护, 进行现场保护,并要特别注意堆栈操作的压入和弹出的 平衡; 平衡; 中断处理子程序除了要保护程序中用到的寄存器外, 中断处理子程序除了要保护程序中用到的寄存器外, 还应保护标志寄存器。 还应保护标志寄存器。
1、汇编语言的语句格式
汇编语言源程序是由汇编语句(即指令)组成的。 汇编语言源程序是由汇编语句(即指令)组成的。 汇编语言一般由四部分组成。 汇编语言一般由四部分组成。
其典型的汇编语句格式: 其典型的汇编语句格式: 标号: 标号:操作码
例如: 例如: START: START:MOV AL,30H AL,30H ;(AL)=30H (AL)=30H 30
第 4章
汇编语言程序设计
汇编语言程序设计
经过任务分析、算法优化后, 经过任务分析、算法优化后, 在微型机上使用编 首先, 首先,要对单片机应用 就可以进行程序的总体构思, 就可以进行程序的总体构思, 辑软件编写源程序, 辑软件编写源程序, 系统预完成的任务进行 确定程序的结构和数据形式, 确定程序的结构和数据形式, 在使用交叉汇编的 深入的分析, 深入的分析,明确系统 并考虑资源的分配和参数的 方法对源程序进行 的设计任务、 的设计任务、功能要求 计算等。 计算等。然后根据程序运行 汇编, 汇编,然后采用串 和技术指标。其次, 和技术指标。其次,要 的过程, 的过程,勾画出程序执行的 算法是解决具体问题 行通信的方法, 行通信的方法,把 对系统的硬件资源和工 逻辑顺序, 。同一个问题 逻辑顺序,用图形符号将总 的方法。 的方法 汇编得到的目标程 作环境进行分析。 ,, 作环境进行分析。这是 体设计思路及程序流向绘制 的算法可以有多种, 的算法可以有多种 序传送到单片机内, 序传送到单片机内 单片机应用系统程序设 在平面图上, 在平面图上,从而使程序的 结果也可能不尽相同, 结果也可能不尽相同, 并进行程序运行和 计的基础和条件 结构关系直观明了, 结构关系直观明了,便于检 所以, 调试 所以,应对各种算法 查和修改。 查和修改。 进行分析比较,并进 进行分析比较, 行合理的优化

汇编语言结构

汇编语言结构

汇编语言结构汇编语言是一种低级别的编程语言,用于与计算机硬件进行直接交互。

它提供了对计算机硬件的底层访问和控制,使程序员能够更加精确地编写处理器指令。

一、概述汇编语言结构是汇编程序的基本组成部分。

一个典型的汇编程序由若干条指令组成,每条指令执行特定的操作。

指令通常包括操作码和操作数,用于指定要执行的任务和相关数据。

在编写汇编程序时,程序员需要了解指令的结构和格式,以正确地编写代码。

二、指令格式在汇编语言中,每条指令都有固定的格式,即操作码、目标操作数和源操作数。

操作码指定要执行的操作类型,目标操作数用于存储操作结果,源操作数用于提供操作所需的数据。

根据不同的指令类型,操作数的格式和长度也会有所不同。

三、寄存器寄存器是汇编语言中的一种重要数据存储单位,用于存储和处理数据。

计算机硬件通常提供了各种类型的寄存器,如通用寄存器、标志寄存器和指令指针寄存器等。

在编写汇编程序时,程序员可以使用这些寄存器来完成各种任务,如存储数据、进行运算和控制程序流程等。

四、内存内存是计算机中的一种重要存储设备,用于存储程序和数据。

在汇编语言中,程序员可以使用内存来存储变量、数组和其他数据结构,以便在程序执行过程中进行读写操作。

为了有效地使用内存,程序员需要了解内存的地址和访问方式等相关知识。

五、程序结构汇编语言程序通常由若干个过程和子程序组成,用于实现特定的功能。

程序员可以使用标签和跳转指令来控制程序的流程,实现条件分支和循环等结构。

此外,程序员还可以使用宏指令来简化代码编写和调试过程,提高程序的可读性和可维护性。

六、汇编程序的工具和环境为了编写和调试汇编程序,程序员通常需要使用汇编器和调试器等工具。

汇编器用于将汇编源代码翻译成机器码,调试器用于辅助程序员进行代码调试和错误排查。

此外,程序员还可以使用集成开发环境(IDE)来提供更加友好和便捷的编程环境。

结论汇编语言是一种强大而灵活的编程工具,可以直接操作计算机硬件。

通过了解汇编语言的结构和格式,程序员可以编写高效和可靠的代码,更好地理解计算机的工作原理。

汇编语言

汇编语言

续上页
多数的程序转移都是在同一个代码段中,大 多数的转移范围实际上很短,往往在当前位置前 后不足百十个字节。如果转移范围可以用一个字 节编码表达、即向地址增大方向转移127字节、 向地址减小方向转移128字节之间的距离,则形
成所谓的短转移(short)。短转移的引入是为了
减少转移指令的代码长度,进而减少程序代码量。
一个32位双字表达,为0x00000001。
[例题9-2]续3
指令“jmp eax‖采用段内寄存器间接寻址转 移到eax指向的位置。因为eax被赋值标号labl3 的偏移地址,所以程序又跳过一个nop指令,开 始执行labl3处的指令。变量nvar保存了labl4的 偏移地址,所以段内存储器间接寻址指令“jmp
int $0x80
[例题9-1]续2
该程序简单地把EAX寄存器加载为1,用来
进行Linux系统调用exit。然后使用无条件指令
JMP跳过把10加载到EBX寄存器并且进行Linux
系统调用部分。程序直接跳到把20赋给EBX寄存
器,再进行Linux系统功能调用位置。
[例题9-1]续3
进行汇编和连接再执行:
续上页
(2)直接寻址方式 直接寻址是指令代码直接提供目标地址。IA-32处理 器只支持段间直接寻址。
(3)间接寻址方式
间接寻址是指令代码指示寄存器或存储单元,目标地 址来自寄存器或存储单元、间接获得。如果用寄存器保存 目标地址,称为目标地址的寄存器间接寻址;如果用存储 单元保存目标地址,则称为目标地址的存储器间接寻址。
近转移,因此,在汇编语言程序中经常不专门表明short
或near。这一点增强了原来这些指令的功能,使得程序员 不必再担心条件转移是否超出了范围。

汇编语言(四)分支结构程序设计

汇编语言(四)分支结构程序设计

汇编语言(四)分支结构程序设计分支结构是计算机程序设计中常用的一种控制结构,它根据一些条件的真假决定程序的执行路径。

在汇编语言中,我们可以使用条件分支指令来实现分支结构的程序设计。

常用的条件分支指令有以下几种:1.无条件跳转指令(JMP):该指令用于无条件跳转到指定的地址。

例如,JMPLABEL指令会跳转到LABEL标记的位置。

2.条件跳转指令:根据一些条件的真假决定是否跳转到指定的地址。

常用的条件跳转指令有以下几种:-跳转指令(JZ、JNZ):根据零标志位(ZF)的状态来判断是否跳转。

如果ZF为1,则跳转;如果ZF为0,则不跳转。

-跳转指令(JC、JNC):根据进位标志位(CF)的状态来判断是否跳转。

如果CF为1,则跳转;如果CF为0,则不跳转。

-跳转指令(JS、JNS):根据符号标志位(SF)的状态来判断是否跳转。

如果SF为1,则跳转;如果SF为0,则不跳转。

-跳转指令(JO、JNO):根据溢出标志位(OF)的状态来判断是否跳转。

如果OF为1,则跳转;如果OF为0,则不跳转。

-跳转指令(JP、JNP):根据奇偶标志位(PF)的状态来判断是否跳转。

如果PF为1,则跳转;如果PF为0,则不跳转。

-跳转指令(JA、JNA):根据无符号数比较结果来判断是否跳转。

如果无符号数比较结果为大于,则跳转;如果无符号数比较结果为小于或等于,则不跳转。

-跳转指令(JB、JNB):根据无符号数比较结果来判断是否跳转。

如果无符号数比较结果为小于,则跳转;如果无符号数比较结果为大于或等于,则不跳转。

-跳转指令(JAE、JNAE):根据无符号数比较结果来判断是否跳转。

如果无符号数比较结果为大于或等于,则跳转;如果无符号数比较结果为小于,则不跳转。

-跳转指令(JBE、JNBE):根据无符号数比较结果来判断是否跳转。

如果无符号数比较结果为小于或等于,则跳转;如果无符号数比较结果为大于,则不跳转。

-跳转指令(JE、JNE):根据有符号数比较结果来判断是否跳转。

第4章-汇编语言程序设计教案

第4章-汇编语言程序设计教案

第四章教学实施计划3课堂教学实施计划第 8 课教学过程设计:复习 0 分钟;授新课 100 分钟讨论 0 分钟;其它 0 分钟授课类型(请打√):理论课√讨论课□实验课□习题课□其它□教学方式(请打√):讲授√讨论□示教□指导□其它□教学手段(请打√):多媒体√模型□实物□挂图□音像□其它□4.1 汇编语言程序设计概述程序实际上是一系列计算机指令的有序集合。

我们把利用计算机的指令系统来合理地编写出解决某个问题的程序的过程,称为程序设计。

程序设计是单片机应用系统设计的重要组成部分,单片机的全部动作都是在程序的控制下进行的。

随着芯片技术的发展,很多标准的或功能型的硬件电路都集成到了芯片中,所以,软件设计在单片机应用系统开发中占的比重越来越大。

一、汇编语言和高级语言汇编语言:用助记符表示的指令称为汇编语言,用汇编语言编写的程序称为汇编语言源程序汇编语言也是面向机器的,它仍是一种低级语言。

汇编语言离不开具体计算机的硬件,与硬件紧密相关。

高级语言:高级语言不受具体“硬件”的限制,具有通用性强,直观、易懂、易学,可读性好等优点。

多数的51单片机用户使用C语言来进行程序设计。

C语言已经成为人们公认的高级语言中高效、简洁而又贴近51单片机硬件的编程语言。

二、汇编语言的特点•助记符指令和机器指令一一对应,所以用汇编语言编写的程序效率高,占用存储空间小,运行速度快,因此汇编语言能编写出最优化的程序。

•使用汇编语言编程比使用高级语言困难,因为汇编语言是面向计算机的,汇编语言的程序设计人员必须对计算机硬件有相当深入的了解。

•汇编语言能直接访问存储器及接口电路,也能处理中断,因此汇编语言程序能够直接管理和控制硬件设备。

•汇编语言缺乏通用性,程序不易移植,各种计算机都有自己的汇编语言,不同计算机的汇编语言之间不能通用。

三、汇编语言的语句格式•指令语句:每一条指令语句在汇编时都产生一个指令代码(也称机器代码),执行该指令代码对应着机器的一种操作。

第四章 汇编语言程序设计基础

第四章  汇编语言程序设计基础

4.2.2 分支程序的设计方法 ★条件控制 ★逻辑尺控制 ★地址跳转表控制
1. 条件控制——利用比较和条件转移指令实现分支,是最常用的 程序设计方法。
பைடு நூலகம்
例如,求解函数:
练习题2. 编写程序,比较两个字符串STRING1和STRING2所 含字符是否完全相同,若相同则显示“MATCH”,若不同则显示 “NO MATCH”。 答案: datarea segment string1 db ‘asfioa’ ;定义字符串STRING1 string2 db ‘xcviyoaf’ ;定义字符串STRING2 mess1 db ‘MATCH’,’$’ ;定义显示字串“MATCH” mess2 db ‘NO MATCH’,’$’ ;定义显示字串“NO MATCH” datarea ends prognam segment main proc far assume cs:prognam,ds:datarea start: push ds ;将ds:00入栈 sub ax,ax push ax mov ax,datarea ;装填数据段及附加段 mov ds,ax mov es,ax
程序流程图
mov ch,4 rotate: mov cl, 4 rol bx,cl mov al,bl and al,0fh add al,30h ;’0’-’9’ ASCII 30H-39H cmp al,3ah jl printit add al,7h ;’A’-’F’ ASCII 41H-46H printit: mov dl,al mov ah,2 int 21h dec ch jnz rotate
例4.3 将首地址为A的N字数组按照从小到大的次序整序(气 泡算法,多重循环) A dw 32,85,16,15, 8

分支结构实验报告

分支结构实验报告

天津大学<<汇编语言程序设计>>课程设计学院:职业技术教育学院学号:3008212012姓名:黄立宁班级:1指导教师:谢永超2010-4-26内容简介本程序为利用q、w、e、r、t、y、u、1-7作演奏音符制任意音乐的程序。

该程序能记录所演奏的音乐,能回放所演奏的音乐。

运行过程中,通过屏幕上显示的音符,输入一个不同的数发出不同的音调,即制作出不同的音乐。

每输入一数,屏幕上音符及提示闪烁一次,当输入数为9时,终止音乐的制作,将之前的音乐存入堆栈中,随后送入端口地址,即演奏出刚刚制作的音乐。

成绩:教师签字:目录开发环境 (1)功能描述 (1)系统功能结构框图 (2)程序代码 (3)运行结果 (11)课程设计体会 (12)参考文献 (13)题目:键盘控制发声程序----电子琴一、开发环境1.硬件环境微型计算机一台2.软件环境WindowsXP操作系统使用工具MASM 5.0,要进行汇编语言的编辑和运行,需要以下工作环境:⑴编辑程序,如EDIT.EXE、WORD⑵汇编程序,如MASM.EXE⑶连接程序,如LINK.EXE⑷调试程序,如DEBUG.EXE二、功能描述利用q、w、e、r、t、y、u、1-7作演奏音符制任意音乐的程序。

该程序能记录所演奏的音乐,能回放所演奏的音乐。

运行过程中,通过屏幕上显示的音符,输入一个不同的数发出不同的音调,即制作出不同的音乐。

每输入一数,屏幕上音符及提示闪烁一次,当输入数为9时,终止音乐的制作,将之前的音乐存入堆栈中,随后送入端口地址,即演奏出刚刚制作的音乐。

三、系统功能结构图(续上图):四、程序代码;利用q、w、e、r、t、y、u、1-7演奏音符的程序,能记录所演奏的音乐,能回放所演奏的音乐;********************************************************** DATA SEGMENTmsg DB 0DH,0AH,' 'DB 0DH,0AH,' [ 1 2 3 4 5 6 7 ]'DB 0DH,0AH,' [ q w e r t y u ]'DB 0DH,0AH,' _________________'DB 0DH,0AH,' 'DB 0DH,0AH,' 'DB 0DH,0AH,' *************************************' DB 0DH,0AH,' NOTICE ' DB 0DH,0AH,' Press 1-7 to make music and play it.'DB 0DH,0AH,' Press 9 to interrupt.'DB 0DH,0AH,' ********************************','$';音调(后面用到-1判断音乐播是否放完)sound_0 DW -1sound_11 DW 441,-1sound_12 DW 495,-1sound_13 DW 556,-1sound_14 DW 589,-1sound_15 DW 661,-1sound_16 DW 742,-1sound_17 DW 833,-1sound_1 DW 882,-1sound_2 DW 990,-1sound_3 DW 1112,-1sound_4 DW 1178,-1sound_5 DW 1322,-1sound_6 DW 1484,-1sound_7 DW 1655,-1time DW 25DATA ENDS;**********************************************************STACK SEGMENTDb 200 DUP ('STACK') ;将音符放入堆栈中STACK ENDS;********************************************************** CODE SEGMENTASSUME DS:DATA,SS:STACK,CS:CODE ;段说明START:MOV AX,DATAMOV DS,AXMOV aH,00 ;初始化显示方式MOV AL,00INT 10H;------------------定义一个显示宏SHOW MACRO bLEA DX,bMOV AH,9 ;将以"$"结尾的字符串显示在屏幕上,并将入口参数字符串的首地址的段基址和偏移地址分别放入DS和DX中INT 21HENDM;------------------定义一个声音宏onesound macro soundis,jumpis,letterisCMP AL,letterisJNZ jumpisLEA SI,soundisLEA BP,DS:timeCALL MUSICJMP inputENDM;--------------------show msg ;显示音符和提示;--------------------INPUT: MOV AH,01HINT 21H ;从键盘输入一个字符并显示CMP AL,'9'jnz gomov ah,4ch ;若输入9则返回DOS,终止制作音乐 int 21hgo: onesound sound_11,a0,'q'a0: onesound sound_12,b0,'w'b0: onesound sound_13,c0,'e'c0: onesound sound_14,d0,'r'd0: onesound sound_15,e0,'t'e0: onesound sound_16,f0,'y'f0: onesound sound_17,g0,'u'g0: onesound sound_1,h0,'1'h0: onesound sound_2,i0,'2'i0: onesound sound_3,j0,'3'j0: onesound sound_4,k0,'4'k0: onesound sound_5,l0,'5'l0: onesound sound_6,m0,'6'm0: onesound sound_7,n0,'7'n0: onesound sound_0,o0,alo0: jmp input;---------------------发声(将堆栈中的音符数据送到端口地址) GENSOUND PROC NEARPUSH AXPUSH BXPUSH CXPUSH DXPUSH DI;时间间隔定时器(计数器2的初始化过程)MOV AL,0B6HOUT 43H,AL ;给公用的控制寄存器(地址为43H)赋值 MOV DX,12HMOV AX,348ch ;频率除数DIV DIOUT 42H,ALMOV AL,AHOUT 42H,ALIN AL,61H ;扬声器驱动(61H为输出寄存器分配I/O端口号)MOV AH,ALOR AL,3OUT 61H,AL ;打开扬声器WAIT1: MOV CX,3314 ;等待下一音符的到来call waitfDELAY1: DEC BX ;声音的延迟JNZ WAIT1MOV AL,AH ;关闭扬声器OUT 61H,ALPOP DIPOP DXPOP CXPOP BXPOP AXRETGENSOUND ENDP;*******************************waitf proc nearpush axwaitf1:in al,61hand al,10hcmp al,ahje waitf1mov ah,alloop waitf1 ;CX=0时退出循环,继续键入音符制作音乐pop axretwaitf endp;******************************MUSIC PROC NEARPUSH DSSUB AX,AXPUSH AXFREG: MOV DI,[SI]CMP DI,-1 ;音乐是否放完JE END_MUSMOV BX,DS:[BP] ;将音符放入堆栈CALL GENSOUND ;调发声子程序 ADD SI,2ADD BP,2JMP FREGEND_MUS:RETMUSIC ENDPCODE ENDS;*******************************END START五、运行结果图1 生成OBJ文件图2 生成EXE文件图3 运行结果六、课程设计体会这次课程设计使我对汇编语言有了更进一步的了解和熟悉,实际操作编写程序,并使之能在计算机上正确运行真的有点困难。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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,则可能的保 存与恢复寄存器如左:
相关文档
最新文档