第3章80C51单片机汇编语言概述

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

30H R0
R0~R7、A、B(AB形式) E8H MOV A,R0
操作数 在R0
和DPTR
RAM
特点: 传送和执行速度快
30H
ACC
ROM
SFR
2019/12/16
7
二、 直接寻址
操作码后字节存放的是操作数的地址
寻址空间: 片内RAM低128字节 SFR(符号形式)
【例】若(50H)=3AH , 执行MOV A,50H后,(A)=3AH
3.3.1 状态控制伪指令
伪指令,也叫汇编命令。仅对汇编过程进行指示 伪指令无对应的单片机可执行代码
一 起始地址设定伪指令ORG
ORG 表达式 表达式通常为十六进制地址,例:
ORG 8000H START:MOV A,#30H
……
ORG可多次使用,但地址值的顺序要由小到大顺序设置
二 结束汇编伪指令END
MOV @R0,A ;(R0)←A MOV @R0,#55H ;(R0)←#55H MOV @R0,55H ;(R0)←(55H)
【例3-10】执行指令 MOV R6,#50H 后,(R6)= 50H
【例3-11】若(R1)=50H,(50H)=18H,执行指令 MOV 40H,@R1 后,(40H)=18H
单字节指令(49条
) 8位编码仅为操作码 位号 字节 如:INC A 编码为:
76543210 opcode
0 0 0 0 0 1 0 0 即:04H
8位编码含操作码和寄存器编码 位号 7 6 5 4 3 2 1 0
如:MOV A,R0 编码为:
字节 opcode r r r
1 1 1 0 1 0 0 0 即:E8H
以direct为目的,例如:
MOV 30H,A ;(30H)←(A) MOV 30H,#55H ;(30H)←#55H MOV 30H,55H ;(30H)←(55H) MOV 30H,R0 ;(30H)←(R0) MOV 30H,@R0 ;(30H)←((R0))
2019/12/16
20
以@Ri为目的,例如:
入栈指令PUSH PUSH direct ;SP←(SP)+1,(SP)←(direct)
出栈指令POP POP direct ;(direct)←((SP)),SP ←(SP)-1
注:堆栈用于子程序调用时保护返回地址,或者用于保护子程序调 用之前的某些重要数据(即保护现场),还可以用于数据交换。
2019/12/16
MOV A,55H ;A←(55H) MOV A,R0 ;A←(R0) MOV A,@R0 ;A←((R0))
【例3-9】若(R1)= 20H,(20H)= 55H。执行指令 MOV A,@R1 后,(A)= 55H。
2019/12/16
19
以Rn为目的,例如:
MOV R7,A ;R7←(A) MOV R7,#55H ;R7←#55H MOV R7,55H ;R7←(55H)
【例3-12】若(R1)=30H,(A)=20H,执行指令 MOV @R1,A 后,(30H)=20H。
注:以@Ri和Rn为目的操作数时,源操作数不能为Rn和@Ri
2019/12/16
21
二、 特殊传送指令
堆栈操作指令PUSH和POP
堆栈是一片存储区,遵循“后进先出”原则,栈顶由SP指示。 80C51的堆栈设在片内RAM低端的128个单元,向上生长。
←--------数据传送方向
--------数据交换
2019/12/16
6
3.2.3 操作数寻址方式
寻址方式:寻找(源)操作数或指令转移地址的方式 仅介绍5种操作数寻址方式
一、寄存器寻址
【例】若(R0)=30H,
操作数在寄存器中
执行MOV A,R0后,(A)=30H
寻址空间:
00H
生长方向
23H 40H
45H 50H
栈底 6FH 70H 71H

顶 RAM
6FH
SP

23H 40H
45H 50H

