CH4-汇编语言程序设计
合集下载
课件 CH4(1) 汇编语言程序设计
3、标号
ቤተ መጻሕፍቲ ባይዱ
指令性语句的符号地址;
名称代表后面可执行指令语句的开始地址;
可作为转移指令的目的操作数(直接寻址)。
例:
JMP NEXT
……
NEXT:MOV AH,0FH
标号也有三种属性: ⑴段值:标号所在段的段基址,总在CS中。 ⑵段内偏移地址:指标号所在地址与所在段首地址 之间的地址偏移字节数。 ⑶类型:指标号可转移的距离,也称距离属性。 NEAR:近标号,实现段内转移或调用; FAR: 远标号,实现段间转移或调用。 若没有对类型进行说明,默认为NEAR。
但不方便记忆和编程。
2、汇编语言(Assembly Language) 用助记符来表示指令,如:加法:ADD…… 特点:机器不能识别,需翻译;但仍然面向硬件,
执行速度较快;多用于编制系统程序、实时控制和 通信程序。 3、高级语言(High-level Language) 用数学语言和自然语言编程; 如:加法(+)、输出(printf、cout) … 特点:编程方便简单,无需了解机器硬件;但机器 不能识别,需要庞大的翻译系统,速度较慢。
例:DA1 DB 10H,20H,30H;定义变量DA1,并赋初值
二、数据项
MASM中使用的数据项:常数、寄存器、存储器、变量、标号
或表达式。
1、常数
与指令系统中
是固定值,没有属性,是确定的数据。 介绍的一样
二进制:字母“B”结尾,如:00110100B;
十进制:字母“D”结尾或省略,如:1234D、5678;
联合应用(混合编程): 汇编语言加高级语言组合编程;各取所长,相互
调用 汇编语言实现硬件操作 高级语言实现复杂算法
汇编语言ch4
AH=0 N
Y
fuction0
AH=1 N
AH=2 N
Y
fuction1
Y
fuction2
中国铁道出版社出版
汇编语言程序设计
例4.9 利用入口地址表,形成多分支
Table db disp1, disp2, disp3, disp4, ...
地址表
分支1地址
分支2地址
...
数据段 程序段 分支体
37
指定的条件cc如果成立,程序转移到由标号label指 定的目标地址去执行指令;条件不成立,则程序将顺 序执行下一条指令 操作数label是采用短转移,称为相对寻址方式
17
中国铁道出版社出版
相对寻址方式
汇编语言程序设计
Jcc
Jcc指令的操作数label是一个标号 一个8位位移量,表示Jcc指令后的那条指令的偏 移地址,到目标指令的偏移地址的地址位移 8位位移量是相对于当前IP的,且距当前IP地址 -128~+127个单元的范围之内,属于段内短距 离转移 Jcc目标地址就采用这种相对寻址方式
目标地址的范围:段内
汇编语言程序设计
JMP
段内转移——近转移(near) 在当前代码段64KB范围内转移 ( ±32KB范围) 不需要更改CS段地址,只要改变IP偏 移地址 段内转移——短转移(short) 转移范围可以用一个字节表达,在段 内-128~+127范围的转移
代 码 段
中国铁道出版社出版
12
段内转移、直接寻址
汇编语言程序设计
JMP
实际为相对寻址
JMP label ;IP←IP+位移量 位移量是紧接着JMP指令后的那条指令的偏移地 址,到目标指令的偏移地址的地址位移 当向地址增大方向转移时,位移量为正;向地址 减小方向转移时,位移量为负
ch4 汇编语言程序设计基本方法
DB=1; DW=2; DD=4; DQ=8; DT=10;
长度(LENGTH):定义的变量个数.
在含有DUP的操作符中,重复的次数即个数 其他各种变量定义中,变量的个数均为1
大小(SIZE):分配给同一变量名的所有变量的总字节数,
SIZE=TYPE×LENGTH
微型计算机原理与应用(西电科大通院) 25
微型计算机原理与应用(西电科大通院) 8
汇编:把汇编语言源程序翻译成机器语言的过 程 汇编程序:能把语言源程序翻译成机器语言的 系统程序(语言加工程序).8086宏汇编程序为 MASM.EXE 汇编程序 如:
MASM.EXE 汇编 机器语言程序 B0 12H 05 02 00H 汇编语言源程序 MOV AL,12H ADD AX,0002H
微型计算机原理与应用(西电科大通院) 20
① 算术操作符:
MOV DL,5+2+3 MOV AL,11/2 MOV AL,11 MOD 2 ;(DL)11 ;(AL)05H ;(AL)01H
② 逻辑操作符:
MOV AL, 0CCH AND 0F0H AND AL, 0CCH OR 0F0H ;(AL)0C0H ;(AL)0C0H&&0FCH
等不同的表达式
微型计算机原理与应用(西电科大通院)来自18②字符串常数
字符串常数是由单引号’’括起来的一串字符 或者单个字符. 如:
MOV DL,’A’ ;(DL)41H
BUF DB ’12Aa’
;将’12Aa’字符串定义给变量
; BUF以下连续4个存储单元
微型计算机原理与应用(西电科大通院)
变量名 DATA1 DB 20H DATA2 DW 0204H,1000H DATA3 DB (-1*3),(15/3) DATA4 DD 12345H DATA5 DB ‘0123’ DATA6 DW ‘AB’,’C’,’D’ DATA8 DD ? DATA9 DB 5 DUP(00)
长度(LENGTH):定义的变量个数.
在含有DUP的操作符中,重复的次数即个数 其他各种变量定义中,变量的个数均为1
大小(SIZE):分配给同一变量名的所有变量的总字节数,
SIZE=TYPE×LENGTH
微型计算机原理与应用(西电科大通院) 25
微型计算机原理与应用(西电科大通院) 8
汇编:把汇编语言源程序翻译成机器语言的过 程 汇编程序:能把语言源程序翻译成机器语言的 系统程序(语言加工程序).8086宏汇编程序为 MASM.EXE 汇编程序 如:
MASM.EXE 汇编 机器语言程序 B0 12H 05 02 00H 汇编语言源程序 MOV AL,12H ADD AX,0002H
微型计算机原理与应用(西电科大通院) 20
① 算术操作符:
MOV DL,5+2+3 MOV AL,11/2 MOV AL,11 MOD 2 ;(DL)11 ;(AL)05H ;(AL)01H
② 逻辑操作符:
MOV AL, 0CCH AND 0F0H AND AL, 0CCH OR 0F0H ;(AL)0C0H ;(AL)0C0H&&0FCH
等不同的表达式
微型计算机原理与应用(西电科大通院)来自18②字符串常数
字符串常数是由单引号’’括起来的一串字符 或者单个字符. 如:
MOV DL,’A’ ;(DL)41H
BUF DB ’12Aa’
;将’12Aa’字符串定义给变量
; BUF以下连续4个存储单元
微型计算机原理与应用(西电科大通院)
变量名 DATA1 DB 20H DATA2 DW 0204H,1000H DATA3 DB (-1*3),(15/3) DATA4 DD 12345H DATA5 DB ‘0123’ DATA6 DW ‘AB’,’C’,’D’ DATA8 DD ? DATA9 DB 5 DUP(00)
微机原理CH4(2) 汇编语言程序设计共49页
xiexie! 38、我这个人走得很慢,但是我从不后退。——亚伯拉罕·林肯
39、勿问成功的秘诀为何,且尽全力做你应该做的事吧。——美华纳
40、学而不思则罔,思而不学则殆。——孔子
微机原理CH4(2) 汇编语言程序设计
36、“不可能”这个字(法语是一个字 ),只 在愚人 的字典 中找得 到。--拿 破仑。 37、不要生气要争气,不要看破要突 破,不 要嫉妒 要欣赏 ,不要 托延要 积极, 不要心 动要行 动。 38、勤奋,机会,乐观是成功的三要 素。(注 意:传 统观念 认为勤 奋和机 会是成 功的要 素,但 是经过 统计学 和成功 人士的 分析得 出,乐 观是成 功的第 三要素 。
39、没有不老的誓言,没有不变的承 诺,踏 上旅途 ,义无 反顾。 40、对时间的价值没有没有深切认识 的人, 决不会 坚韧勤 勉。
谢谢!
36、自己的鞋子,自己知道紧在哪里。——西班牙
37、我们唯一不会改正的缺点是软弱。——拉罗什福科
ch4汇编语言
第四章: 第四章:程序设计
概述
结构 伪指令 设计
模块 举例
1、汇编语言的框架结构
汇编语言的框架结构
CODE START
SEGMENT CS:CODE DS:DATA SS:STACK ASSUME CS:CODE DS:DATA SS:STACK PROC FAR PUSH DS MOV AX ,0 PUSH AX
第四章: 第四章:程序设计
概述
结构 伪指令 设计
模块 举例
一、程序设计语言概述
汇编语言
DOS下汇编语言程序的上机与处理过程 DOS下汇编语言程序的上机与处理过程
第四章:汇编语言程序设计
一:程序设计语言概述
二:程序结构与语句格式 2. 汇编语言的语句 三: 汇编语言的伪指令语句 四: 汇编语言程序设计基础 五: 模块化程序设计技术 六: 实用程序设计举例 1. 汇编语言的框架结构
代码段
;通知汇编程序停止汇编
第四章: 第四章:程序设计
概述
结构 伪指令 设计
模块 举例
1、汇编语言的框架结构
汇编语言的框架结构
;SAMPLE PROGRAM DISPLAY MESSAGE STACK SEGMENT PARA STACK ‘STACK STACK’ STACK DB 1024 DUP(0) STACK ENDS DATA SEGMENT MESSAGE DB ‘THIS IS A SAMPLE PROGRAM.’ THIS PROGRAM. DATA DB 0DH , 0AH , ‘$’ $ ENDS
二:程序结构与语句格式 2. 80X86/Pentium扩展指令 扩展指令 三: 汇编语言的伪指令语句 四: 汇编语言程序设计基础 五: 模块化程序设计技术 六: 实用程序设计举例 1. 基本伪指令语句
CH4 汇编语言程序设计-
7. 一个完整源程序结构例
返回
符号定义伪指令
(1)EQU伪指令
伪指令格式: <符号名> EQU <表达式> 指令功能: 给符号名赋值. 名字可以由程序员 取定, 表达式应该是可以计算得出一个具体值. 例: PORT EQU 88H;定义符号PORT代表88H DATA EQU PORT+2;定义符号DATA代表 PORT+2 注意: ①用EQU定义的符号,不能重新再定义; ②如果在表达式中用了其他符号,必须事 先定义;
接下页
4.1.3 数据项及表达式
(3)关系运算符:eq、ne、lt、gt、le、ge 【例3-7】 mov ax, 4 eq 3 ;关系真,值为FFFFH。关系假,值为0
(4)取值运算符和属性运算符: offset、seg、type、length、size、ptr OFFSET:得到一个标号或变量的偏移地址。 【例3-8】 mov si, offset data1 SEG:得到一个标号或变量的段地址。 【例3-9】 mov ax, seg data
返回
4.3 DOS功能调用
一.什么是DOS系统功能调用 二.DOS系统功能调用的方法 三.DOS系统功能调用示例
DOS功能调用综合示例
返回
一.什么是DOS系统功能调用
功能调用
微型机的系统软件提供了许多 可供用户调用的功能子程序,用户 可在自己的程序中直接调用这些功 能,无需再自行编写。 μCS 的层次模型
返回
连接程序
通过汇编产生的OBJ文件是二进制目标文 件, 但用的是浮动地址, 不能直接运行, 必须用连 接程序LINK.EXE连接和定位.
返回
调试程序
DEBUG.exe是DOS提供的一个调试汇编语言 程序的程序,每个版本的DOS都带有该程序。 DEBUG程序采用的是命令行方式使用不方便, 但实用性强.是学习汇编语言程序、计算机硬件等 课程的有效工具.
返回
符号定义伪指令
(1)EQU伪指令
伪指令格式: <符号名> EQU <表达式> 指令功能: 给符号名赋值. 名字可以由程序员 取定, 表达式应该是可以计算得出一个具体值. 例: PORT EQU 88H;定义符号PORT代表88H DATA EQU PORT+2;定义符号DATA代表 PORT+2 注意: ①用EQU定义的符号,不能重新再定义; ②如果在表达式中用了其他符号,必须事 先定义;
接下页
4.1.3 数据项及表达式
(3)关系运算符:eq、ne、lt、gt、le、ge 【例3-7】 mov ax, 4 eq 3 ;关系真,值为FFFFH。关系假,值为0
(4)取值运算符和属性运算符: offset、seg、type、length、size、ptr OFFSET:得到一个标号或变量的偏移地址。 【例3-8】 mov si, offset data1 SEG:得到一个标号或变量的段地址。 【例3-9】 mov ax, seg data
返回
4.3 DOS功能调用
一.什么是DOS系统功能调用 二.DOS系统功能调用的方法 三.DOS系统功能调用示例
DOS功能调用综合示例
返回
一.什么是DOS系统功能调用
功能调用
微型机的系统软件提供了许多 可供用户调用的功能子程序,用户 可在自己的程序中直接调用这些功 能,无需再自行编写。 μCS 的层次模型
返回
连接程序
通过汇编产生的OBJ文件是二进制目标文 件, 但用的是浮动地址, 不能直接运行, 必须用连 接程序LINK.EXE连接和定位.
返回
调试程序
DEBUG.exe是DOS提供的一个调试汇编语言 程序的程序,每个版本的DOS都带有该程序。 DEBUG程序采用的是命令行方式使用不方便, 但实用性强.是学习汇编语言程序、计算机硬件等 课程的有效工具.
ch4
4.功能调用
• 包含多个子功能的功能包,各子功能采用功能 号区分,用软中断指令调用,中断类型码固定 为21H • 格式 MOV AH,功能号
DOS
BIOS
<置相应参数>
INT 21H
DOS功能调用种类
设备管理
目录管理
文件管理
其它
常用DOS功能调用
• 格式
MOV
单字符输入
AH,01 21H
INT
输入的字符在AL中
AH,02 DL,41H;’A’的ASCII码 21H
• 例:请考虑程序的功能
字符串输入
单字符输出
字符串输出
常用DOS功能调用
• 格式
MOV
单字符输入
AH,09 DX, 待输出字符串的偏移地址
LEA
INT
21H
• 例:请考虑程序的功能
字符串输入
单字符输出
字符串输出
DATA SEGMENT MESS1 DB ‘Input String:’ 0DH,0AH,’$’ DATA ENDS CODE SEGMENT 被显示的字符串必须以‘$’ 结束,且所显示的内容不 ┇ 应出现非可见的ASCII码 MOV AH,09 MOV DX,OFFSET MESS1 INT 21H ┇
指令性语句
指令的符号地址
指示性语句
操作码
汇编语言语句类型
•CPU不执行,而由汇编程序执行的语句,不生成目 标代码 •格式
指令性语句
[名字] 伪指令助记符 操作数 [,操作数,…] [ ;注释]
变量的符号地址 至少一个操作数
指示性语句
汇编语言语句说明
• 标号后有冒号,在指令性语句前;名字后不加冒号,在指示性 语句前。 • 英文字母、数字及专用字符组成,最大长度不能超过31个,且不 标号与名字 能由数字打头,不能用保留字(如寄存器名,指令助记符,伪指令)。
CH4(1) 汇编语言程序设计4-1.2.3.4(ok)
第四章
汇编语言程序设计
4.1 引言 4.2 汇编语言程序格式 4.3 MASM中的表达式 4.4 伪指令语句 4.5 DOS系统功能调用 4.6 程序设计方法
1
第四章
4.1 引言
一、汇编语言 1、汇编语言是利用指令助记符、符号地址、语句标 号来编写程序的语言,它是机器语言的符号表示,是
较低级的语言,可以直接和底层的硬件打交道,程序
程序的组成部分和各部分的作用
1、程序分段
(1)段定义伪指令
由段定义伪指令定义各段。以SEGMENT开始, EDNS结束。程序中至少有一个代码段,此时数据存 放在代码段中;如果不定义堆栈段,由系统自动分 配,段名可自己定义,由数字和字母组成。
(2)段分配伪指令
ASSUME用来帮助计算机识别各个段。
6
第四章
23
这些运算符和逻辑运算指令的助记符完全相同, 但不会混淆,逻辑运算符是在汇编时计算的,而指
令助记符是在程序执行时进行运算的。
例4-5 源程序指令格式如下: IN AL,PORT AND DX,PORT AND 0FEH
OUT DX,AX
24
第四章
三、关系运算符
类型 符号 名称 运算结果
EQ
算术运算符、逻辑运算符、关系运算符
数值返回运算符、修改属性运算符、其它运算符
注意:所有表达式由MASM在汇编时进行运算,结果 为常数或存储器地址;
掌握:常用运算符及表达式的结果
18
第四章
一、算术运算符
类型 符号 名称 运算结果
+
算术运 算符 * / MOD SHL
加法
减法 乘法 除法 模除 左移
和
31
标 号
汇编语言程序设计
4.1 引言 4.2 汇编语言程序格式 4.3 MASM中的表达式 4.4 伪指令语句 4.5 DOS系统功能调用 4.6 程序设计方法
1
第四章
4.1 引言
一、汇编语言 1、汇编语言是利用指令助记符、符号地址、语句标 号来编写程序的语言,它是机器语言的符号表示,是
较低级的语言,可以直接和底层的硬件打交道,程序
程序的组成部分和各部分的作用
1、程序分段
(1)段定义伪指令
由段定义伪指令定义各段。以SEGMENT开始, EDNS结束。程序中至少有一个代码段,此时数据存 放在代码段中;如果不定义堆栈段,由系统自动分 配,段名可自己定义,由数字和字母组成。
(2)段分配伪指令
ASSUME用来帮助计算机识别各个段。
6
第四章
23
这些运算符和逻辑运算指令的助记符完全相同, 但不会混淆,逻辑运算符是在汇编时计算的,而指
令助记符是在程序执行时进行运算的。
例4-5 源程序指令格式如下: IN AL,PORT AND DX,PORT AND 0FEH
OUT DX,AX
24
第四章
三、关系运算符
类型 符号 名称 运算结果
EQ
算术运算符、逻辑运算符、关系运算符
数值返回运算符、修改属性运算符、其它运算符
注意:所有表达式由MASM在汇编时进行运算,结果 为常数或存储器地址;
掌握:常用运算符及表达式的结果
18
第四章
一、算术运算符
类型 符号 名称 运算结果
+
算术运 算符 * / MOD SHL
加法
减法 乘法 除法 模除 左移
和
31
标 号
计算机ch04
4.5.4 DOS系统功能调用 系统功能调用:I/O 系统功能调用
5)直接控制台输入输出单字符 5)直接控制台输入输出单字符 功能号:AH=06H 功能号:AH=06H 入口参数:DL=0FFH(输入) :DL=0FFH(输入 入口参数:DL=0FFH(输入) DL=字符 输出) 字符( DL=字符(输出) 出口参数:AL=输入字符 出口参数:AL=输入字符 6)键盘输入一个字符无回显 6)键盘输入一个字符无回显 功能号:AH=08H 功能号:AH=08H 出口参数:AL=字符; :AL=字符 出口参数:AL=字符; 7)返回DOS系统 返回DOS 7)返回DOS系统 功能号:AH=4CH 功能号:AH=4CH 8)清键盘缓冲区 清键盘缓冲区, 8)清键盘缓冲区,并调用一种键盘功能 功能号:AH=0CH 功能号:AH=0CH AL=键盘功能号 键盘功能号( 0AH) AL=键盘功能号(1、6、7、8、0AH)
4.5 汇编语言程序设计:程序设计步骤 汇编语言程序设计:
程序设计步骤
1.分析问题 1.分析问题 2.建立数学模型 2.建立数学模型 3.确定算法 3.确定算法 4.绘制程序流程图 4.绘制程序流程图 5.内存分配 5.内存分配 6.编制程序 6.编制程序 7.程序调试 7.程序调试
4.5 汇编语言程序设计:顺序结构程序 汇编语言程序设计:
…...
4.5.3 循环结构程序:条件控制循环 循环结构程序:
条件控制循环:需要利用特定条件转移指令判断 条件控制循环: 循环是否结束 转移指令可以指定目的标号来改变程序的运行顺 序,如果目的标号指向一个重复执行的语句体的 开始或结束, 开始或结束,便构成了循环控制结构
4.5.3 循环结构程序:条件控制循环举例 循环结构程序:
微机原理与接口技术 ch4程序设计
微机原理及应用——第一章 微型计算机基础知识
13
4.1.4 常量、变量、标号、表达式 常量、变量、标号、
1、常数 、
指令中出现的那些固定值, 指令中出现的那些固定值,分为数值常数和字符 串常数。 串常数。 数值常数分为: 数值常数分为: 二进制数 八进制数( ) 八进制数(B) 十进制数 (Q) 十六进制数 (H) 字符串常数是用单引号‘’括起来的一串字符。 ‘’括起来的一串字符 字符串常数是用单引号‘’括起来的一串字符。
微机原理及应用——第一章 微型计算机基础知识
18
4.1.4 常量、变量、标号、表达式 常量、变量、标号、
(2)、合成运算符(属性运算符) 、合成运算符(属性运算符)
① PTR:规定存储单元的类型。 类型 PTR 表达式 类型有:BYTE、WORD、DWORD、NEAR、 FAR。 ② THIS:类型指定运算符 例:XYZ EQU THIS BYTE;把字节类型BYTE 属性赋予变量XYZ。
例:MOV BX,PORT LT 5; , ; MOV BX,(( ,((PORT LT 5) AND 20) OR ,(( ) ) ((PORT GE 5) AND 30) (( ) ) 小于5时 当PORT 小于 时,上述指令等效于 MOV BX,20; , ; 大于或等于5时 当PORT 大于或等于 时,上述指令等效于 MOV BX,30; , ;
微机原理及应用——第一章 微型计算机基础知识
19
4.1.4 常量、变量、标号、表达式 常量、变量、标号、
③算术运算符 +、-、*、/、MOD
④ 逻辑运算符
AND、OR、NOT、XOR
微机原理及应用——第一章 微型计算机基础知识
20
CH4汇编语言设计
2005H
ADD A,B
05 F0
2007H
LJMP START
02 20 00 2009H
4.3 汇编语言实用程序设计 4.3.1 汇编语言程序的基本结构形式 常采用以下几种基本结构:
顺序结构、分支结构和循环结构,再加上广泛使用 的子程序和中断服务子程序。 1.顺序结构 2.分支结构
程序中含有转移指令, 无条件分支,有条件分支。 有条件分支又分为:单分支结构和多分支结构。 3.循环结构 4.子程序 5.中断服务子程序
NOP HERE: SJMP HERE
基本语法规则: 1.标号字段 是语句所在地址的标志符号 (1)标号后边必须跟以冒号“:” (2)由1~8个ASCII字符组成,第一个字符必须是字母 (3)同一标号在一个程序中只能定义一次 (4)不能使用汇编语言已经定义的符号作为标号 2.操作码字段 是汇编语言指令中唯一不能空缺的部分。汇编程序就是根据这
4.1.2 汇编语言语句的种类和格式
两种基本类型:指令语句和伪指令语句 (1)指令语句 已在第3章介绍 每一条指令语句在汇编时都产生一个指令代
码——机器代码 (2)伪指令语句 是为汇编服务的。在汇编时没有机器代码与之
对应。
89C51的汇编语言的四分段格式如下: 标号字段 操作码字段 操作数字段
规则:
个ASCII码文件,扩展名为“.ASM”。然后在微计算 机上运行汇编程序,把汇编语言源程序翻译成机器 代码。
交叉汇编—汇编后的机器代码是在另一台计算机(这 里是单片机)上运行。
89C51单片机的应用程序的完成,应经过三个步骤;
(1)在微计算机上,运行编辑程序进行源程序的输入 和编辑;
(2)对源程序进行交叉汇编得到机器代码;
CH4(2) 汇编语言程序设计
19
第四章
2. 设有如下数据定义语句:
BUFFER
VAR1 VAR2 LEN
DB
DW DW EQU
7,9,6,‘796’
? ? $ - BUFFER VAR1-BUFFER
DLENGTH EQU
试求出DLENGTH、LEN的值。
20
第四章
3. 如果某一数据段按以下定义: DATA SEGMENT TABLE DW 10,20,30,40,50 ENTRY DW 3 DATA ENDS 那么执行以下指令后,AX寄存器的内容是什么? MOV BX,OFFSET TABLE ADD BX,ENTRY MOV AX,[BX]
EQU ADD
MOV CX,COUNT
C1
AL,BL
MOV CX,100 ADD AL,BL
9
第四章
例2:
若 DA1
DB 01H,02H,03H
DA2 DW 5566H COUNT EQU $-DA1 则:COUNT的值为5 COUNT表示:DA1,DA2占的字节总数(长度之和)
10
第四章
例3:若从偏移地址为0000H开始定义如下语句: X1 DB 12H,34H X2 EQU 20 X3 DB 56H,78H
第四章
汇编语言程序设计
4.0 概述 4.1 汇编语言程序格式 4.2 MASM中的表达式 4.3 伪指令语句 4.4 程序设计方法 4.5 DOS系统功能调用
1
第四章
4.3 伪指令语句
在汇编时进行处理,主要完成变量定义,段定义,
段分配,指示程序开始和结束等功能。
常用:
• 数据定义(变量定义)语句:DB,DW,DD • 符号定义语句:EQU • 段定义语句:SEGMENT…ENDS • 段分配语句:ASSUME • 过程定义语句:PROC…ENDP • 程序开始、结、4、5 提示: 第2题题目意思为求汇编时所形成的指令,
CH4(2) 汇编语言程序设计
28
第四章
读程序:分析程序执行过程、功能及特点
例7:数据段定义两个字节型数组,编程序实现数组 分别求和(不计溢出),要求用子程序实现求和。 解:通过存储器来传递参数。子程序说明如下: 子程序名:SUB_SUM 功 能:求一数组之和 所用 REG:AX 入口参数:数组地址指针SI、 数组长度存于CX 出口参数:结果在AX中
12
第四章
入口 初始化部分
入口 初始化部分
循环体
修改参数
循环控制
循环体
修改参数
出口
循环控制 出口
(a)“先执行,后判断”结构
13
(b)“先判断,后执行”结构
第四章
两种循环结构都包括四部分: 1)初始化——设置循环次数、地址指针 2)循环体——核心,循环的全部指令 3)修改参数——改地址指针,为下次循环做准备 4)循环控制——修改循环次数,判断循环条件 决定是否继续循环
26Biblioteka 第四章过程设计注意以下三点: ⑴保护调用程序的断点:由CALL指令本身完成。 ⑵保护某些寄存器内容: 在子程序开头,用一组PUSH指令,保护寄存器原 来的内容;在子程序结尾,用一组POP指令,将寄 存器原来的内容恢复。 ⑶主程序和过程(子程序)间的参数传递。 入口参数:过程所需的初始数据。 出口参数:过程运行所得结果。
sub1 sub1 sub2 sub2
sub2 sub2 code
7
第四章
三、程序举例 1、顺序结构举例 例1:已知当前数据段中有一个十进制数字0~9的七 段代码表,其数值依次为40H、79H、24H、30H、 19H、12H、02H、78H、00H、18H。要求用XLAT指令 将十进制数57转换成相应的七段代码值,存到BX寄 存器中,编写完整的汇编源程序。 分析:先求5的七段代码值,再求数字7的; 需定义数据段、七段代码表:TAB,字节变量; 关键指令XLAT,表偏移地址放BX,原数字放入AL;
xt CH4汇编程序设计
16
9
习题 CH4 汇编语言程序设计
对下面两个数据段,请分析偏移地址为10H和11H的 两个字节中的数据是一样的吗?为什么? DTSEG SEGMENT | DTSEG SEGMENT ORG 10H | ORG 10H DATA1 DB 72H | DATA1 DW 7204H DB 04H | DTSEG ENDS DTSEG ENDS | 不一样. 分别是72H, 04H和04H, 72H. 因为字数据存储时低8位存放在低字节,高8位存在 高字节。
12
习题 CH4 汇编语言程序设计
分析填空 MOV BL,09H ;执行后 BL=___09H______ MOV AL,05H ;执行后 AL=___05H______ ADD AL,BL DAA ;执行后 AL=___0EH______ ;执行后 AL=___14H______ BL=___09H______
习题 CH4 汇编语言程序设计
设有100个字节数据(无符号数),存放在数据段中EA=2000H 的存储区内。以下程序片断应能从该数据区中找出最大的一 个数并存入同一数据段EA=21OOH的单元中,请完成该程序。 MAX: MOV BX, 2000H ; M0V AL,[BX] M0V CX, 63H(或99) ; LOOP1: INC BX CMP AL,[BX] ; JAE LOOP2 MOV AL,[BX] LOOP2: DEC CX ; JNZ LOOP1 M0V [2100H] ,AL
10
习题 CH4 汇编语言程序设计
若STR是字符串的首地址, 指出下列程序的功能,并 将语句加上注解。 LEA BX,STR ;取STR 的偏移量放到BX中 MOV CX,20 ;设置循环次数________ LP: CMP [BX],‘*’ JNZ NEXT ;BX所指单元内容不为‘*’,则转移至 MOV [BX],‘$’ NEXT NEXT:INC BX ;将BX所指单元用‘$’替代 LOOP LP ;BX加1,指向下一个单元 HLT ;CX-1不等于0则转移至LP处,继续循环 程序的功能:将STR开始的前20个字符中的 ‘*’用‘$’替代 11
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4.3 循环程序设计
例1:片内RAM中存放有 10个数据,首地址为 30H,编程将数据块传送 到片外RAM以1000H为首 MAIN: 地址的存储单元中。 解:单重循环程序,循 环初始化:①片内RAM首 LOOP: 地址30H②片外RAM首地 址1000H③数据块长度10。 循环控制:对数据块长度 进行判断,10个数据传 送完,存放数据块长度 的寄存器内容为零,则 退出循环。
4.1 程序设计概述
4、划分模块应遵循的原则 ①高内聚性。每个模块应具有独立的功能,能产生一个明确的结果。 ②低耦合性。 模块之间的控制耦合应尽量简单,数据耦合应尽量少。 ③模块长度适中。模块过 长,则分析和调试困难;模块过短,则连接关系复杂,信息交换过于频繁。 5、程序设计的一般技巧 Ø尽量采用循环结构和子程序结构,减少程序代码长度。 Ø尽量少用无条件转移指令,使程序条理更加清楚,从而减少错误。 Ø对于通用的子程序,除了作为子程序入口参数的寄存器外,子程序中用到的其 它寄存器的内容应压入堆栈,即保护现场。 Ø在中断处理程序中,除了要保护中断处理程序中用到的寄存器外,还要保护标 志寄存器。 Ø用累加器传递入口参数或返回参数比较方便,在子程序中,一般不必把累加器 内容压入堆栈。
Байду номын сангаас
4.1 程序设计概述
六、常用伪指令—— DW(Define Word)定义字指令 功能:从ROM指定地址开始定义字数据。 格式:[标号:] DW 字数据 注意:字数据高8位在前(低地址),低8位在后(高地址);多个字数据之间 用逗号隔开,如果逗号之间没有数据,汇编器默认为0000H。 用途:定义16位地址表。 例如: ORG 1000H TAB: DW 0FFFEH,,0102H,1ACH,814,-814 生成目标文件代码:(1000H)=FFH, (1001H)=FEH, (1002H)=00H, (1003H)=00H, (1004H)=01H, (1005H)=02H, (1006H)=01H, (1007H)=ACH (1008H)=03H, (1009H)=2EH,(1010H)=FCH, (1011H)=D2H
4.1.4 程序设计方法和技巧 1、程序设计的一般步骤 分析工作任务->确定解决问题的算法-> 画程序流程图-> 分配程序与数据空间> 编写源程序->调试、修改源程序。 2、程序设计的一般原则 模块化的程序设计方法,尽可能高的时间和空间效率。 3、模块化程序设计方法的特点 ①单个模块结构的程序功能单一,易于编写、调试和修改。 ②程序可读性好,便于功能扩展和版本升级。 ③对于使用频繁的子程序可建立子程序库,便于多个模块调用。 ④可实现多人同时进行程序编写和调试工作。
4.3 循环程序设计
循环程序的结构一般包括以下几部分: Ø循环初始化——进入循环处理前必需的环节,完成循环前的准备工 作。包括给工作寄存器(或其它存储单元)设置计数初值、地址指针、 数据块长度等。 Ø循环处理——是需要多次重复执行的程序段,是循环程序的核心, 用于完成主要的计算和操作任务。 Ø循环控制——用条件转移指令控制循环是否继续。每循环一次,根 据循环结束条件进行一次判断;当满足条件时,停止循环,执行其他 程序;否则,继续循环。 Ø多重循环——循环体内包含有其它循环程序。 循环程序一般有两种编写方法: Ø先循环处理后循环控制(即先处理后判断) Ø先循环控制后循环处理(即先判断后处理)
汇编(汇编程序) 源程序 (汇编语言) 反汇编(汇编程序) 目的程序 (机器语言)
4.1 程序设计概述
一、常用伪指令—— ORG(ORiGin)汇编起始指令 功能:规定目标程序在ROM中的起始地址。 格式:[标号:] ORG 16位地址或标号 例如:ORG 0000H MOV A,#12H ; ; 指令存放到ROM的0000H单元(也可写成00H)
4.1 程序设计概述
五、常用伪指令—— DB(Define Byte)定义字节指令 功能:从ROM指定地址开始定义字节数据或ASCII码字符 。 格式:[标号:] DB 字节数据或ASCII码字符或字符串 注意:多个字节数据或ASCII码字符之间要用逗号相隔,如果逗号 之间没有数据,汇编器默认为00H。 用途:定义8位常数表。 例如: ORG 1000H TAB: DB 50H,10,01010111B,”HELLO” (1000H)=50H,(1001H)=0AH,(1002H)=57H,(1003H)=48H, (1004H)=45H,(1005H)=4CH,(1006H)=4CH,(1007H)=4FH
4.2 顺序程序设计
ORG 0000H 例1:有一个16位二进制负数的 LJMP MAIN 补码存放在片内RAM 30H、 ORG 0030H 31H单元内,求它的原码的绝对 MAIN: MOV A,31H CPL A 值并将它存放到片内RAM 40H、 ADD A,#01H 41H单元。
解:设定片内RAM 30H单元存 放高位,31H单元存放低位,其 它单元与之类同。 补码取反后要加1,绝对值要去 掉符号位。
4.1 程序设计概述
4.1.2 汇编语言源程序的编辑与汇编
单片机开发应用中,一般采用汇编语言和C语言编写程序,要想很好地掌握和 应用单片机首先要掌握汇编语言。 n汇编语言源程序:用汇编语言编写的程序。 n汇编语言语句分两类:指令性语句和指示性语句。 ⑴指令性语句:由指令组成并由CPU执行的语句。 格式: [标号:] 操作码助记符 [目的操作数] [,源操作数] [;注释] ⑵指示性语句(伪指令语句):由伪指令组成但不被CPU执行,用来告诉汇编 程序如何对程序进行汇编的指令。 格式:[标号:] 伪操作 操作数 [,操作数,......] [;注释] 伪指令(汇编指令):不是真正的指令,不属于指令系统,无对应的机器码, 是在汇编时供汇编程序识别并用来对汇编过程进行某种控制的指令。
MOV 41H,A
;低8位补码送入A ;低8位取反 ;补码取反后要加1 ;存放原码绝对值低8位 ;高8位补码送入累加器A ;高8位取反 ;加上低8位的进位 ;去掉最高位符号位 ;存放原码绝对值高7位 ;暂停
MOV A,30H CPL A ADDC A,#00H ANL A,#7FH MOV 40H,A SJMP $ END
4.1 程序设计概述
汇编语言源程序的汇编
汇编语言源程序必须要转换为机器码(即目的程序),计算机才能执 行,这个转换过程称为汇编。 汇编方法: (1)手工汇编—通过查指令编码表把汇编语言源程序翻译成机器码。 (2)机器汇编—用汇编程序(不同的指令系统汇编程序不同) 把用汇编 语言源程序翻译成由机器语言表示的目的程序。 反汇编:是在分析程序存储器中的程序时,将机器语言翻译成汇编语 言过程。
4.1 程序设计概述
4.1.1 程序设计语言
1. 机器语言——能被计算机直接识别和执行的二进制代码序列。 优点:执行速度快、占用内存少等。 缺点:编写难、识别难、记忆难、查错难、交流难。 2. 汇编语言——面向机器的一种用助记符来表示的程序设计语言。 优点:比用机器语言方便、直观、易懂、易用、易记。可以编写出结构紧凑、运行时间 精确的程序。非常适合于实时控制的需要。 缺点: 对于CPU不同的单片机,其汇编语言一般是不同的,程序移植性差。 3. 高级语言——面向过程并能独立于计算机硬件结构的通用程序设计语言。 优点:易学、易懂,具有通用性强、易于移植等优点。 缺点:高级语言的语句功能强,一条语句往往相当于许多条指令,编译后占用较多的存 储空间,执行时间长,且不易精确掌握,故在高速实时控制中一般是不适用的。
ORG 0000H LJMP MAIN ORG 0100H MOV R1,#30H MOV R2,#10 MOV A,@R1 MOVX @DPTR,A INC R1 INC DPTR DJNZ R2,LOOP SJMP $ END ;置片内RAM地址指针30H ;数据块的长度 ;从片内RAM取数据 ;数据传送到片外RAM ;修改片内RAM地址指针 ;修改片外RAM地址指针 ;循环次数未到10次,转移 MOV DPTR,#1000H ;置片外RAM地址指针1000H
4.1 程序设计概述
开始 初始化 处理 1 处理 2 处理 3 处理 4 结束 N 开始 循环初始化 循环处理 循环控制 条件满足? Y 循环结束 结束 开始 初始化 处理 1 条件满足? 条件满 Y 处理 2 处理 4 结束 N
处理 3
顺序程序流程图
循环程序流程图
分支程序流程图
4.1 程序设计概述
功能:把操作数段中的数据或地址赋值给标号字段中的字符名称 。 格式:字符名称 EQU 数值或汇编符号 注意:字符名称必须先赋值后使用,故EQU指令通常放在源程序的开头。 EQU可定义8位或16位的数据或地址。 例如: ABC EQU 30H ACB EQU R3 MOV A,ABC MOV A,ACB ;ABC与30H等值 ;ACB与R3等值 ;把片内RAM30H单元中的数据送入A中 ;把R3中的数据送入累加器A中
注意:在一个源程序中,可多次使用ORG指令,以规定不同程序段的起始位 置,地址应从小到大顺序排列,不得重叠。 二、常用伪指令—— END汇编终止指令 功能:终止源程序的汇编工作。 格式:[标号:] END 注意:一个源程序中只能有一条END指令,且必须位于程序最后。
4.1 程序设计概述
三、常用伪指令—— EQU(EQUate)赋值指令
4.1 程序设计概述
四、常用伪指令—— BIT位地址赋值指令
功能:把位地址赋给字符名称。 格式:字符名称 BIT 例如: AB BIT 30H AC BIT P1.0 MOV C,AB CLR AC ;AB与30H等值 ;AC与P1.0等值 ;把位地址区30H单元中的数据送入位累加器C中 ;把P1.0中的内容清零 位地址 其中:位地址可以是绝对地址,也可以是符号地址(位符号名称)。
4.1 程序设计概述
4.1.3 汇编语言程序的基本结构