AT89C52汇编

微机原理

一、AT89C52结构

1.引脚

在这里插入图片描述

2.程序状态字PSW

在这里插入图片描述

二、AT89C52汇编指令

1.指令符号约定

符号指令含义
A累加器ACC
BB寄存器,主要用于乘除指令,也可以作为通用寄存器使用
C进位标志CY,在位操作中作为位运算的累加器,也被称为布尔累加器
Rn(n=0~7)当前选中的工作寄存器组中的寄存器R0~R7之一
Ri(i=0~1)当前选中的工作寄存器组中的寄存器R0或R1
@间接寻址方式中,作为间接寻址寄存器的前缀
$当前指令地址
#data8位立即数
#data1616位立即数
direct8位直接地址,表示片内低128个RAM单元地址及SFR地址
addr1111位目的地址
addr1616位目的地址
rel补码形式表示的8位相对偏移地址,其值在-127~+128范围内
bit片内RAM或特殊功能寄存器SFR中某一可寻址位的位地址
/位操作数的取反操作前缀符号
(x)表示x地址所对应的单元或寄存器中的内容
((x))表示以x单元或寄存器内容为地址间接寻址单元的内容
将箭头右边的内容送入箭头左边的单元中

2.指令系统的分类

2.1、按指令功能分类(功能)

数据传送指令29条、算术运算指令24条、逻辑运算指令24条、控制转移指令17条和位操作指令17条。

2.2、按指令所占字节数分类(空间)

单字节指令49条、双字节指令46条、三字节指令16条。

2.3、按指令执行时间分类(时间)

单周期指令65条、双周期指令44条和四周期指令2条。

功能属性是指一条指令的操作功能;空间属性是指一条指令在程序存储器中存储所占用的字节数;事件属性是指一条指令执行所需占用的时间。

3.寻址方式

序号寻址方式寄存器或存储空间
1基本方式寄存器寻址寄存器R0~R7、A、B、AB、DPTR和C(布尔累计器)
2直接寻址片内RAM低128字节、SFR
3寄存器间接寻址片内RAM(@R0、@R1、SP)
片外RAM(@R0、@R1、DPTR)
4立即寻址ROM(程序存储器)
5扩展方式变址寻址ROM(@A+DPTR,@A+PC)
6相对寻址ROM(PC当前值的-128~+127字节)
7位寻址可寻址位(片内RAM的20H~2FH单元的位和部分SFR的位)

位寻址的实质是直接寻址,相对寻址的则是指令地址的寻址。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.数据传送类指令

4.1、片内RAM和SFR数据传送指令
汇编指令机器码功能代码长度指令周期
MOV A,#data74H,dataA←data21
MOV A,directE5H,directA←direct21
MOV A,RnE8H+nA←(Rn)11
MOV A,@RiE6H+iA←((Ri))11
MOV direct,AF5H,directdirect←(A)21
MOV direct,#data75H,direct,datadirect←data32
MOV direct,direct85H,原地址,目标地址direct←(direct)32
MOV direct,Rn88H+n,directdirect←(Rn)22
MOV direct,@Ri86H+i,directdirect←((Ri))22
MOV Rn,AF8H+nRn←(A)11
MOV Rn,#data78H+n,dataRn←data21
MOV Rn,directA8H+n,directRn←(direct)22
MOV @Ri,AF6H+i(Ri)←(A)11
MOV @Ri,#data76H+i,data(Ri)←data21
MOV @Ri,directA6H+i,direct(Ri)←(direct)22
MOV DPTR,#data90H,dataDPTR←data32
4.2、片外RAM及I/O接口数据传送指令
汇编指令机器码功能代码长度指令周期
MOVX A,@RiE2H+iA←((Ri))(读)12
MOVX A,@RDPTRE20HA←((DPTR))(读)12
MOVX @Ri,AF2H+i(Ri)←A(写)12
MOVX @DPTR,AF0HA←DPTR(写)12
4.3、查表指令
汇编指令机器码功能代码长度指令周期
MOVC A,@A+PC83HPC←(PC)+1,
A←((A)+(PC))
12
MOVC A,@A+DPTR93HA←((A)+(DPTR))12
4.4、数据交换指令
汇编指令机器码功能代码长度指令周期
XCH A,directC5H+,direct(A)与(direct)交换21
XCH A,RnC8H+n(A)与(Rn)交换11
XCH A,@RiC6H+i(A)与((Ri))交换11
XCHD A,@RiD6H+i ( A 3 − 0 ) 与 ( ( R i ) 3 − 0 ) 交 换 (A_{3-0})与((Ri)_{3-0})交换 (A30)((Ri)30)11
SWAP AC4H ( A 3 − 0 ) 与 ( A 7 − 4 ) 交 换 (A_{3-0})与(A_{7-4})交换 (A30)(A74)11
4.5、堆栈操作指令
汇编指令机器码功能代码长度指令周期
PUSH directCOH,directSP←(SP)+1,(SP)←(direct)22
POP directDOH,directdirect←((SP)),SP←(SP)-122