栈底 6FH
23H 70H
45H 71H
RAM
71H SP
45H 40H ③
23H 50H
④ 栈底 6FH 23H 70H 45H 71H
RAM
6FH SP
SFR
SFR
SFR
(a)初始状态 (b)2条PUSH指令执行后 (c)2条POP指令执行后
2019/12/16
23
数据交换指令XCH、XCHD和SWAP
数据交换属于同时进行的双向传送
字节交换,例如: XCH A,55H ;(A)(55H)
XCH A,R7 ;(A) (R7)
R0
80H
XCH A,@R0 ;(A)((R0))
R0
20H
【例3-20】若(R0)=80H, (A)=20H。 执行指令 XCH A,R0 后,
执行MOV A,@R0后,(A)=5AH
片外RAM(@Ri、@DPTR)
片内:MOV 片外:MOVX
30H E6H MOV A,@R0
30H R0 5AH
RAM R0中的内容为
操作数的地址
5AH
ACC
ROM
SFR
2019/12/16
9
四、立即寻址
操作数在指令编码中 寻址空间:
ROM
【例】执行MOV A,#50H 结果:(A)=50H
如:MOV 20H,#50H
01110101 01000000 01010000
编码为:
即:75H 20H 50H
2019/12/16
17
3.4 80C51的指令系统
3.4.1 数据传送类指令(29条)
一般不影响标志寄存器PSW的状态。
传送类指令有两大类
一般传送( MOV ) 特殊传送,如:
符号(符号名、标号或特定符号$)、表达式组成; 表达式由运算符和数据构成的算式。 如:4*(5+6)、2 shl 2等
注释只是对语句的说明,以增加程序的可读性,以英文分 号”;”开头。
例:tab: db 20h,4*(2+6),40h,50h,10h ;定义一串数据,起始地址为tab mov dptr,#tab
另一类直接寻 址是转移目标地 址的寻址。如: LJMP ADDR16
操作数 在50H单元
50H
3AH
E5H 50H
MOV A,50H
RAM
3AH
ACC
ROM
SFR
2019/12/16
8
三、寄存器间接寻址
寄存器中的内容是操作数的地址
寻址空间:
【例】若(R0)=30H,(30H)=5AH
片内RAM(@Ri、SP)
2019/12/16
2
3.1.2 汇编与连接
汇编连接后得到目标文件。
:记录长度|起始地址|记录类型|指令代码|校验和
3.1.3 可执行程序的写入
2019/12/16
3
3.2 汇编指令格式及寻址方式
3.2.1 汇编语言的指令格式
[标号:] 指令助记符 [操作数1,] [操作数2,] [操作数3,] [;注释]
3.2.2 汇编指令功能描述符号
Rn(n=0~7)-当前工作寄存器组中的寄存器R0~R7之一 Ri(i=0,1)-当前工作寄存器组中的寄存器R0或R1 @ ----------间址寄存器前缀 #data ------8位立即数 #data16-----16位立即数 direct------片内低128个RAM单元地址及SFR地址 addr11------11位目的地址 addr16------16位目的地址 rel---------8位地址偏移量,范围:-128~+127 bit---------片内RAM位地址、SFR的位地址 / ----------位操作数的取反操作前缀 (×)------表示 × 地址单元或寄存器中的内容 ((×))----表示 × 单元或寄存器内容为地址所指定单元的内容
2019/12/16
16
双字节指令(45条)
位号 字节
76543Байду номын сангаас10 opcode
data或direct
如:MOV A,#50H 编码为:
0 1 1 1 0 1 0 0 即:74H
01010000
50H
三字节指令(17条)
位号 字节
76543210
opcode data或direct data或direct
ORG MAIN:MOV
MOV MOV LOOP:MOV INC DJNZ SJMP END
0000H R7,#16 R0,#30H A,#55H @R0,A R0 R7,LOOP $
;R7存放单元数量16 ;R0作为地址寄存器,初值为30H ;数据55H放入累加器中 ;累加器内容送入R0指向的单元中 ;调整地址指向下一单元 ;循环直至16个单元全都完成 ;踏步暂停
第3章 80C51单片机汇编语言概述
3.1 单片机可执行程序生成示例 3.2 汇编指令格式与寻址方式 3.3 汇编器的伪指令 3.4 80C51的指令系统 3.5 汇编语言程序示例
2019/12/16
1
3.1 单片机可执行程序生成示例
3.1.1 编辑源文件
【例3-1】编写程序,实现将30H至3FH共16个RAM单元初始 化为“55H”的功能。
[标号:] DW 字数据表
ORG 1400H DATA1:DW 324AH,3CH
……
1400H 32H 1401H 4AH 1402H 00H 1403H 3CH
其它一些伪指令参见教材表3.3
2019/12/16
15
大端模式
补充: 指令格式
机器指令:计算机能直接识别和执行的指令。
机器指令的字节编码形式
00H
74H 50H
MOV A,#50H
RAM
操作码后紧跟 操作数50H
ROM
50H ACC SFR
对于MOV DPTR,#2100H指令,立即数高8位“21H”装入DPH
2019/12/16
10
五、变址寻址
操作数地址:基地址+偏移量 寻址空间:
ROM
执行MOV A,@A+DPTR”后 结果:(A)=88H
22
利用堆栈完成40H与50H单元内容的交换的示例
MOV SP,#6FH;将堆栈设在70H以上RAM空间 PUSH 40H ;①将40H单元的“23H”入栈,之后(SP)=70H PUSH 50H ;②将50H单元的“45H”入栈,之后(SP)=71H POP 40H ;③将SP指向的71H单元的内容弹到40H单元,之后(SP)=70H POP 50H ;④将SP指向的70H单元的内容弹到50H单元,之后(SP)=6FH
不占用dptr202021528342算数运算类指令24条算数运算结果要影响psw中标志位cy为11无符号数字节加减发生进位或借位ov为11有符号数字节加减发生溢出错误ac为11十进制数bcd码加法的结果应调整pp为11存于累加器aa中操作结果的11的个数为奇数标志位意义标志位与相关指令影响指令标志addaddcsubbdamuldivcy0000acovpp202021529算数运算影响标志位示例
寄存器名 位名
INC R0 DJNZ R7,LOOP MOV SUM,A
比较:标号只能是地址,符号名可以代表地址、常数、段名等
注:用EQU定义的符号名一经定义便不能重新定义和改变
2019/12/16
13
定义位地址为符号名伪指令BIT
符号名 BIT 位地址表达式 如: ST BIT P1.0 ;将P1.0的位地址赋给符号名ST CF BIT 0D7H ;将位地址为D7H的位定义为符号名
MOVC MOVX PUSH、POP XCH、XCHD SWAP
2019/12/16
18
一、 一般传送指令
16位传送(仅1条)
例:MOV DPTR,#2100H;DPTR←#2100H 8位传送 通用格式 MOV <目的字节>,<源字节> ; 以A为目的,例如: MOV A,#55H ;A←#55H
用BIT定义的“符号名”一经定义便不能重 新定义和改变
2019/12/16
14
3.3.3 存储空间初始化伪指令
定义字节数据表伪指令DB
[标号:] DB 字节数据表
如: ORG 1000H DB -2,-4,-6,8,10,18
定义字数据表伪指令DW
1000H FEH 1001H FCH
FAH 08H 0AH 12H
标号是指令的符号地址,以非数字字符开头;
由1-31个字符组成,由字母、数字、“-”、“?” 等组成,不能由数字开头;
不能用已定义的保留字; 必须后跟英文冒号”:”
指令助记符是指令功能的英文缩写,不可空缺。
2019/12/16
4
操作数是指令要操作的数据或数据的地址 操作数可以空缺,或者一项、两项、三项或者多项; 各项之间用英文逗号隔开; 操作数可以是数据(二进制、十六进制、ASCII码等)、
00H
【例】(A)=0FH (DPTR)=2400H
93H MOVC A,@A+DPTR 240FH单元的内 容88H为操作数 +
88H 240FH
RAM
2400H
00H DPL 24H DPH
0FH 88H
ACC
ROM
SFR
变址寻址还用于跳转指令,如JMP @A+DPTR
2019/12/16
11
3.3 汇编器的伪指令
END
该伪指令位于源程序的最后一行。
3.3.2 符号定义伪指令
定义常值为符号名伪指令EQU
符号名 EQU 常值表达式
LEN EQU 10
符号名为:
SUM EQU 21H
地址 常数 段名
BLOCK EQU CLR MOV MOV
22H A R7,#LEN R0,#BLOCK
字符串
LOOP:ADD A,@R0
相关文档
最新文档