汇编语言程序设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
人工查表翻译指令。但遇到的相对转移指令的偏移量的计算,
要根据转移的目标地址计算偏移量,不但麻烦,且容易出错。
2. 机器汇编
用编辑软件进行源程序的编辑。编辑完成后,生成一个ASCII
码文件,扩展名为“.ASM”。然后在微计算机上运行汇编程
序,把汇编语言源程序翻译成机器代码。
交叉汇编--汇编后的机器代码是在另一台(种)计算机(这里是
……
END
;汇编结束
P.62
3.DB(Define Byte)定义字节命令
例:
ORG 2000H
2000 30 40 18 43 42 DB 30H,40H,24,“C”,“B”
DB功能是从当前地址开始定义(存储)若干个单字节数据, 十进制数自然转换成16进制数,字母按ASCII码存储。
汇编后结果: (2000H)=30H (2001H)=40H (2002H)=18H(即24) (2003H)=43H(C的ASCII码) (2004H)=42H(B的ASCII码)
LOOP: MOV A,R4 ;取部分和低字节原有的值
ADD A,@R0 ;加上当前数低字节(本例原始数据只有低字节)
MOV R4,A ;回存新的部分和低字节结果
MOV A,R3 ;取部分和高字节原有的值
ADDC A, #00H ;加上当前数高字节(00H)及低字节的进位
MOV R3,A ;回存新的部分和高字节结果
SETB EA
2
003CH D2 A8
SETB EX0
2
003EH 80 rFelE2 0040H
rel1 =【000BH-0006H】低8位=05H
LOOP:SJMP LOOP 2
END
rel2 =【003EH-0040H】低8位=FEH
P.68
3.8 AT89C51单片机汇编语言程序设计举例 3.8.3 分支转移程序设计
【例4-1】AT89C51的汇编语言的四分段格式如下:
P.60
标号 操作码 操作数 地址 机器码 字段 字段 字段
ORG 2000H
注释 字段 ;起始地址伪指令
2000 74 00 2002 79 0A 2004 7A 03 2006 2A
START:MOV A,#00H
;0→A
十六进制
MOV R1,#10
汇编语言和机器语言都脱离不开具体机器的硬件,均是 面向“机器”的语言,缺乏通用性。
3.高级语言
P.59
不受具体机器的限制,接近于人的自然语言及学科语言,常用的
如BASIC、FORTRAN以及C、VB语言等。可视化、面向对象……
高级语言优点:通用性强,直观、易懂、易学,可读性好。
计算机不能直接识别和执行高级语言,需要将其 “翻译”成机
➢ 请编程序判断若34H、35H单元所存储的二个数相等则置F0位为0, 否则置1。
3.8.4 循环程序设计
P.70
图3-10是计数循环控制结构,图3-11是条件控制结构。
循环
循环准备: 初始地址指针 循环计数初值 单元变量初值
公共
循环计数
为下一次 循环做准备
结果处理
图3-10
图3-11
P.71
例3-20(改) 有一批单字节无符号数,依次存放在51单片机内部
[人工汇编]
汇编
[机器汇编]
人工
机器语言 目标程序
汇编语言特点:
汇编程序(汇编软件)
(1)面向机器的语言,程序设计员须对硬件有相当深入的了解。 (2)指令助记符和机器指令一一对应,用汇编语言编写的程序
(比高级语言)效率高,占存储空间小,运行速度快,能编 写出最优化的程序。 (3)能直接管理和控制硬件设备(功能部件),它能处理中断, 也能直接访问存储器及I/O接口电路。
0009H B2 90
CPL P1.0
2
000BH 32
LR: RETI
1
ORG 0030H
0030H 75 81 6F 0033H 75 48 05 0036H C2 90
MAIN:MOV SP,#111 3
MOV 48H,#05H 3
CLR P1.0
2
0038H D2 88
SETB IT0
2
003AH D2 AF
MOV 31H,#0
3
2008H2008H80 80rFeFElE2
SJMP $
2
200A2H00A7H5 75 3311 0011 NEQ:MOV 31H,#1
3
200D2H00D8H0 80rFeEFl3E
SJMP $
rel1=目标地址-下一条指令地址=200AH-2005H =5 , 补码为05H
单片机)上运行。
反汇编——分析已有的可执行目标程序,要将二进制的机器代 码语言程序反向翻译成汇编语言源程序,以便分析、修改。
地址 机器码 2000H E5 30H
ORG 2000H MOV A,30H
字节数 2
2002H2002BH4 00 r0e5l1
CJNE A,#0,NEQ
3
2005H20057H5 75 3311 000
程序功能:R2内容自加10次:R2×10→A
3.7.3 伪指令
P.61-63
伪指令也称为汇编程序控制命令,是向汇编程序发出的指示信 息,告诉它如何完成汇编工作。伪指令没有相应的机器指令 代码产生
常用的伪指令:
1.ORG(ORiGin)汇编起始地址命令
指定后续程序的起始地址。可多次使用ORG指令,但是, 地址必须由小到大排列,地址不能交叉、重叠。
用DPTR作基址的方法:
地址 机器码
汇编语言源程序 ORG 0300H
【PFDPTR.ASM】
0300 E5 30 PFSUB:MOV A ,30H
;取自变量x
0302 90 03 09
MOV DPTR ,#TAB
;指向平方表首址
0305 93 0306 F5 50
MOVC A ,@ A + DPTR ;查表得相应函数值y
1.单分支转移结构: 仅有两个出口,两者选一
条件满足?பைடு நூலகம்程序段1
单分支典型结构1 属循环结构!
图3-5
图3-6
单分支典型结构2 图3-7
【例B4-1】请编程序使48H、49H单元所存储的二个数中较大者 在前。
开始
取甲数
两数比较 N
乙数大? Y 两数交换单元
结束
ORG 0000H
BIG:MOV A ,48H ;取甲
;复位入口
LJMP MAIN
ORG 0003H LJMP IX0P
;外部中断0服务子程序入口
ORG 000BH LJMP IT0P
;定时器0中断服务子程序入口
ORG 001BH LJMP IT1P
;定时器1中断服务子程序入口
ORG 0030H
MAIN:MOV SP,#6FH
;总初始化。设定栈底指针
LCALL D60MS ;稍加延时(60mS),等待各芯片均上电复位结束
4.DW(Define Word)定义数据字命令 定义16位的数据字。
例如:
ORG 2000H
2000 12 46 00 7B 00 0A DW 1246H,7BH,10
DW功能是从当前地址开始定义(存储)若干个双字节数据,
高字节在低地址单元
汇编后结果: (2000H)=12H,(2001H)=46H (2002H)=00H,(2003H)=7BH (2004H)=00H,(2005H)=0AH
使用汇编语言编程,是单片机程序设计的基本功之一
P.61
3.7.2 汇编语言语句的种类和格式
两种基本类型:指令语句和伪指令语句
(1)指令语句 (CPU指令,可执行指令,真指令)
已在第3章介绍 每一条指令语句在汇编时都产生一个指令代码:机器指令代码
(2)伪指令语句 (命令语句,非执行指令,汇编命令)
是为汇编工作服务的。在汇编时除了定义的数据之外没有机器 指令代码与之对应。
程序。
2004 7A 03
不易懂,难记忆,易出错。
机器语言目标程序是唯一能 被CPU识别并执行的程序形式
2006 2A 2007 D9 FD 2009 00 200A 80 FE
2.汇编语言
P.59
采用指令助记符(符号指令)表示指令称为符号语言或汇编语言
用汇编语言编写的程序称为汇编语言源程序。
汇编语言 源程序
5.EQU(EQUate)赋值命令
用于给标号赋值。赋值以后,其标号值在整个程序有效。
例如:
TEST EQU 2000H
表示标号TEST=2000H,在汇编时,凡是遇到标号TEST时,
均以2000H来代替。
【引用前例】
【例4-3改】设计一个程序,功能为:根据30H单元中的数x(0~9 之间)查平方表,求出x相应的平方值y存50H单元。x和y均为 单字节数。
(x + 030BH)
MOV 50H ,A
;存结果y
0308 02 03 08 LS:LJMP LS
030B 00 01 04 09 10 0310 19 24 31 40 51 0315
TAB:DB 00H,01H,04H,09H,10H ;平方表0 1 4 9 16
0 , 1 , 4 , 9 , 16
3.7 89C51汇编语言程序设计
P.59
汇编语言是面向机器硬件的语言,要求程序设计者对89C51单 片机具有很好的“软、硬结合”的功底。
3.7.1 汇编语言程序设计概述
机器语言、汇编语言和高级语言
1.机器语言
地址 机器码
用二进制(“0”、“1”)代码表示指令、数字, 2000 74 00
用机器指令代码编写的程序——机器语言目标 2002 79 0A
INC R0
;R0指向下一个数
DJNZ R2,LOOP ;未加完,转回继续进行下一个数的累加
SJMP $
END
【思考】如果这批数据是单字节BCD数呢?
开始
相加次数 R2 部分和高字节单元R3清0 部分和低字节单元R4清0
器语言才能识别和执行,进行“翻译”的专用程序称为编译
程序。
编译程序/解释程序(软件)
(编译型/解释型)
高级语言
源程序
编译/解释
机器语言 目标程序
可用C语言(C51)来进行AT89C51的应用程序设计。对于程 序的空间和时间要求很高的场合,汇编语言仍是必不可缺的。
C语言和汇编语言混合编程 在很多需要直接控制硬件的场合,则更是非用汇编语言不可,
rel2= rel3=目标地址-下一指令地址=2008H-200AH=-2,补码为FEH 也可按以下方法快速计算:
rel1=【目标地址-下一条指令地址】低8位=【200AH-2005H】低8位
=05H rel2= rel3=【目标地址-下一指令地址】低8位=【2008H-200AH】低8位
= FEH
DB 19H,24H,31H,40H,51H ; 25 36 49 64 81
25 , 36 , 49 , 64 , 81
END
可用十进制,效果一样
3.7.4 汇编语言源程序的汇编
P.63
汇编语言源程序 “翻译”成机器代码(指令代码)的过程称为
“汇编”。汇编可分为手工汇编和机器汇编两类:
1. 手工汇编
RAM从50H开始的单元中,数据个数n放在4FH单元中,求这批数
据的和(双字节)放在R3、R4中,程序如下:(求数组和程序)
ORG 0000H
ADD1: MOV R2,4FH ;取数据个数n,作为循环累加次数
MOV R3,#0 ;部分和高字节单元清0
MOV R4,#0 ;部分和低字节单元清0
MOV R0,#50H;R0指向第一个数
;10→R1
十进制
MOV R2,#00000011B ;3→R2
LOOP:ADD A,R2
二进制
;A+R2→A
2007 D9 FD
DJNZ R1,LOOP
;R1减1,非零则循环
2009 00
NOP
;空操作
200A 80 FE
↑操 ↑ ↑ 作操 码作
数
HERE:SJMP HERE END
;自循环 ;汇编终止伪指令
【例5-B2】外部中断INT0每中断五次令P1.0求反一次【INT0-2.ASM】
地址 机器码
ORG 0000H 字节数
0000H 02 00 30
LJMP MAIN
3
0003H D5 48 r0e5l1
ORG 0003H
DJNZ 48H,LR
3
0006H 75 48 05
MOV 48H,#05H 3
CLR C
;清Cy
CJNE A,49H,LP
SUBB A ,49H ;减去乙数
SJMP LP1 ;相等
JNC MOV
LP1 A ,48H
;无借位则甲≥乙,转LP1 ;乙数大:两数交换
LP:JNC
LP1
;甲>乙
MOV 48H,49H
MOV 49H,A
LP1:SJMP $
;自循环
【练习】 ➢ 请编程序使5CH、5DH单元所存储的二个数中较小者送20H单元。
ORG 2000H 2000 74 00 START:MOV A,#00H
┋
2. END(END of assembly)汇编终止命令
汇编语言源程序的结束标志,用于终止源程序的汇编工作。在 整个源程序中只能有一条END命令,且位于整个程序的最后。
例:实验板测试程序TEST2019.ASM
ORG 0000H