累加器ACC必须全写,不能只写A。

5.算术运算类指令

5.1、加法运算指令
汇编指令机器码功能代码长度指令周期
ADD A,#data24H,dataA←(A)+data(不带进位)21
ADD A,direct25H,directA←(A)+(direct)(不带进位)21
ADD A,Rn28H+nA←(A)+(Rn)(不带进位)11
ADD A,@Ri26H+iA←(A)+((Ri))(不带进位)11
ADDC A,#data34H,dataA←(A)+data+©(带进位)21
ADDC A,direct35H,directA←(A)+(direct)+©(带进位)21
ADDC A,Rn38H+nA←(A)+(Rn)+©(带进位)11
ADDC A,@Ri36H+iA←(A)+((Ri))+©(带进位)11
INC A04H,dataA←(A)+1(加1)11
INC direct05H,directA←(direct)+1(加1)21
INC Rn08H+nA←(Rn)+1(加1)11
INC @Ri06H+iA←((Ri))+1(加1)11
INC DPTRA3HDPTR←(DPTR)+1(加1)12
DA AD4H若(A3-0)>9或(AC)=1,则(A3-0)←(A3-0)+6
若(A7-4)>9或(C)=1,则(A7-4)←(A~7-4)+6(十进制调整,BCD码)
11

在这里插入图片描述

5.2、减法运算指令
汇编指令机器码功能代码长度指令周期
SUBB A,#data94H,dataA←(A)-data-(C)(带借位)21
SUBB A,direct95H,directA←(A)-(direct)-(C)21
SUBB A,Rn98H+nA←(A)-(Rn)-(C)11
SUBB A,@Ri96H+iA←(A)-((Ri))-(C)11
DEC A14H,dataA←(A)-1(减1)11
DEC direct15H,directA←(direct)-121
DEC Rn18H+nA←(Rn)-111
DEC @Ri16H+iA←((Ri))-111
5.3、乘除运算指令
汇编指令机器码功能代码长度指令周期
MUL ABA4HA←AXB结果低八位,B←AXB结果高八位14
DIV AB84HA←A/B的商,B←A/B的余数14

6.逻辑操作类指令

