第4章 汇编语言程序设计
单片机原理及应用
第4章 汇编语言程序设计 4.2.2 顺序程序设计 顺序程序又称简单程序,是指一种顺序执行的程序。 在这种程序中,没有分支、循环或子程序。 [例4.1] 两个8位无符号数相加,和仍为8位。 假设两个无符号数X1、X2分别存放于内部RAM的60、 61H单元中,求和送入62H单元。程序如下: MOV R0,#60H ;设R0为数据指针 MOV A,@R0 ;取X1 INC R0 ADD A,@R0 ;X1+X2 INC R0 MOV @R0,A ;保存结果 20
24
单片机原理及应用
第4章 汇编语言程序设计 1. 利用条件转移指令实现程序分支 [例4.4] 比较两个无符号数的大小。 设从外部存储单元ST1起存放两个无符号8位二进制数, 要求比较其大小,将大数存入ST1+2单元中。 程序流程图如图4-1所示。
单片机原理及应用
第4章 汇编语言程序设计
第4章 汇编语言程序设计
总体要求: ●熟练掌握汇编语言程序设计中常用的伪指令 和程序流程图 ●掌握常用汇编语言程序设计的方法 ●熟悉顺序、分支、循环结构和子程序调用等 程序的应用特征 ●能够独立完成本章作业 学习重点: ●汇编语言程序设计中常用的伪指令 ●分支与循环描述的理解与实现 ●综合程序设计举例的学习 1
单片机原理及应用
第4章 汇编语言程序设计 建立数学模型,确定算法就是将解决工程问题转换为 数学求解的方法。 3.绘制程序流程图 程序流程框图是解题步骤及其算法进一步具体化的重 要环节,它是设计程序的重要依据,能比较清楚、形象地 表达程序运行的过程,并且直观、清晰地体现了程序的设 计思路,可使人迅速抓住程序的基本线索。 程序结构的设计一般采用流程图法。流程图是用规定 的图形符号配合文字说明来表示算法或处理问题的步骤。 它具有直观、易懂的特点,是程序结构设计的有力工具。 传统流程图的符号及说明如图4-1所示。 17
3
单片机原理及应用
第4章 汇编语言程序设计 1.标号 指令的符号地址。由字母开头,后跟字母或数字。 标号的最大允许长度由汇编程序确定。操作码助记符、 寄存器名以及伪指令都不能用作标号。 以下是一些合法标号的例子: START,DL0,SUM,A1,LOOP等 以下的字符串不能用作标号: 2A,S+M,ADD,EQU 并不是每一条语句都需要加标号。通常对于转移指 令涉及的语句和子程序的开始语句等才使用标号。 4
MOV CPL ADD MOV MOV CPL ADDC MOV
A,R0 A A,#01H R2,A A,R1 A A,#00H R3,A
;低8位送A
;送结果低位 ;高8位送A ;加进位 ;送结果高位
23
单片机原理及应用
第4章 汇编语言程序设计 4.2.3 分支程序设计 分支结构程序是通常是利用执行条件转移指令来实 现的。即根据条件对程序的执行情况进行判断,满足条件 则转移,否则顺序执行。用于判断分支转移的指令有:JZ、 JNZ、JC、JNC、JB、JNB、JBC、CJNE、JMP等。另外,在 该类分支程序的设计中,要设置好判断测试对象、程序转 移方向及转移的标志地址。在MCS-51指令系统中,把这些 指令结合在一起使用,就可以完成多种条件判断,如正负 判断、溢出判断、大小判断等。
单片机原理及应用
第4章 汇编语言程序设计 5.位定义伪指令BIT 其格式为: [标号] BIT 位地址 功能:给符号形式的位地址赋值。 其中的标号为字 符名称,其后无冒号,例如: H1 BIT 30H ;H1定义为位地址30H H2 BIT TF0 ;H2定义为位地址TF0 A1 BIT P1.0 ;A1定义为位地址P1.0 MOV C,H1 ANL C,H2 MOV A1,C ;P1.0 ←30H∧TF0
22
单片机原理及应用
第4章 汇编语言程序设计 [例4.3] 16位二进制数求补程序。设16位二进制数存 放在R1、R0,求补以后的结果存于R3、R2。
二进制数的求补操作,可用“求反加1”来实现。求反有 CPL指令。加1操作要考虑低8位对高8位的进位,还要注意不能 用INC指令,因为这条指令不影响标志。程序如下:
单片机原理及应用
第4章 汇编语言程序设计 [例4.2] 将两位BCD码十进制数转换成相应的ASCII码, 存入两个内部RAM单元。 假设两位BCD码存放的内部RAM的20H单元,转换后的 ASCII码放在21H和22H单元,其中高位数存放在21H单元。 数字0~9的ASCII码为30H~39H。题目要求就是要将 一个字节内的两个BCD码拆开,放到另外两个单元的低4位, 并在其高4位赋0011。为此,可以用XCHD指令将个位BCD码 与22H单元的低4位交换。在单元高4位添上0011,完成一 次转换。再用SWAP 指令将高位BCD码换到低4位,并将高4 位变为0011,完成第二次转换。为了减少操作,应先使 22H单元清零。工作寄存器选用R0,便于使用变址寻址指 令。 21
单片机原理及应用
第4章 汇编语言程序设计
4.1 汇编语言的语句结构
4.2 汇编语言程序设计
4.3 综合程序设计举例
2
单片机原理及应用
第4章 汇编语言程序设计
4.1
汇编语言的语句结构
4.1.1 汇编语言的语句格式 汇编语言源程序由一系列语句组成,一般每个语句占 一行。语句的主体通常是各种指令。语句的格式同汇编语 言指令格式一样,也是由标号、操作码、操作数和注释这 四部分组成。相邻两部分之间都要用分隔符隔开。 汇编语言语句的格式为: 标号:操作码 操作数 ;注释 其中标号和操作码之间用“:”作为分隔符,也可再 加上若干空格。操作码和操作数之间用空格作分隔符。注 释之前用“;”作为分隔符。
单片机原理及应用
第4章 汇编语言程序设计 汇编后目标代码在存储器中存放的结果安排如下,起 始地址是1000H。 存储器地址 1000H 目标代码 78H 50H MOV 源程序 R0,#50H
1002H
1003H
ECH
26H
MOV A,R4
ADD A,@R0
9
单片机原理及应用
第4章 汇编语言程序设计 2.定义字节伪指令DB(Define Byte) 其格式为:[标号:] DB X1,X2,„,Xi,„,X n 其中X1~X n是单字节数或由EQU伪指令定义的字符, 也可以是用引号括起来的ASCII码。此伪指令的功能是把 这组数据依次存入由该伪指令指定的地址单元中。例如: ORG 2000H DATA1:DB 73H,20H,30H DB ‘A’ 结果安排如下:
7
单片机原理及应用
第4章 汇编语言程序设计 1.汇编起始伪指令ORG(Origin) ORG伪指令出现在每段源程序或数据块的开始。它 指明此语句后面的程序或数据块的起始地址。 其格式为: ORG nn 其中nn可用绝对地址或标号表示,在汇编时由nn确 定此语句下面第一条指令(或第一个数据)的地址。该 段源程序(或数据块)就连续存放在以后的地址内,直 到遇到另一条ORG伪指令为止。例如: ORG 1000H START: MOV R0,#50H MOV A,R4 ADD A,@R0 8
单片机原理及应用
第4章 汇编语言程序设计
2.操作码 语句要执行的操作内容,汇编语言语句必有的部分。 用指令的助记符表示,操作码与操作数用空格分开。 3.操作数 指令操作所需要的数据。根据操作码的功能,操作 数可能是一项或多于一项。当多于一项时,操作数之间 用逗号分隔。个别指令不需要操作数,则此项空缺。 操作数可以是立即数或其它的寻址方式。立即数必 须以数字开头,若十六进制数以字母开头,则必须在前 面加“0”。
13
单片机原理及应用
第4章 汇编语言程序设计 6.数据地址赋值伪指令DATA 其格式为: [标号] DATA 数据或表达式 功能:与EQU伪指令相似。其中的标号为字符名称, 其后无冒号。例如: AA EQU R1 ;AA赋值后当作R1使用 CC DATA 30H ;CC赋值后为8位数30H MOV CC,AA ;R1的值赋给30H单元 MOV A,#CC+1 ;立即数31H赋给累加器A
14
单片机原理及应用
第4章 汇编语言程序设计 7.汇编结束伪指令END 其格式为: [标号:] END [mm] 其中mm是程序起始地址,标号和mm不是必需的。 END伪指令是一个结束标志,用来指示汇编语言源程 序的结束,进行机器汇编时到此为止,其后的语句将不 被汇编成机器码。因此,在一个源程序中只允许出现一 个END语句,它必须放在整个程序的最后。
15
单片机原理及应用
第4章 汇编语言程序设计
4.2
汇编语言程序设计
4.2.1 汇编语言程序设计的基本方法 汇编语言程序设计的一般步骤如下。 当给定一个题目、进行程序设计时,一般应按以下几个 步骤进行:分析题目、确定算法、设计程序结构、编写程序、 上机调试。 1.分析问题,明确任务 分析问题是整个程度设计工作的基点。分析问题就是明 确题目的任务,弄清所给定的原始数据和应得到的结果,以 及对运算精度和速度的要求等。 2.建立数学模型,确定算法 16
5
单片机原理及应用
第4章 汇编语言程序设计 4.注释 语句的说明部分,以分号“;”开始。当采用机器 其 它部分一起输出。注释可为一行或几行(每行均以分号 开始)。 注释不是每条语句所必需的。但适当的注释使得程 序便于阅读。
6
单片机原理及应用
第4章 汇编语言程序设计 4.1.2 伪指令 当汇编程序对于汇编语言源程序进行汇编时,还要求 提供一些有关汇编信息的指令,例如指定程序或数据存放 的起始地址、给一些连续存放的数据确定单元等。但是, 这类指令在汇编时并不产生目标代码,不影响程序的执行, 所以称为伪指令。常用的伪指令有下列几种。
单片机原理及应用
第4章 汇编语言程序设计
符号 名称
终端框 处理框 判别框 输入/输出框
表示的功能
程序的开始或结束 各种处理操作 条件转移操作 输入/输出操作
汇编语言程序设计
汇编语⾔程序设计第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。
汇编语言程序设计
第4章 汇编语言程序设计
例4.4 显示两位压缩BCD码值(00~99) ,要求不显示前导0。 本例一方面要排除前导0的情况,另一方面 对于全0情况又必须显示一个0,所以形 成了两个双分支结构的程序。
第4章 汇编语言程序设计 DATA SEGMENT BCD DB 04H ; 给出一个BCD码数据 DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA BEGIN: MOV AX, DATA MOV DS, AX MOV DL,BCD ;取BCD码 TEST DL,0FFH ;如果这个BCD码是0,则显示为0 JZ ZERO TEST DL,0F0H ;如果这个BCD码高位是0,不显示 JZ ONE MOV CL,4 ;BCD码高位右移为低位 SHR DL,CL OR DL,30H ;转换为ASCII码 MOV AH,2 ;显示 INT 21H
第4章 汇编语言程序设计 ADC MOV MOV MUL ADD DX,0 W+4,DX AX,A B+2 W+2,AX ;部分积2的高16位与进位相加 ;结果保存到从W+4开始的内存单元 ;取被乘数的低16位 ;与乘数的高16位相乘,得到部分积3 ;部分积3的低16位与W+2开始的内存单元相加 ;结果保存在从W+2开始的内存单元 ;部分积3的高16位与W+4开始的内存单元及 ;进位相加,结果保存在从W+4开始的内存单元 ;把进位值保存在从W+6开始的内存单元 ;取被乘数的高16位 ;与乘数的高16位相乘,得到部分积4 ;部分积4的低16位与W+4开始的内存单元相加 ;结果保存在从W+4开始的内存单元 ;部分积4的高16位与W+6开始的内存单元及 ;进位相加,结果保存在从W+6开始的内存单元
第四章 汇编语言程序设计
一、算术运算符
包括:+,-,*,/(取商),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 汇编语言语句和格式
第四章-汇编语言程序的设计
第四章汇编语言程序设计本章的汇编语言程序设计的主要容有:汇编语言程序设计概述、汇编语言程序的结构形式、汇编语言的伪指令。
(一个单片机应用系统和其它计算机系统一样,在完成一项具体工作的时候,它要按照一定的次序,去执行操作,这些操作实际上就是由设计人员,以单片机能够接受的指令编制的程序,那么无论计算机也好,单片机也好,实际上编制程序的过程,就是用计算机来反映设计者的编程思想,那么这一章中,我们将向大家介绍怎样使用单片机指令系统来编制一些应用程序。
在介绍之前,我们还是来学习汇编语言的一些基础知识)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
单片机应用技术(第三版)第四章汇编语言程序设计课件
第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章汇编语言程序设计知识
图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
序执行程序。
分支程序又分为单分支和多分支结构。 多分支程序是首先把分支程序按序号排列,然后按序号值进 行转移。
