第四章 汇编语言程序设计知识
汇编语言程序设计

汇编语⾔程序设计第4章汇编语⾔程序设计§4.1 汇编语⾔的模式⼀、汇编语⾔源程序的⼀般模式[Name 模块名][Title 标题][定义宏][定义数据段][定义附加段][定义堆栈段]定义代码段源程序结束中括号括起的部分可以省略,可见在⼀个汇编语⾔源程序中必须要定义代码段,并且必须有源程序结束指令。
⼆、8086汇编语⾔程序的⼀个例⼦Pg90。
§4.2 语句⾏的构成汇编语⾔中的语句⼀般分为两种类型:指令性语句和指⽰性语句。
指令性语句的格式为:[标号:] 助记符 [操作数1[,操作数2]] [;注释]指⽰性语句的格式为:[名称] 助记符 [参数1,参数2,……] [;注释]标号和名称都是编程⼈员根据需要和⼀定的规则任意取的。
也可以认为汇编语⾔的语句⾏是由标记和分隔符(空格)构成。
⼀、标记1.IBM宏汇编的字符集(1)字母(2)数字符(3)特殊字符2.界符⽤于定界⼀个标记的结束或⼀个标记的开始,本⾝具有⼀定的意义。
3.常量出现在汇编语⾔源程序中的固定值称为常量。
(1)数值常量①⼆进制:以字母B结束。
②⼗进制:以字母D或⽆字母结束。
③⼋进制:以字母Q(或O)结束。
④⼗六进制:以字母H结束。
(2)字符常量指⽤单引号或双引号引起的字符或字符串。
4.标识符由程序员⾃⼰建⽴的字符序列(标号或名称)。
⼀个标识符不能超过31个字符,不能以数字开头。
5.保留字汇编语⾔中具有特殊意义的字符序列。
6.注释⼀⾏中分号以后的部分。
⽤于对⼀段或⼀⾏程序进⾏说明,便于阅读和理解。
⼆、符号具有⼀定意义的字符序列。
1.寄存器名2.变量段属性、偏移属性、类型属性3.标号段属性、偏移属性、类型属性4.常数5.其它三、表达式由操作数和运算符组合⽽成的序列。
1.操作数(1)⽴即数(2)寄存器操作数(3)存储器操作数2.运算符(1)算术运算符+、-、*、/、MOD(求余)(2)逻辑运算符AND、OR、NOT、XOR(3)关系运算符EQ、NE、LT、LE、GT、GE结果为“假”时,返回0,结果为“真”时,返回⼆进制全1。
第四章 汇编语言程序设计

一、算术运算符
包括:+,-,*,/(取商),MOD(取余),SHL,SHR 特点:①运算对象及结果均为整数 ②地址只能加减 例: DA1 DA2 MOV MOV MOV MOV DB 1,2,3,4 DB 20 AX,30*5 汇编时 AL,31MOD5 AL,31/5 AL,DA2-DA1
MOV MOV MOV MOV
如:加法:1001、1D、2B……
特点:计算机能够直接识别,执行速度快;
但不方便记忆和编程
2、汇编语言(Assembly Language) 用助记符来表示指令,如:加法:ADD…… 特点:机器不能识别,需翻译;但仍然面向硬件, 执行速度较快;多用于编制系统程序、实时控制和通 信程序。 3、高级语言(High-level Language) 用数学语言和自然语言编程; 如:加法:+,输出:Printf… 特点:编程方便简单,无需了解机器硬件;但机器 不能识别,需要庞大的翻译系统,速度较慢。
类型 返回值 1 2 4 类型 返回值 -1 [FFH] -2 [FEH] DB DW DD
变量
标号
NEAR FAR
数值返回运算符(续)
LENGTH:
•对于一般变量,返回1; •对于DUP定义的变量,返回单元数(直接返回第一
个DUP前的N值); 说明:DUP为复制操作符,格式:N DUP(表达式); N表示复制次数,表达式为复制内容 例:2 DUP(1,2) 等价于 1,2,1,2
则:COUNT的值为5
COUNT表示:DA1,DA2占的字节总数(长度之和) 七、优先级(P136 表4-3)
4.3 伪指令语句
在汇编时进行处理,主要完成变量定义,段定义,
段分配,指示程序开始和结束等功能。
第4章 汇编语言程序设计