汇编指令机器码功能代码长度指令周期
ANL A,#data54H,dataA←(A)∧data(与)21
ANL A,direct55H,directA←(A)∧(direct)21
ANL A,Rn58H+nA←(A)∧(Rn)11
ANL A,@Ri56H+iA←(A)∧((Ri))11
ANL direct,A52H,directdirect←(direct)∧(A)21
ANL direct,#data53H,direct,datadirect←(direct)∧data31
ORL A,#data44H,dataA←(A)∨data(或)21
ORL A,direct45H,directA←(A)∨(direct)21
ORL A,Rn48H+nA←(A)∨(Rn)11
ORL A,@Ri46H+iA←(A∨((Ri))11
ORL direct,A42H,directdirect←(direct)∨(A)21
ORL direct,#data43H,direct,datadirect←(direct)∨data32
XRL A,#data64H,dataA←(A)⊕data(异或)21
XRL A,direct65H,directA←(A)⊕(direct)21
XRL A,Rn68H+nA←(A)⊕(Rn)11
XRL A,@Ri66H+iA←(A)⊕((Ri))11
XRL direct,A62H,directdirect←(direct)⊕(A)21
XRL direct,#data63H,direct,datadirect←(direct)⊕data31
CLR AE4HA←0(清零)11
CPL AF4H A ← ( A ) ‾ ( 取 反 ) A←\overline{(A)}(取反) A(A)()11
RR A03H A 6 − 0 ← ( A 7 − 1 ) , A 7 ← ( A 0 ) ( 循 环 移 位 ) A_{6-0}←(A_{7-1}),A_7←(A_0)(循环移位) A60(A71),A7(A0)()11
RRL A13H ( A 6 − 0 ) ← ( A 7 − 1 ) , C ← ( A 0 ) , ( A 7 ) ← C (A_{6-0})←(A_{7-1}),C←(A_0),(A_7)←C (A60)(A71),C(A0),(A7)C11
RL A23H ( A 7 − 1 ) ← A 6 − 0 , ( A 0 ) ← A 7 (A_{7-1})←A_{6-0},(A_0)←A_7 (A71)A60,(A0)A711
RLC A33H ( A 7 − 1 ) ← A 6 − 0 , C ← ( A 7 ) , ( A 0 ) ← C (A_{7-1})←A_{6-0},C←(A_7),(A_0)←C (A71)A60,C(A7),(A0)C11

7.控制转移指令

7.1、无条件转移指令

汇编指令机器码功能代码长度指令周期
SJMP rel80H,relPC←(PC)+2+rel(相对转移)22
AJMP addr11 a 10 a 9 a 8 00001 B , a 7 − a 0 a_{10}a_9a_800001B,a_7-a_0 a10a9a800001B,a7a0 P C ← ( P C ) + 2 , P C 10 − 0 ← a d d r 11 ( 绝 对 转 移 ) PC←(PC)+2,PC_{10-0}←addr11(绝对转移) PC(PC)+2,PC100addr11()22
LJMP addr16 02 H , a d d r 15 − 8 , a d d r 7 − 0 02H,addr_{15-8},addr_{7-0} 02H,addr158,addr70PC←addr16(长转移)32
JMP @A+DPTR73HPC←A+(DPTR)(间接转移,散转)12
7.2、条件转移指令(相对寻址)
汇编指令机器码功能代码长度指令周期
JZ rel60H,rel若(A)=00H,则PC←(PC)+2+rel
若(A)≠00H,则PC←(PC)+2
22
JNZ rel70H,rel若(A)≠00H,则PC←(PC)+2+rel
若(A)=00H,则PC←(PC)+2
22
CJNE A,#data,relB4H,data,rel若(A)=data,则PC←(PC)+3
若(A)>data,则PC←(PC)+3+rel,C←0
若(A)<data,则PC←(PC)+3+rel,C←1
32
CJNE A,direct,relB5H,direct,rel若(A)=(direct),则PC←(PC)+3
若(A)>(direct),则PC←(PC)+3+rel,C←0
若(A)<(direct),则PC←(PC)+3+rel,C←1
32
CJNE Rn,#data,relB6H+n,data,rel若(Rn)=data,则PC←(PC)+3
若(Rn)>data,则PC←(PC)+3+rel,C←0
若(Rn)<data,则PC←(PC)+3+rel,C←1
32
CJNE @Ri,#data,relB1H+i,data,rel若((Ri))=data,则PC←(PC)+3
若((Ri))>data,则PC←(PC)+3+rel,C←0
若((Ri))<data,则PC←(PC)+3+rel,C←1
32
DJNZ direct,relD5H,direct,rel先direct←(direct)-1,再判断
若(direct)≠00H,则PC←(PC)+3+rel
若(direct)=00H,则PC←(PC)+3
32
DJNZ Rn,relD8H+n,rel先Rn←(Rn)-1,再判断
若(Rn)≠00H,则PC←(PC)+3+rel
若(Rn)=00H,则PC←(PC)+3
22
7.3、子程序调用指令
汇编指令机器码功能代码长度指令周期
ACALL addr11 a 10 a 9 a 8 10001 B , a 7 − a 0 a_{10}a_9a_810001B,a_7-a_0 a10a9a810001B,a7a0PC←(PC)+2(绝对调用)
SP←(SP)+1,(SP)←(PC7-0)
S←(SP)+1,(SP)←(PC15-8)
PC10-0←addr11
22
LCALL addr16$$12H,addr_{15-8},addr_{7-0}PC←(PC)+3(长调用)
SP←(SP)+1,(SP)←(PC7-0)
S←(SP)+1,(SP)←(PC15-8)
PC10-0←addr16
32
7.4、返回指令与空操作指令
汇编指令机器码功能代码长度指令周期
RET22HPC15-8←((SP)),(SP)←(SP)-1(中断服务程序)
PC7-0←((SP)),(SP)←(SP)-1
12
RETI32HPC15-8←((SP)),(SP)←(SP)-1(中断服务程序)
PC7-0←((SP)),(SP)←(SP)-1
12
NOP00HPC←(PC)+1(可以实现延时1μs)11

8.位操作指令

位地址的表示方法:

  1. 直接用位地址,如D4H;
  2. 用特殊功能寄存器名加位数,如PSW.4;
  3. 用SFR直接地址加位数,如D0H.4;
  4. 用位名称,如RS1。
8.1、位传送指令
汇编指令机器码功能代码长度指令周期
MOV C,bitA2H,bitC←(bit)21
MOV bit,C92H,bitbit←(C)22
8.2、位清0与位置1指令
汇编指令机器码功能代码长度指令周期
CLR CC3HC←011
CLR bitC2H,bitbit←021
SETB CD3HC←111
SETB bitD2H,bitbit←121
8.3、位逻辑运算指令
汇编指令机器码功能代码长度指令周期
ANL C,bit82H,bitC←(C)∧(bit)22
ANL C,/bitB0H,bit C ← ( C ) ∧ ( b i t ‾ ) C←(C)∧(\overline{bit}) C(C)(bit)22
ORL C,bit72H,bitC←(C)∨(bit)22
ORL C,/bitA0H,bit C ← ( C ) ∨ ( b i t ‾ ) C←(C)∨(\overline{bit}) C(C)(bit)22
CPL CB3H C ← ( C ‾ ) C←(\overline{C}) C(C)11
CPL bitB2H,bit b i t ← ( b i t ‾ ) bit←(\overline{bit}) bit(bit)21
8.4位条件转移指令(相对寻址)
汇编指令机器码功能代码长度指令周期
JC rel40H,rel若(C)=1,则PC←(PC)+2+rel
若(C)=0,则PC←(PC)+2
22
JNC rel50H,rel若(C)=0,则PC←(PC)+2+rel
若(C)=1,则PC←(PC)+2
22
JB bit,rel20H,bit,rel若(bit)=1,则PC←(PC)+3+rel
若(bit)=0,则PC←(PC)+3
32
JNB bit,rel30H,bit,rel若(bit)=0,则PC←(PC)+3+rel
若(bit)=1,则PC←(PC)+3
32
JBC bit,rel10H,bit,rel若(bit)=1,则PC←(PC)+3+rel 且(bit)←0
若(bit)=0,则PC←(PC)+3
32
8.5案例

在这里插入图片描述
上面第二行#1FH为最后一个工作寄存器存储单元,所以INC后为20H(位寻址区)。
在这里插入图片描述

三、汇编语言程序设计

AT89C52单片机的常用伪指令有ORG、END、EQU、DB、DW、DS和BIT等。

1.伪指令

1.1、汇编起始伪指令ORG

格式:[标号:]ORG 16位地址

功能:规定程序块或数据块在程序存储器中存放的起始地址。

1.2、汇编结束指令END

格式:[标号:]END [表达式]

功能:结束汇编。汇编程序遇到END伪指令后即结束汇编。处于END之后的程序,汇编程序不予处理。

1.3、等值伪指令EQU

格式:字符名称 EQU 操作数

功能:将操作数赋予规定的字符名称。

注:”字符名称“不是标号,不能使用”:”做分隔符;”操作数可以是一个数值,也可以是一个已经定义的名字或可以求值的表达式。用EQU指令赋值以后字符名称可以用作数据地址、代码地址、位地址或直接当做一个立即数使用。字符所赋值可以是8位或16位二进制数。必须先赋值后使用。

1.4、定义字节伪指令DB

各式:[标号:] DB 8位二进制数表

功能:DB指令是在程序存储器中,从指定的地址单元开始,定义若干个8位内存单元的内容,用来在程序存储器的某一部分存入一组8位二进制数,也可以是引号引起来的字符,或者将一个表格存入程序存储器,汇编以后会影响程序存储器的内容。(存入数据为十六进制形式,一般2000H单元开始存)。

1.5、定义字伪指令DW

各式:[标号:] DW 16位二进制数表

功能:DW指令是在程序存储器中,从指定的地址单元开始,定义若干个16位数据。一个16位数据要占两个存储单元,其中高8位存入地址单元,低8位存入高地址单元。

注:DB和DW伪指令都只对程序存储器起作用,不能对数据存储器的内容进行赋值或进行初始化工作。

1.6、定义存储区伪指令DS

各式:[标号:] DS 表达式

功能:从指定标号(或地址)开始,保留指定数目(表达式的值)的字节单元作为备用存储区,供程序运行使用(用于程序存储器)。这些单元的初值为0。

1.7、位定义伪指令BIT

格式:字符名称 BIT 位地址

功能:将位地址赋予指定的字符名称。

四、输入/输出方式与中断

5.1

五、8255A

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值