第4章汇编语言程序设计基本方法1
汇编语言程序设计
汇编语⾔程序设计第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。
单片机学习第四章汇编语言程序设计
ORG START:CLR
MOV SUBB JC MOV XCH MOV NEXT: NOP SJMP END
1000H C A,60H A,61H NEXT A,60H A, 61H 60H,A
$
;0→CY
;做减法比较两数 ;若(60H)小,则转移
;交换两数
整理课件
【例4.6】将R2中的一位十六进制数转换为 ASCII码,结果仍存放于R2中。
MOV R0, #0 SJMP NEXT4 NEXT2:MOV R0,A DEC R0 NEXT4:MOV 31H,R0 SJMP $ END
;取X ;与5比较
;X<5,则转NEXT2 ; ;设10<X,Y=X十1
;与1l比较 ;x>10,则转NEXT4
;5≤X≤10,Y=0
;X<5,Y=X-1 ;存结果
MOV
@R0,A
;保存结果
SJMP $
;原地踏步
END
整理课件
【例4.2】假设两个双字节无符号数,分别存 放在R1R0和R3R2中,高字节在前,低字 节在后。编程使两数相加,用R2R1R0存放 和。 对多字节的加法,存在最高位的进位问题。 如果最高位有进位,则和的字节数要比加 数或被加数的字节数多一个。
经常用于定义一个地址表。Yi为双字节数据, 它可以为十进制或十六进制的数,也可以 为一个表达式。高位数在前,低位数在后。
整理课件
• 例如: ORG 1000H DATA:DW 3241H,1234H,78H 上述程序将对从1000H单元开始的6个单元 赋值,赋值情况如何呢? (1000H)=32H,(1001H)=41H, (1002H)=12H,(1003H)=34H, (1004H)=00H,(1005H)=78H。
汇编语言程序设计的基本方法
01
例2 编写程序,计算(W-(X*Y+Z-100))/W,其中W、X、Y、Z均为16位带符号数,计算结果的商存入AX,余数存入DX。
02
例3 把非压缩十进制数DAT1转换为压缩十进制数
例2编写程序,计算(W-(X*Y+Z-100))/W,其中W、X、Y、Z均为16位带符号数,计算结果的商存入AX,余数存入DX。
通常,编制一个汇编语言源程序应按如下步骤进行:
1
明确任务,确定算法。
2
绘制流程图(包括确定内存单元和分配寄存器)。
3
根据流程图编写汇编语言程序。
4
上机调试程序。
5
程序的基本结构有四种:顺序结构、分支结构、循环结构和子程序结构。
6
5.6 汇编语言程序设计的基本方法
5.6.1 顺序程序设计
顺序结构也称线性结构,其特点是其中的语句或结构被连续执行。 顺序程序是最简单的,也是最基本的一种程序结构。这种结构的程序从开始到结尾一直是顺序执行的,中途没有任何分支。从这种结构的流程图来看,除了有一个起始框,一个终止框外,就是若干执行框,没有判断框。指令指针IP值线形增加,IP=IP+1
条件
N
…
例4用比较指令和条件转移指令实现两路分支的程序段。
两路分支程序设计
例4用比较指令和条件转移指令实现两路分支的程序段。 … MOV AX,M ;假定M和N为有符号数 MOV BX,N CMP AX,BX ;比较 M和N的大小,影响标志位,准备条件 JG NEXT ;M>N时转移,注意若M、N为无符号数时用JA指令 …… ;分支程序2 JMP DONE NEXT: …… ;分支程序1 …… DONE:RET
X+20 (X≥0)
第四章 汇编语言程序设计
一、算术运算符
包括:+,-,*,/(取商),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章8086,8088微机汇编语言程序设计
2)段内偏移量(Offset) 它是标号与段起始地址之间相距的字节数,为一16位 无符号数。 3)类型(Type) 类型表示该标号所代表的指令的转移范围,分NEA R(近)与FAR(远)两种。NEAR类型的标号仅在 同一段内使用,用2字节指针给出转移的偏移量属性(即 只改变IP值,不改变CS值);而FAR类型的标号无此限 制,必须用4字节指针指出转移的段地址与段内偏移量。 当标号用作JMP或CALL等指令的目标操作数时,若 为段内转移或调用则采用NEAR类型;若为段间转移或 调用则应当采用FAR类型。 JMP FAR PTR LINE
第4章 8086/8088汇编语言程序设计
汇编语言程序设计是开发微机系统软件的基本 功,在程序设计中占有十分重要的地位。
由于汇编语言具有执行速度快和易于实现对硬件的控 制等独特的优点,所以至今它仍然是用户使用得较多的程 序设计语言。特别是在对于程序的空间和时间要求很高的 场合,以及需要直接控制设备的应用场合,汇编语言更是必 不可少了。 由于汇编语言本身的特点,本章将选择目前国内广泛 使用的IBM PC机作为基础机型,着重讨论8086/8088汇编 语言的基本语法规则和程序设计的基本方法,以掌握一般 汇编语言程序设计的初步技术。
(1)立即操作数 立即操作数在指令中直接给出,不需要使用 寄存器,也不涉及访问数据区的操作,只能作为 源操作数。立即操作数是整数,可以是1字节或 2字节。在汇编语言中,立即操作数用常量(包 括数值常量和符号常量)以及由常量与有关运算 符组成的数值表达式表示。 如:MOV BX,1000+5*3 (2)寄存器操作数 通用寄存器AX、BX、CX、DX、BP、 SP、DI、SI以及段寄存器CS、SS、D S、ES都可以作为操作数。如:MOV BX,AX
第4章 汇编 语言程序设计
汇编时,遇到“ 就停止“翻译” 因此, 汇编时,遇到“;” 就停止“翻译”。因此,注释字 段不会产生机器代码。 段不会产生机器代码。 4.1.3 伪指令 在汇编语言源程序中应有向汇编程序发出的指示信息, 在汇编语言源程序中应有向汇编程序发出的指示信息, 向汇编程序发出的指示信息 告诉它如何完成汇编工作,这是通过伪指令来实现。 伪指令来实现 告诉它如何完成汇编工作,这是通过伪指令来实现。 伪指令不属于指令系统中的汇编语言指令,它是程序员 伪指令不属于指令系统中的汇编语言指令, 发给汇编程序的命令,也称为汇编程序控制命令。 发给汇编程序的命令,也称为汇编程序控制命令。 命令 汇编程序控制命令 只有在汇编前的源程序中才有伪指令。 “伪”体现在 只有在汇编前的源程序中才有伪指令。 汇编后,伪指令没有相应的机器代码产生。 汇编后,伪指令没有相应的机器代码产生。 没有相应的机器代码产生 伪指令具有控制汇编程序的输入/输出、 伪指令具有控制汇编程序的输入/输出、定义数据和符 号、条件汇编、分配存储空间等功能。 条件汇编、分配存储空间等功能。
6
经过十几年努力,C51已成为单片机的实用高级编程语言。 经过十几年努力,C51已成为单片机的实用高级编程语言。 已成为单片机的实用高级编程语言 尽管目前已有不少设计人员使用C51来进行程序开发, 尽管目前已有不少设计人员使用C51来进行程序开发,但在 C51来进行程序开发 对程序的空间和时间要求较高的场合,汇编语言仍必不可少 程序的空间和时间要求较高的场合, 空间 要求较高的场合 。 在这种场合下,可使用C语言和汇编语言混合编程。 在这种场合下,可使用C语言和汇编语言混合编程。在很多 需要直接控制硬件且对实时性要求较高的场合,则更是非用 需要直接控制硬件且对实时性要求较高的场合, 汇编语言不可。 汇编语言不可。 掌握汇编语言并能进行程序设计, 掌握汇编语言并能进行程序设计,是学习和掌握单片机程 序设计的基本功之一。 序设计的基本功之一。 基本功之一 4.1.2 汇编语言语句和格式
第四章-汇编语言程序的设计
第四章汇编语言程序设计本章的汇编语言程序设计的主要容有:汇编语言程序设计概述、汇编语言程序的结构形式、汇编语言的伪指令。
(一个单片机应用系统和其它计算机系统一样,在完成一项具体工作的时候,它要按照一定的次序,去执行操作,这些操作实际上就是由设计人员,以单片机能够接受的指令编制的程序,那么无论计算机也好,单片机也好,实际上编制程序的过程,就是用计算机来反映设计者的编程思想,那么这一章中,我们将向大家介绍怎样使用单片机指令系统来编制一些应用程序。
在介绍之前,我们还是来学习汇编语言的一些基础知识)4.1 汇编语言程序设计概述1、计算机的汇编语言以助记符表示的指令,每一条指令就是汇编语言的一条语句。
(汇编语言程序设计实际上就是使用汇编指令来编写计算机程序。
汇编语言的语句有严格的格式要求)2、汇编语言的语句格式MCS-51汇编语言的语句格式表示如下:[<标号>]: <操作码> [<操作数>]; [<注释>]标号:指令的符号地址,有了标号,程序中的其它语句才能访问该语句。
①标号是由1~8个ASCII字符组成,但头一个字符必须是字母,其余字符可以是字母、数字或其它特定字符。
②不能使用汇编语言已经定义了的符号作为标号,如指令助记符、伪指令记忆符以及寄存器的符号名称等。
(同一个标号在程序中只能定义一次,不能重复定义;一条语句可以有标号,也可以没有标号,所以是否有标号,取决于程序中是否需要访问该语句。
)操作码:规定语句执行的操作容,操作码是以指令助记符表示的,是汇编指令格式中唯一不能空缺的部分。
操作数:给指令的操作提供数据或地址。
注释:是对语句或程序段的解释说明。
(在单片机中,这四个部分怎么加以区分呢?使用分界符)分界符(分隔符):用于把语句格式中的各部分隔开,以便于编译程序区分不同的指令段。
冒号(:)用于标号之后空格()用于操作码和操作数之间逗号(,)用于操作数之间,分割两个以上的操作数分号(;)用于注释之前。
单片机应用技术(第三版)第四章汇编语言程序设计课件
第4章 汇编语言程序设 计 实训4 信号灯的控制2
4.1 概述 4.2 简单程序设计 4.3 分支程序设计 4.4 循环程序设计 4.5 查表程序 4.6 子程序设计与堆栈技术 本章小结 习题4
第4章 汇编语言程序设计
实训4 信号灯的控制2
1. 实训目的 (1) 掌握汇编语言程序的基本结构。 (2) 了解汇编语言程序设计的基本方法和思路。 2. 实训设备与器件 (1) 实训设备:单片机开发系统、微机等。 (2) 实训器件与电路:参见实训1电路图。 3. 实训步骤与要求 (1) 运行程序1,观察8个发光二极管的亮灭状态。
ORG 0000H ;程序从地址0000H开始存放
START: MOV P1,#00H
;把立即数00H送P1口,点亮
;所有发光二极管
ACALL DELAБайду номын сангаас ;调用延时子程序
MOV P1,#0FFH
;灭掉所有发光二极管
第4章 汇编语言程序设计
(2) 在单片机开发调试环境中,将内部RAM的20H单元内
容修改为00H,运行程序2,观察8个发光二极管的亮灭状态;
重新将内部RAM的20H单元内容修改为80H,再次运行程序2,
观察8个发光二极管的亮灭状态。
(3) 运行程序3,观察8个发光二极管的亮灭状态。
程序1:所有发光二极管不停地闪动。
第4章 MCS-51单片机汇编语言程序设计
程序清单:
送转移地址序号
A,R3 ;取序号 A ;序号乘2 DPTR, #JTAB ;32个子程序 首地址送DPTR JMP @A+DPTR ;根据序号转移 JTAB: AJMP ROUT00 ;32个子程序首地址 AJMP ROUT01 … MP: MOV RL MOV AJMP ROUT31
第 四 章 MCS-51 单 片 机 汇 编 语 言 程 序 设 计
【例4-1】
双字节二进制数求补。
程序说明:对R3(高8位)、R2(低8位)中的二进制定 点数取反加1即可得到其补码。
开始
程序清单:
BINPL:MOV A,R2 CPL A ADD A,#01H MOV R2,A MOV A,R3 CPL A ADDC A,#00H MOV R3,A RET ;低位字节取反 ;加1 ;低位字节补码送R2 ;高位字节取反 ;加进位 ;高位字节补码送R3
散转生成正确偏移号
置换指令地址表首址
转入R3指示的程序
AJMP
……
AJMP
第 四 章 MCS-51 单 片 机 汇 编 语 言 程 序 设 计
3.循环程序
包括:循环初始化、循环处理、循环控制
开始 置初值 循环体 循环结束? Y 循环修改 N 循环体 循环结束? N Y 结束 循环修改 结束 开始 置初值
;调用查表子程序 ; 暂存R1中 ;调查表子程序 ;平方和存A中 ;等待
取第一个数→A 调查表子程序 结果存入R1 取下一个数→A 调查表子程序 两数平方相加 存结果
子程序清单:
SQR: INC A ;加RET占的一个字节 MOVC A,@A+PC ;查平方表 RET TAB: DB 0,1,4,9,16 DB 25,36,49,64,81 END
第4章80C51的汇编语言程序设计
4.3.1 顺序程序
(无分支、无循环)
4.3 基本程序结构
【例4-1】片内RAM的21H单元存放一个十进制数据十位的ASCII码,22H单元存放该数据个位的ASCII码。编写程序将该数据转换成压缩BCD码存放在20H单元。
ORG 0040H START:MOV A,21H ;取十位ASCII码 ANL A,#0FH ;保留低半字节 SWAP A ;移至高半字节 MOV 20H,A ;存于20H单元 MOV A,22H ;取个位ASCII码 ANL A,#0FH ;保留低半字节 ORL 20H,A ;合并到结果单元 SJMP $ END
1400H
32H
4AH
00H
3CH
1401H
1402H
1403H
大端模式
定义常值为符号名伪指令EQU
符号名 EQU 常值表达式
LEN EQU 10 SUM EQU 21H BLOCK EQU 22H CLR A MOV R7,#LEN MOV R0,#BLOCK LOOP:ADD A,@R0 INC R0 DJNZ R7,LOOP MOV SUM,A
4.1.3 汇编语言的语句格式
非数字字符开头,后跟字母、数字、“-”、“?”等 不能用已定义的保留字(指令助记符、伪指令等) 后跟英文冒号“:”
Keil的汇编器A51可以识别的语句形式为:
标号(即符号地址)
[标号:] 指令助记符 [操作数1,] [操作数2,] [操作数3,] [;注释]
指令助记符
4.2.2 伪指令
伪指令,也叫汇编命令。仅对汇编过程进行指示 伪指令无对应的单片机可执行代码
起始地址设定伪指令ORG
ORG 表达式
表达式通常为十六进制地址,例:
第04章 汇编语言程序设计 39页 0.2M PPT版
MOV AL,10100000B OR 00000101B ;(AL)←10100101B
例4-4 关系运算符的应用
MOV AX,5 EQ 101B ;(AX)←0FFFFH
MOV BH,10H GT 16 ;(BH)←0
例4-5 数值返回运算符的应用
K1 DB 30H,31H,32H
K2 DW 4041H,4043H
(4)STACK
(5)MEMORY
(6)AT表达式
4. 类别名
返回
4.2.4 段寻址伪指令
格式:
ASSUME 段寄存器名:段名,段寄存器名:段名,……
例4-15 求从NUM开始的12个无符号字节数的和,结果放在SUM字单元中。
DATA SEGMENT NUM DB 95H,83H,36H,2DH DB 33H,22H,1AH,34H DB 62H,45H,75H,49H SUM DW ?
例4-13
STR1 DB ‘COMPUTER’ ;定义一个字符串,字符串的首地址为STR1 STR2 DW ‘AA’,‘BC’,‘DE’ ;给两个字符组成的字符串分配两个字节存储单元 DATA DW ?,?,? ;为DATA预留6个存储单元
例4-14
DATA1 DB 20 DUP(?) ;为变量DATA1分配20个字节的空间,初值为任意值 DATA2 DW ? ;为变量DATA2分配2个字节的空间,初值为任意值 DATA3 DB 20 DUP(30H) ;为变量DATA3分配20个字节的空间,初值均为30H
K3 DW 20H DUP(0)
K4 DD 50515253H
MOV AL,TYPE K1 ;等效于MOV AL,1
MOV AH,TYPE K2 ;等效于MOV AH,2
第4章汇编语言程序设计知识
图4-1 分支程序结构
例4-1
JMP_128:MOV RL MOV JMP JMPTAB:AJMP AJMP ┇ AJMP A,R3 A DPTR,#JMPTAB @A+DPTR ROUT00 ROUT01 ┇ ROUT7F
128个子程序首址
二、分支程序
说明:此程序要求128个转移目的地址(ROUT00 ~
三、反汇编
将二进制机器语言程序翻译成汇编语言程序的过程 称反汇编。
汇编和反汇编的过程如图4-3所示。
汇编(汇编程序)
源程序 (汇编语言)
反汇编(汇编程序)
目标码 (机器语言)
图4-3 汇编和反汇编过程
§4.2.3 伪指令
伪指令不是真正的指令,无对应的机器码,在汇编 时不产生目标程序,只是用来对汇编过程进行某种 控制。
格式:字符名称
DATA
表达式
功能:与EQU类似,但有以下差别:
1、EQU定义的字符名必须先定义后使用,而DATA定义的 字符名可以后定义先使用。
ORG START
2000H MOV R0,#21H ;21H→(R0) MOV A,20H ; (20H)→(A) ANL A,#0FH ;A^#0FH→(A),取低位 MOV @R0,A ; (A)→((R0))),低 位置 21H 中 INC R0 ;R0+1→(R0) MOV A,20H ; (20H)→(A) SWAP A, ;A0~3-((A4~7),低位 与高位交换 ANL A,#0FH ;A^#0FH,取高位 MOV @R0,A ; (A)→((R0)),高位 置 22H
序执行程序。
分支程序又分为单分支和多分支结构。 多分支程序是首先把分支程序按序号排列,然后按序号值进 行转移。
mcs-51第四章答案汇编语言程序设计
mcs-51第四章答案汇编语言程序设计第四章汇编语言程序设计1 题若晶振为12MHz,试编制延时2ms和1s子程序。
答:延时2ms:DELY: MOV R7, #10DLY0: MOV R6, #98NOPDLY1: DJNZ R6, DLY1DJNZ R7, DLY0RET延时1s:DELY: MOV R0, #50LP11: MOV R1, #100LP22: MOV R2, #100LP33: DJNZ R2, LP33DJNZ R1, LP22DJNZ R0, LP11RET4 题试求20H和21H单元中16位带符号二进制补码数的绝对值,并送回20H和21H单元,高位在先,低位在后。
答:方法一:先判断符号位,若为0则不作任何处理(因为正数的补码数与原数相同,而0的补码数就是0)。
若符号位为1,则用0减去该数即可。
编程如下:ORG 1000HMOV A, 20HJNB ACC.7, DONECLR CCLR ASUBB A, 21HMOV 21H, ACLR ASUBB A, 20HMOV 20H, ADONE: SJMP $END方法二:可用变反加“1”来完成。
ORG 1000HMOV A, 20HJNB ACC.7, DONECPL AMOV 20H, AMOV A, 21HCPL AMOV 21H, ACLR CMOV A, 21HADD A, #1MOV 21H, AMOV A, 20HADDC A, #0MOV 20H, ADONE: SJMP $END5题试求内部RAM 30~37H单元8个无符号数的算术平均值,结果存入38H单元。
答:方法一:相加后和放在R3:38H中,然后将结果整体右移3位,得数放在38H单元中。
ORG 1000HSTART: MOV R7, #07HMOV R3, #00HMOV A, 30HMOV R0, #31HLOOP: ADD A, @R0JNC NEXTINC R3NEXT: INC R0DJNZ R7, LOOPMOV 38H, AMOV R7, #3LOOP1: CLR CMOV A, R3RRC AMOV R3, AMOV A, 38HRRC AMOV 38H, ADJNZ R7, LOOP1SJMP $END方法二:相加后和放在R3:38H中,然后将R3中的数乘以25,将38H中的数除以23,然后将两个结果相加,放入38H单元中。
第4章 汇编语言程序设计
例: 三字节无符号数相加,其中被加数在内部RAM 的50H、51H和52H 单元中;加数在内部RAM的53H、 54H和55H单元中;要求把相加之和存放在50H、 51H和52H单元中,进位存放在位寻址区的00H位中。
内部RAM
50H 51H 52H
高字节 低字节
53H 54H 55H
R1→55H
结 束
常用程序结构:
顺序程序、分支程序、循环程序。
4-3
顺序程序
顺序程序又称简单程序,程序走向只有一条路径。 例:双字节求补程序(设数据在R4R5中): 开 始 CLR C MOV A,R5 ;取低字节 处 理 CPL A ADD A,#01H ;低字节变补 处 理 MOV R5,A MOV A, R4 ;取高字节 处 理 CPL A ADDC A,#00H ;高字节变补 结 束 MOV R4,A
片内 RAM 42H 0 十 41H 0 个 40H 十 个
4 -- 4
分支程序(参见书P49-57)
分支程序就是在程序执行过程中要判 断某些条件,当条件成立后程序转移到不 同的功能处运行。在MCS-51单片机中条件 转移指令都可以用在分支程序中。 (复习、参见书P38---39) (1)测试条件符合转移,如: JZ、JNB …等
汇编的主要任务:
1)确定程序中每条汇编语言指令的指令机器码。 2)确定每条指令在存储器中的存放地址。 3)提供错误信息。 4)提供目标执行文件(*.OBJ/*.HEX)和 列表文件(*.LST)。
一、汇编语言指令类型:
1. 机器指令: 指令系统中的全部指令,每条指令有对应的机器代码。 2. 伪指令: 汇编控制指令,仅提供汇编信息,没有指令代码。
在源程序中只能有一条END指令
微机原理及运用第4章
关系运算的操作数也必须为数字操作数。当关系成立时, 其结果为全 1;当关系不成立时,其结果为全 0。 汇编语言中的表达式不能构成单独语句, 只能是语句的 一个部分, 例如: MOVAX, BUF+2
ADDAL, VAL AND 0FH
JMPAGAIN+3 MOVBL, VB LE VA
4.1汇编语言基本概念
4.1.1汇编语言与机器语言
我们已经学过高级语言,例如BASIC语言或FORTRAN 语言,无论哪种语言,它都规定了一系列用于编写程序的语 句和应该遵循的语法规则。人们根据一种语言给定的语句及 其语法规则就可以写出程序,计算机则通过执行已编好的程 序来完成人们要求它完成的各种复杂功能。汇编语言也一样, 根据汇编语言的语句及其语法规则可以写出汇编语言程序。 但汇编语言与高级语言有较大的区别,汇编语言中的语句与 机器的种类和型号密切相关。
部分, 汇编时不形成任何目标码。注释必须以分号“;”开 头。 它可以作为语句的一个部分,也可以作为一个单独的语 句。
4.1.3汇编语言中的常数与表达式
1. 常数 常数可以分数值常数和字符串常数两类。数值常数按其 基数的不同,可以有二进制数、八进制数、十进制数、十六 进制数等几种不同的表示形式, 汇编语言中采用不同的后缀 加以区分。 B: 表示二进制数。 例如, 10110011B。
表示一条指令的这些字符常称为助记符。 我们必须指出, 采用助记符写出的程序,机器是不能直接执行的,因为上面 我们已经指出, 处理器在设计时是按二进制指令码考虑的。 所以,采用汇编语言编写的程序在执行前还必须将其“翻译” 成机器语言。通常将采用助记符指令写成的程序,称为源程 序,将它翻译成的机器语言程序称为目标程序。将汇编语言 的源程序翻译成目标程序的过程称为汇编过程或简称汇编。 汇编过程通常是由计算机完成的。它是通过执行一个专门完 成汇编的软件——称为汇编程序来实现的。既然写出的源程序 要由汇编程序将其翻译后才能执行,所以,我们编写的源程 序必须符合汇编程序的一系列要求或者规则,只有这样,你 的程序才能被正确地“翻译”。
第4章-汇编语言程序设计教案
第四章教学实施计划3课堂教学实施计划第 8 课教学过程设计:复习 0 分钟;授新课 100 分钟讨论 0 分钟;其它 0 分钟授课类型(请打√):理论课√讨论课□实验课□习题课□其它□教学方式(请打√):讲授√讨论□示教□指导□其它□教学手段(请打√):多媒体√模型□实物□挂图□音像□其它□4.1 汇编语言程序设计概述程序实际上是一系列计算机指令的有序集合。
我们把利用计算机的指令系统来合理地编写出解决某个问题的程序的过程,称为程序设计。
程序设计是单片机应用系统设计的重要组成部分,单片机的全部动作都是在程序的控制下进行的。
随着芯片技术的发展,很多标准的或功能型的硬件电路都集成到了芯片中,所以,软件设计在单片机应用系统开发中占的比重越来越大。
一、汇编语言和高级语言汇编语言:用助记符表示的指令称为汇编语言,用汇编语言编写的程序称为汇编语言源程序汇编语言也是面向机器的,它仍是一种低级语言。
汇编语言离不开具体计算机的硬件,与硬件紧密相关。
高级语言:高级语言不受具体“硬件”的限制,具有通用性强,直观、易懂、易学,可读性好等优点。
多数的51单片机用户使用C语言来进行程序设计。
C语言已经成为人们公认的高级语言中高效、简洁而又贴近51单片机硬件的编程语言。
二、汇编语言的特点•助记符指令和机器指令一一对应,所以用汇编语言编写的程序效率高,占用存储空间小,运行速度快,因此汇编语言能编写出最优化的程序。
•使用汇编语言编程比使用高级语言困难,因为汇编语言是面向计算机的,汇编语言的程序设计人员必须对计算机硬件有相当深入的了解。
•汇编语言能直接访问存储器及接口电路,也能处理中断,因此汇编语言程序能够直接管理和控制硬件设备。
•汇编语言缺乏通用性,程序不易移植,各种计算机都有自己的汇编语言,不同计算机的汇编语言之间不能通用。
三、汇编语言的语句格式•指令语句:每一条指令语句在汇编时都产生一个指令代码(也称机器代码),执行该指令代码对应着机器的一种操作。
第4章单片机汇编语言程序设计
Y A=0? N A>0? N A←-1 Y N A←X
Y
A=0? N R1←-1
A←1
A>0? Y R1←1 存数
存数
2012-6-5 电气与自动化学院 18
第四章汇编语言程序设计
§2 MCS-51单片机汇编语言设计 2、分支程序设计
程序:
ORG 2000H VAR DATA 40H FUN DATA 41H START:MOV A,VAR JZ SAVE JNB ACC.7,ZHENG MOV A,#0FFH SJMP SAVE ZHENG:MOV A,#01H SAVE: MOV FUN,A SJMP $ END
第四章汇编语言程序设计 第四章汇编语言程序设计 本章重点: §4.1 汇编语言程序设计基础
4.1.3 伪指令
§4.2 MCS-51汇编语言程序设计
4.2.1 顺序结构程序设计 4.2.2分支结构程序设计 4.2.3循环结构程序设计 4.2.4查表程序设计 4.2.5 子程序设计
§习题分析及解答
第四章汇编语言程序设计 4.1.3 伪指令
2012-6-5 电气与自动化学院 9
第四章汇编语言程序设计
§2 MCS-51单片机汇编语言设计 1、顺序结构程序设计
2012-6-5
例4-3:将两个三字节无符号数相加,其中一个加数在内部RAM的 32H、31H和30H单元;另一个加数在内部RAM的35H、34H和33H单 元,要求相加后的和存入32H、31H和30H单元,进位存入位寻址区 的20H单元中 程序: ORG 2000H CLR C MOV @R0,A MOV R0,#32H MOV R1,#35H DEC R0 MOV A,@R0 DEC R1 ADD A,@R1 MOV A,@R0 MOV @R0,A ADDC A,@R1 DEC R0 MOV @R0,A DEC R1 MOV A,@R0 MOV 20H,C ADDC A,@R1 SJMP $ END
第四章 汇编语言程序设计基础
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
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
PUSH
设AX=1234H,SP=1200H 执行 PUSH AX 指令后堆栈区的状态:
入栈前
入栈后
┇
12H 34H
┇
AX
堆
SP-2=11FEH
栈
34H
段
堆 栈
12H
1200H
段
1200H
微机原理与系统设计
POP
执行 POP AX 堆栈区的状态:
12 34
AX SP+2
PUSH
指令的操作正好相反。(栈底在最高地址)
微机原理与系统设计
堆栈操作指令举例
❖PUSH AX ❖PUSH BX
┇
❖POP AX ❖POP BX
微机原理与系统设计
CBW,CWD(字位扩展指令) ❖ 将符号数的符号位扩展到高位; ❖ 无符号数的扩展规则为在高位补0 ❖ 指令为零操作数指令,采用隐含寻址,隐含的操
XLAT
AL,隐含寻址
❖ 用BX的内容代表表格首地址,AL内容为表内位移 量,BX+AL得到要查找元素的偏移地址。
微机原理与系统设计
XLAT
数据段中存放有一 张ASCII码转换表,设 首 地 址 为 2000H , 现 欲查出表中第11个代 码 的 ASCII 码 ( 设 DS=4000H)
42000H+0
1200H
DS 60H 00H
DI 12H 34H
61234H
┇
34H
数
12H
据
段
00H
1
60H
┇
33H
数 据
22H
段
┇
2
微机原理与系统设计
LES 指令举例
LES DI,[1200H] MOV AX,[DI]
ES 60H 00H
1200H
DI 12H 34H
61234H
┇
34H
数
12H
据
段
00H
60H
微机原理与系统设计
PUSH, POP
❖压栈指令 PUSH 格式: PUSH OPRD
❖出栈指令 POP 格式: POP OPRD
指令执行过程:
(SP)← (SP) -2 (SP) ←操作数高字节 (SP) +1←操作数低字节
指令执行过程: (SP) 操作数低字节 (SP) +1 操作数高字节 (SP) ← (SP) +2
作数为AX及AX,DX
微机原理与系统设计
CBW(字节到字)
❖ 格式: CBW
❖ 操作:将AL内容扩展到AX ❖ 规则:若最高位=1,则执行后AH=FFH
若最高位=0,则执行后AH=00H
微机原理与系统设计
CWD(字到双字)
❖ 格式: CWD
❖ 操作:将AX内容扩展到DX AX ❖ 规则:若最高位=1,则执行后DX=FFFFH
XCHG(数据交换指令)
寄存器与寄存器,或寄存器与存储器之间 ❖ 格式:
XCHG REG,MEM/REG ❖ 两操作数必须有一个是寄存器操作数 ❖ 不允许使用段寄存器。 ❖例: XCHG AX,BX
XCHG [2000],CL
微机原理与系统设计
XLAT(字节转换指令,查表指令)
[BX+AL] ❖ 格式:
❖ 堆栈:以后进先出(LIFO)的规则存取信息的一种存储 机构。开始放入数据的单元叫做“栈底”;数据一个一 个地存入,这个过程叫做“压栈”;最后存入信息的单 元称为“栈顶” 。
❖ 堆栈是一个存放数据的区域,这个区域特殊的是它存放 和取用数据的方式,即所谓的‘先进后出,后进先出’。
❖ 堆栈有特殊的数据传输指令,即‘PUSH’和‘POP’; 有一个特殊的专为其服务的单元,即堆栈指针SP,每当 执一次PUSH指令时,SP就自动减2,每当执行一次POP指 令,SP就自动加2。
a.通用数据传送
一般数据传送指令 MOV 交换指令 XCHG 查表转换指令 XLAT 堆栈操作指令 PUSH, POP 字位扩展指令 CBW, CWD
**该类指令的执行对标志位不产生影响
微机原理与系统设计
MOV
❖一般数据传送指令 MOV
❖格式:MOV DST,SRC
❖操作:SRC
DST
❖例: MOV AL,BL
西安电子科技大学机电工程学院
第4章 汇编语言程序设计基本方法
张大兴
4.2 8086/8088指令系统
❖数据传送指令 ❖算术运算指令 ❖逻辑运算指令 ❖移位指令 ❖标志处理指令和CPU控制指令
微机原理与系统设计
缩写与符号
微机原理与系统设计
数据传送指令
❖通用数据传送 ❖标志位操作 ❖地址传送
微机原理与系统设计
LAHF,SAHF
❖ LAHF
FLAGS
D15
❖ SAHF
;将FLAGS的低8位装入AH
D7
AH ….
SF ZF AF PF
;执行与LAHF相反的操作
D0
D0
CF
微机原理与系统设计
PUSHF,POPF ❖ 针对FLAGS的堆栈操作指令
将标志寄存器压栈或从堆栈弹出
微机原理与系统设计
c. 地址传送指令
❖取有效地址指令LEA
❖取地址指针指令
LDS指令 LES指令
微机原理与系统设计
LEA(取有效地址指令)
❖ 将变量的16位偏移地址取出送目标寄存器 ❖ 格式:
LEA REG,MEM 相当于 MOV REG,OFFSET MEM ❖指令要求源操作数必须是一个存储器操作数,
目标操作数通常是间址寄存器,不能是段寄存 器
微机原理与系统设计
LEA
❖ 比较下列指令: LEA SI,DATA1 MOV SI,DATA1
MOV BX,[BX] LEA BX,[BX]
符号 地址
┇
DATA1 34H 12H
┇
1100H 88H 77H ┇
BX=1100H
微机原理与系统设计
LDS、LES (取地址指针指令)
LDS reg,MEM32 LES reg,MEM32
┇
33H
附 加
22H
段
┇微机原理与系统设计
小结
数据传送指令
通用数据传送指令 标志位操作指令 地址传送指令
微机原理与系统设计
Continue
Thanks.
42000H+11
MOV BX,2000H ;(BX)←表首地址
MOV AL,0BH ;(AL)←序号
XALT
; 查表转换
执行后得到:(AL)=42H
30
‘
31
0‘’
32
1‘’
...
2’
39
‘
41
‘9‘
46
E‘’
微机原...理与系统设计F’
PUSH, POP (堆栈操作指令)
若最高位=0,则执行后DX=0000H
微机原理与系统设计
CBW,CWD 举例
MOV AL,44H CBW
MOV AX,0AFDEH CWD
MOV AL,86H CBW
;执行结果?
微机原理与系统设计
b. 标志位传送指令
LAHF SAHF
PUSHF POPF
隐含操作数AH 隐含操作数FLAGS
微机原理与系统设计
; 高地址送DS ; 高地址送ES
❖ 指令中源操作数是存储器某4个连续单元的偏移地址,目标 操作数是间址寄存器,BX、BP、SI和DI。
微机原理与系统设计
LDS 指令举例 ❖ 例:
LDS DI,[1200H] MOV AX,[DI]
微机原理与系统设计
LDS 指令举例
❖DI = 1234H ❖AX = 2233H
微机原理与系统设计
MOV
注:MOV指令不能传送的5条路径 ❖立即数 → 段寄存器 ❖存储单元 → 存储单元 ❖段寄存器 → 段寄存器 ❖其它 → CS ❖其它 → 立即数
除最后两条,前三条路径都可分两步实现; 此规则同样适用于其它双操作数指令,如 ADD,ADC,SUB,SBB。
微机原理与系统设计
┇ 34H 12H
代 码 段
11FEH 堆
栈 段
微机原理与系统设计
PUSH, POP 说明
❖ 指令的操作数必须是16位的(字); ❖ 操作数可以是寄存器或存储器两单元,但不能是立
即数; ❖ 不能从栈顶弹出一个字给CS; ❖ PUSH和POP指令在程序中一般成对出现; ❖ PUSH指令的操作方向是从高地址向低地址,而POP