因此, 因此,对例子中的存储器地址作如下运 算: SUM+2 CYCLE-5 NOT_DONE-GO 是有效的表达式。 是有效的表达式。而 SUM-CYCLE
(2)逻辑运算符 逻辑运算符是按位操作的AND、OR、 、 逻辑运算符是按位操作的 、 XOR和NOT。 和 。 1010 1010 1010 1010B AND 1100 1100 1100 1100B=1000 1000 1000 1000B 1100 1100 1100 1100B OR 1111 0000 1111 0000B=1111 1100 1111 1100B NOT 1111 1111 1111 1111B=0000 0000 0000 0000B
ASSUME CS:MY_CODE, ;规定 和DS 规定CS和 : 的内容 DS:MY_DATA : PORT_VA1 EQU 3 ;端口的符号名 GO: MOV AX, MY_DATA ;DS : 初始化为MY_DATA 初始化为 MOV DS, AX MOV SUM, 0 ;清SUM单元 单元
变量可以具有以下几种寻址方式: 变量可以具有以下几种寻址方式: ① 直接寻址 ② 基址寻址 变址(索引) ③ 变址(索引)寻址 ④ 基址变址寻址
2.运算符(Operators) .运算符( ) 算术运算符( Operators) ① 算术运算符(Arithmetic Operators) 逻辑运算符( Operators) ② 逻辑运算符(Logical Operators) 关系运算符( Operators) ③ 关系运算符(Relational Operators) 分析运算符( Operators) ④ 分析运算符(Analytic Operators) 合成运算符( Operators) ⑤ 合成运算符(Synthetic Operators)
第4章 汇编 语言程序设计

汇编时,遇到“ 就停止“翻译” 因此, 汇编时,遇到“;” 就停止“翻译”。因此,注释字 段不会产生机器代码。 段不会产生机器代码。 4.1.3 伪指令 在汇编语言源程序中应有向汇编程序发出的指示信息, 在汇编语言源程序中应有向汇编程序发出的指示信息, 向汇编程序发出的指示信息 告诉它如何完成汇编工作,这是通过伪指令来实现。 伪指令来实现 告诉它如何完成汇编工作,这是通过伪指令来实现。 伪指令不属于指令系统中的汇编语言指令,它是程序员 伪指令不属于指令系统中的汇编语言指令, 发给汇编程序的命令,也称为汇编程序控制命令。 发给汇编程序的命令,也称为汇编程序控制命令。 命令 汇编程序控制命令 只有在汇编前的源程序中才有伪指令。 “伪”体现在 只有在汇编前的源程序中才有伪指令。 汇编后,伪指令没有相应的机器代码产生。 汇编后,伪指令没有相应的机器代码产生。 没有相应的机器代码产生 伪指令具有控制汇编程序的输入/输出、 伪指令具有控制汇编程序的输入/输出、定义数据和符 号、条件汇编、分配存储空间等功能。 条件汇编、分配存储空间等功能。
6
经过十几年努力,C51已成为单片机的实用高级编程语言。 经过十几年努力,C51已成为单片机的实用高级编程语言。 已成为单片机的实用高级编程语言 尽管目前已有不少设计人员使用C51来进行程序开发, 尽管目前已有不少设计人员使用C51来进行程序开发,但在 C51来进行程序开发 对程序的空间和时间要求较高的场合,汇编语言仍必不可少 程序的空间和时间要求较高的场合, 空间 要求较高的场合 。 在这种场合下,可使用C语言和汇编语言混合编程。 在这种场合下,可使用C语言和汇编语言混合编程。在很多 需要直接控制硬件且对实时性要求较高的场合,则更是非用 需要直接控制硬件且对实时性要求较高的场合, 汇编语言不可。 汇编语言不可。 掌握汇编语言并能进行程序设计, 掌握汇编语言并能进行程序设计,是学习和掌握单片机程 序设计的基本功之一。 序设计的基本功之一。 基本功之一 4.1.2 汇编语言语句和格式
四章汇编语言程序设计ppt课件

ENDS,ASSUME,END ,…. 保留字:SEGMENT ENDS OFFSET SIZE DB
DW DD MOV PUSH ADD SUB MUL DIV INC DEC LOOP PROC ENDP CALL RET END
类别名
CODE、DATA、STACK(同名同类别段连续存放)
第4章 汇编语言程序设计
伪操作命令之三:段定义伪指令
段寄存器说明伪指令ASSUME
ASSUME 段寄存器名:段名[段寄存器名:段名[…..]]
例:
CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
MAIN:
……
CODE ENDS ENDS MAIN
;指定第一条要执行的指令标号
注:1、该伪指令用于明确用SEGMENT定义的段的类型, 使编译程序能生成目标代码程序。
2、在源程序中,该伪操作放在可执行程序的前面。 3、该指令没有给段寄存器赋予实际的初值。这项工作要通
过写指令来完成,其中代码段不需要赋值。
+、-、*、/、MOD、SHL、SHR 都可应用于数字运算。 +、- 可以用于表示存储器操作数的地址,或两个存储器
单元(同一段内)的地址偏移量之差。 例:SUM - 2
CYCLE - GO
第4章 汇编语言程序设计
运算符之二:逻辑运算符
AND、OR、XOR、NOT 按位的逻辑运算 例:IN AL,PORT_VAL
DATA2 DB 0C1H,36H,9EH,0D5H,20H;加数
DATA ENDS;数据段结束
CODE SEGMENT;定义代码段
第四章-汇编语言程序的设计

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

RO 20HBCMDH BCDL
SWAP A ORL A, #30H MOV 21H, A SJMP $
;BCDH数送A的低4位 21 0011
;完成转换 @R0 ;存数
H22HB0C001D0HBCD 01000L
END
回目录 上页 下页
方法1小结:
以上程序用了8条指令,15个内存字节,执行时间为9个 机器周期。
21 0011BCDH H22H0011BCDL
回目录 上页 下页
程序:
ORG 1000H
MOV R0, #22H ;R0 22H MOV @R0,#0 ; 22H 0 MOV A, 20H ;两个BCD数送A
A
B00C01D01H0BB0CC0D0DHL
XCHD A, @R0 ;BCDL数送22H ORL 22H, #30H ;完成转换
例4-7:设30H单元存放的是一元二次方程ax2+bx+c = 0
根的判别式△= b2 – 4ac的值。
试根据30H单元的值,编写程序,
判断方程根的三种情况。
在31H中存放“0”代表无实根,
存放“1”代表有相同的实根,
存放“2”代表两个不同的实根。
解:△为有符号数,有三种情况,这是一多重分支程序
即小于零,等于零、大于零。
R3
R2
回目录 上页 下页
程序:
ORG 1000H CLR C CLR A SUBB A, R0 MOV R2, A CLR A
SUBB A, R1 MOV R3 , A SJMP $ END
;CY 0
;A 0
;低字节求补
;送R2
;A清零 R3 0000
;高字节求补 0000
汇编语言程序设计(5)

例:
第 4 章 汇编语言程序设计简介
ORG 1000H
BUF1: DB 38H, 7FH, 80H
BUF2: DB 45H, 66H
ORG伪指令指定了标号BUF1的地址为1000H, 而DB伪 指令是将其后的二进制数表38H, 7FH, 80H依次存放在1000H, 1001H, 1002H 3 个连续单元之中, BUF2也是一个标号, 其地 址与前一条伪指令连续, 即1003H, 1004H地址单元中依次存 放 45H, 66H。
如果在程序中要多次使用到某一地址,由EQU指令将其赋值 给一个字符名称,一旦需要对其进行变动,只要改变EQU命 令后面的数字即可,而不需要对程序中涉及到该地址的所有 指令逐句进行修改。
13
第 4 章 汇编语言程序设计简介
注意, 由EQU等值的字符名称必须先赋值后使用,且 在同一个源程序中,同一个标号只能赋值一次。 例:
H)=10H。
18
第 4 章 汇编语言程序设计简介
六、BIT——位地址符号指令
指令功能为:将位地址赋值给指定的符号名称,通常用于位符 号地址的定义。
指令如下:
字符名称 BIT 位地址
例如,X1 BIT P1.0
汇编结果为将位地址P1.0赋给变量X1,即在程序中便可 使用X1代替位地址P1.0。
19
(c)多分支
30
第 4 章 汇编语言程序设计简介
2. 一般分支程序结构实例
【例5】 x, y均为8位二进制数, 设 x存入R0, y存入R1, 求解:
1 y 1
0
x0 x0 x0
31
第 4 章 汇编语言程序设计简介
程序如下:
START:
CJNE R0,#00H,SUL1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
高字节 低字节
53H 54H 55H
R1→55H
低字节 中字节 高字节 低字节 中字节
+
高字节
低字节
00H CY
50H 51H 52H
54H 53H R0→ 52H 51H 50H 20H
加数
被加数 和
高字节
...
00H
CY
24
2013-8-7
南京航空航天大学金城学院
程序:
MOV MOV MOV MOV
2013-8-7 南京航空航天大学金城学院 23
第4章 汇编语言程序设计知识
例: 三字节无符号数相加,其中被加数在内部RAM的50H、51H和52H 单元中;加数在内部RAM的53H、54H和55H单元中;要求把相加 之和存放在50H、51H和52H单元中,进位存放在位寻址区的00H 位中。
内部RAM
2013-8-7
压缩式BCD码分解成为单字节BCD码。 R0,#40H ;设指针 片内 RAM A,@R0 ;取一个字节 42H 0 十 R2,A ;暂存 41H 0 个 A,#0FH ;高半字节清0 40H 十 个 R0 @R0,A ;保存数据个位 A,R2 A ;十位换到低半字节 A,#0FH R0 @R0,A ;保存数据十位
2013-8-7 南京航空航天大学金城学院 5
第4章 汇编语言程序设计知识
4.1
编程的步骤、方法和技巧
编程的步骤 编程的方法和技巧 汇编语言程序的基本结构
4.1.1 4.1.2 4.1.3
2013-8-7
南京航空航天大学金城学院
6
第4章 汇编语言程序设计知识
4.1.1
编程的步骤
• 一、分析问题 • 二、确定算法 • 三、画程序流程图 • 四、编写程序
〔标号:〕〔操作码〕〔操作数〕;〔注释〕 • 每个字段之间要用分隔符分隔,而每个字段内 部不能使用分隔符。可以用作分隔符的符号: 空格“ ”、冒号“:”、逗号“,”、分号 “;”等。 例:LOOP:MOV A,#00H;立即数00H→A
2013-8-7
南京航空航天大学金城学院
12
第4章 汇编语言程序设计知识
;被加数的低字节地址 ;加数的低字节地址
;低字节相加 ;存低字节相加结果
;中间字节带进位相加 ;存中间字节相加结果
;高字节带进位相加 ;存高字节相加结果
;存放进位的单元地址 ;进位送00H位保存
第4章 汇编语言程序设计知识
例: MOV MOV MOV ANL INC MOV MOV SWAP ANL INC MOV
第4章 汇编语言程序设计知识
第四章 汇编语言程序设计及知识
4.1 编程的步骤、方法和技巧 4.2 汇编语言源程序的编辑和汇编
2013-8-7
南京航空航天大学金城学院
1
第4章 汇编语言程序设计知识
计算机语言的发展
机器语言
高级语言
FORTRAN
BASIC COBOL PASCAL
汇编语言
C/C++
JAVA
R0,#20H @R0,A C,ACC.0 00H,C
MOV MOV MOV ADD MOV DEC DEC MOV ADDC MOV DEC DEC MOV ADDC MOV CLR ADDC MOV MOV
R0,#52H R1,#55H A,@R0 A,@R1 @R0,A R0 R1 A,@R0 A,@R1 @R0,A R0 R1 A,@R0 A,@R1 @R0,A A A,#00H R0,#00H @R0,A
明程序设计过程的一种直观的表示。
• 流程图步骤分得越细致,编写程序是也越方便。 • 画流程图是程序结构设计采用的一种重要手段。 • 一个系统软件有总的流程图(主程序框图)和局部的 流程图。 • 流程图常采用的图形和符号。
2013-8-7 南京航空航天大学金城学院 10
第4章 汇编语言程序设计知识
椭圆框
2013-8-7 南京航空航天大学金城学院 21
第4章 汇编语言程序设计知识
4.1.3
汇编语言程序的基本结构
一、顺序程序 二、分支程序 三、循环程序
2013-8-7
南京航空航天大学金城学院
22
第4章 汇编语言程序设计知识
一、顺序程序
• 顺序程序是最简单的程序结构,即顺序结构。 • 程序按顺序一条一条地执行指令。
或桶形框
:表示程序的开始或结束。
矩形框
菱形框
:表示要进行的工作。
:表示要判断的事情,菱形框内 的表达式表示要判断的内容。
圆圈 指向线
2013-8-7
:表示连接点 :表示程序的流向
南京航空航天大学金城学院 11
第4章 汇编语言程序设计知识
四、编写程序
• 用89C51汇编语言编写的源程序行(一条 语句)包括四个部分,也叫四个字段:
一、模块化的程序设计方法 二、编程技巧
2013-8-7
南京航空航天大学金城学院
17
第4章 汇编语言程序设计知识
一、模块化的程序设计方法
1、程序功能模块化的优点 2、划分模块的原则
2013-8-7
南京航空航天大学金城学院
18
第4章 汇编语言程序设计知识
1、程序功能模块化的优点
• 单个模块结构的程序功能单一,易于编写、调 试和修改。 • 便于分工,从而可使多个程序员同时进行程序 的编写和调试工作,加快软件研制进度。 • 程序可读性好,便于功能扩充和版本升级。 • 对程序的修改可局部进行,其它部分可以保持 不变。 • 对于使用频繁的子程序可以建立子程序库,便 于多个模块调用。
2013-8-7 南京航空航天大学金城学院 4
第4章 汇编语言程序设计知识
为什么书写源程序时必须在某些数 据或地址前面多添一个“前导”0, 否则汇编就通不过?
• 由于部分十六进制数是用数字和字母来表示的, 而程序内的标号也常用字母表示。为了将文字和 数字区分开,几乎所有的汇编语言都规定,凡是 以字母打头的数据量,应当在前面添加一个数字 “0”。至于直接地址量,它也是数据量的一种, 前面也应该添加数字“0”。例如: • MOV A,#0FFH ;字母开头的数据量 • MOV A,0D0H ;字母开头的地址量
2013-8-7 南京航空航天大学金城学院 7
第4章 汇编语言程序设计知识
一、分析问题
• 对需要解决的问题进行分析,以求对问 题有正确的理解。如:
– 解决问题的任务是什么? – 工作过程? – 现有的条件,已知数据,对运算的精度和速 度方面的要求? – 设计的硬件结构是否方便编程?
2013-8-7
2013-8-7 南京航空航天大学金城学院 13
第4章 汇编语言程序设计知识
操作码
• 操作码是必不可少的。 • 它用一组字母符号表示指令的操作码。 在89C51中,由89C51的指令助记符组 成。
2013-8-7
南京航空航天大学金城学院
14
第4章 汇编语言程序设计知识
操作数
• • • • • • 汇编语言指令可能要求或不要求操作数 若有两个操作数,操作数之间用逗号“,”分开。 操作数包括的内容有: (1)工作寄存器:由PSW.3和PSW.4规定的当前工作寄存 器区中的R0~R7。 (2)特殊功能寄存器:21个SFR的名字。 (3)标号名:赋值标号—由汇编指令EQU等赋值的标号; 指令标号—指令标号指示的指令的第一字节地址是该标号的 值。 (4)常数:可用二进制(B)、十进制、十六进制(H), 若常数以字符开头,前面加0。 (5)$:用来表示程序计数器的当前值。 (6)表达式:汇编时,计算出表达式的值填入目标码。
转向n-1分支
转向n分支
2013-8-7
南京航空航天大学金城学院
29
第4章 汇编语言程序设计知识 例: 128种分支转移程序。 功能:根据入口条件转移到128个目的地址。 入口:(R3)=转移目的地址的序号00H~7FH。 出口:转移到相应子程序入口。
JMP_128:MOV RL MOV JMP JMPTAB:AJMP AJMP ┇ AJMP A,R3 A DPTR,#JMPTAB @A+DPTR ROUT00 ROUT01 ┇ ROUT7F
• 模块长度适中。20条~100条的范围较合适。
2013-8-7 南京航空航天大学金城学院 20
第4章 汇编语言程序设计知识
二、编程技巧
1、尽量采用循环结构和子程序。
2、尽量少用无条件转移指令。 3、对于通用的子程序,考虑到其通用性,除了用于 存放子程序入口参数的寄存器外,子程序中用到 的其他寄存器的内容应压入堆栈(返回前再弹 出),即保护现场。 4、在中断处理程序中,除了要保护处理程序中用到 的寄存器外,还要保护标志寄存器。 5、用累加器传递入口参数或返回参数比较方便,在 子程序中,一般不必把累加器内容压入堆栈。
南京航空航天大学金城学院 26
第4章 汇编语言程序设计知识
二、分支程序
• 程序分支是通过条件转移指令实现的,即根据 条件对程序的执行进行判断、满足条件则进行 程序转移,不满足条件就顺序执行程序。
• 分支程序又分为单分支和多分支结构。
• 多分支程序是首先把分支程序按序号排列,然
后按序号值进行转移。
2013-8-7
Hale Waihona Puke 标号• 标号是用户定义的符号地址。 • 一条指令的标号是该条指令的符号名字,标号 的值是汇编这条指令时指令的地址。 • 标号由以英文字母开始的1~8个字母或数字组 成,以冒号“:”结尾。 • 标号可以由赋值伪指令赋值,如果没有赋值, 汇编程序把存放该指令目标码第一字节的存储 单元的地址赋给该标号,所以,标号又叫指令 标号。
南京航空航天大学金城学院
27