89C51总汇编指令集Word格式文档下载.docx
《89C51总汇编指令集Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《89C51总汇编指令集Word格式文档下载.docx(26页珍藏版)》请在冰点文库上搜索。
SJMP55H
256字节范围内
rel范围是-128~127
正向:
rel=目的地址-源地址-2
反向:
rel=(目的地址-(源地址+2))的补码=FEH-|地址差|
寻址方式表2-2
位寻址
对某一位寻址bit
CLRbit
片内RAM中20H~2FH共128位
字节地址可以被8整除的SFR
可以直接用位地址
也可以用寄存器名字加位数表
如PSW.3
89C51指令系统可分为5大类:
数据传送指令(28条);
算术运算指令(24条);
逻辑运算及移位指令(25条);
控制转移指令(17条);
位操作指令或布尔操作(17条)。
传送指令2-1
类型
助记符
用途
格式
数据传送
移动MOV
目的地址为累加器A
4个
MOVA,Rn
MOVA,direct
MOVA,@Ri
MOVA,#data
只影响PSW的P标志位
目的地址为寄存器Rn
3个
MOVRn,A
MOVRn,direct
MOVRn,#data
MOVR5,A
MOVR5,70H
MOVR5,#A3H
没有MOVRn,Rn
目的地址为直接地址
5个
MOVdirect,A
MOVdirect,Rn
MOVdirect,direct
MOVdirect,@Ri
MOVdirect,#data
前为源地址
后为目的地址
目的地址为间接地址
MOV@Ri,A
MOV@Ri,direct
MOV@Ri,#data
图1-1
16位立即数
1个
MOVDPTR,#data16
MOVDPTR,#1234H
dataH到DPH
dataL到DPL
唯一的16位立即数传送
MOVC
查找表
2个
MOVCA,@A+PC
(PC)+1到PC后,((A)+(PC))到A
图1-2
传送指令2-2
MOVX
累加器A与片外RAM之间传送
MOVXA,@Ri
MOVXA,@DPTR
MOVX@Ri,A
MOVX@DPTR,A
前两个使/RD=0
后两个使/WR=0
@Ri寻址片外RAM0~255字节
@DPTR寻址片外RAM0~64KB
栈指令PUSH
入栈
PUSHdirect
(SP)+1→(SP)
(direct)→(SP)
栈指令
POP
出栈
POPdirect
((SP))→direct
(SP)-1→(SP)
先进后出
交换指令XCH
字节交换
XCHA,Rn
XCHA,direct
XCHA,@Ri
交换指令XCHD
半字节交换
XCHDA,@Ri
低位互换,高位不变
图1-1间接寻址
图1-2查找表
算术运算指令2-1
算术运算指令
ADD
8位无符号二进制数和累加器A中的数相加
不加进位
4条
ADDA,Rn
ADDA,direct
ADDA,@Ri
ADDA,#data
结果存于A中
第3位进位AC置1否则为0
第7位进位CY置1,否则为0
同时影响溢出OV和奇偶P标志位
OV=7位和6位异或
ADDC
同上
不同的是结果加进位CY
ADDCA,Rn
ADDCA,direct
ADDCA,@Ri
ADDCA,#data
影响标志位AC,CY,OV,P
SUBB
带借位CY的减法
SUBBA,Rn
SUBBA,direct
SUBBA,@Ri
SUBBA,#data
(A)-CY-XX→(A)
该位表示在进行有符号数的加减法时是否发生溢出;
当0V=1时,表示有符号数运算结果发生了溢出,
OV=0时,表示有符号数运算结果没有溢出。
第7位如果产生借位,会使CY置1,否则为0
当第一位相减时,首先将CY清零
MUL
A与B中的两个8位无符号数相乘,结果为16位,低字节在A,高字节在B
1条
MULAB
结果大于0FFH,OV置1
算术运算指令2-2
DIV
A与B中的两个8位无符号数相除,商在A,余数在B
DIVAB
CY和OV清零
如果B中结果为00H,OV置1
INC
内容加1
5条
INCA
INCRn
INCdirect
INC@Ri
INCDPTR
不影响PSW,即使溢出也不影响
注意与ADD的区别
DEC
内容减1
DECA
DECRn
DECdirect
DEC@Ri
同INC相同
注意没有DPTR
DA
ADD或ADDC后,压缩BCD数相加结果的调整,再存于A
DAA
(A)=
0101011B
(56BCD数)
(R3)=
01100111B
(67BCD数)
ADDCA,R3
得到10111110B
(0BEH)
CY=1
高低4位都大于9,所以加66H来调整
结果为124
低4位大于9或第三位产生进位即AC=1
则低四位加6H
高4位大于9或CY=1,则高四位加6H
也就是说,判断高低4位是否大于9、AC=1和CY=1对结果加06H,60H或66H
对CY有影响
对OV无影响
不能直接用于十六进制数转换成BCD数,也不能直接用于减法,减法可先换成补码,相加后进行调整
逻辑操作指令1-1
逻辑操作指令
CLR
清零A
CLRA
CPL
取反A全部内容
CPLA
不影响标志位
RL
循环左移A一位
RLA
RR
循环右移A一位
RRA
RLC
带进位循环左移A一位
RLCA
用于累加器A中内容*2
RRC
带进位循环右移A一位
RRCA
SWAP
A中的高低4位内容互换
SWAPA
(A)=FAH
(A)=AFH
ANL
逻辑与
6条
ANLA,Rn
ANLA,direct
ANLA,@Ri
ANLA,#data
ANLdirect,A
ANLdirect,#data
后两条是直接地址操作
如果是I/O端口,则可以是“读-修改-写”操作
ORL
逻辑或
ORLA,Rn
ORLA,direct
ORLA,@Ri
ORLA,#data
ORLdirect,A
ORLdirect,#data
XRL
逻辑异或
XRLA,Rn
XRLA,direct
XRLA,@Ri
XRLA,#data
XRLdirect,A
XRLdirect,#data
注:
都置影响P标志位
图1-3逻辑操作
跳转指令3-1
过程
无条件转移指令
AJMP
短转移指令
AJMPaddr11
(PC)+2→PC,addr11→PC10~0,(PC15~11)不变
2KB范围
LJMP
长转移指令
LJMPaddr16
addr16→PC
64KB程序存储器的任何单元
由于需要三个字节,占用多
SJMP
相对转移(短转移)指令
SJMPrel
SJMP目的地址标号
(PC)+2→PC,(PC)+rel→PC
rel是带符号的8位偏移字节
00H~7FH对应0~127正向转移
80H~FFH对应-128~-1反向转移
特别注意:
rel=FEH时也就是-2,目的地址=PC+2-2=PC,会造成无限循环
JMP
间接转移指令
JMP@A+DPTR
(A)+(DPTR)→PC
对DPTR,A和标志位无影响
可散转
散转程序是分支程序的一种,可实现多分支转移。
根据某种输入或运算的结果,分别转向各个处理程序段取指令
空操作指令
NOP
单字节指令,只是让PC+1,多用于产生机器周期延迟
跳转指令3-2
有条件转移
JZ
A中内容全为0进行偏移跳转
JZrel
rel为带符号8位数-128~127共256字节
也可以是目标符号代替
JNZ
A中内容不全为0进行跳转
JNZrel
CJNE
比较转移指令
CJNEA,direct,rel
(PC)+3→PC
(direct)<
(A),(PC)+rel→(PC)且0→CY
首先PC内容加1
如果后面的比前面的小
按偏移量跳转,CY置1
如果后面的比前面的大
按偏移量跳转,CY置0
如果后面的等于前面的
不跳转,按顺序执行
CY置0
rel是+127~-128字节地址
示意如图1-4
(direct)>
(A),(PC)+rel→(PC)且1→CY
(direct)=(A),(PC)+rel→(PC)且0→CY
CJNEA,#data,rel
#data<
#data>
#data=(A),(PC)+rel→(PC)且0→CY
跳转指令3-3
CJNERn,#data,rel
(Rn),(PC)+rel→(PC)且0→CY
首先PC内容加3
(Rn),(PC)+rel→(PC)且1→CY
#data=(Rn),(PC)+rel→(PC)且0→CY
CJNE@Ri,#data,rel
((Ri)),(PC)+rel→(PC)且0→CY
((Ri)),(PC)+rel→(PC)且1→CY
#data=((Ri)),(PC)+rel→(PC)且0→CY
DJNZ
循环转移指令
DJNZRn,rel
(PC)+2→PC
(Rn)-1→Rn
如果(Rn)≠0
则(PC)+rel→PC
如果(Rn)=0
结束循环,程序往下执行
图1-5
DJNZdirect,rel
(direct)-1→direct
如果(direct)≠0
如果(direct)=0
图1-4比较转移
图1-5循环转移
条用指令1-1
调用返回指令
ACALL
在2KB地址空间内调用
ACALLaddr11
(SP)+1→SP
(PC0~7)→(SP)
(PC15~8)→(SP)
addr10~0→PC10~0
(PC15~11)不变
LCALL
在64KB的程序存储器范围内调用
LCALLaddr16
Addr15~0→PC15~0
RET
子程序返回到主程序
((SP))→PC15~8
(SP)-1→SP
((SP))→PC7~0
RETI
中断返回指令
返回的同时开放中断逻辑
图1-6调用返回指令示意图
位操作指令2-1
位数据传送指令
MOV
传送
MOVC,bit
MOVbit,C
bit若为00H~7FH是片内RAM(20H~2FH单元)的128位地址
若为80H~FFH则在11个SFR中
也可以是I/O口,共32个
P0.0~P0.7,P1.0~P1.7,P2.0~P2.7,
P3.0~P3.7
本操作必须有一方是C
位修正指令
位清零
CLRC
SETB
位置1
SETBC
SETBbit
位取反
CPLC
CPLbit
位逻辑运算指令
ANLC,bit
ANLC,/bit
/bit是bit取反后运算,但bit内容不变
ORLC,bit
ORLC,/bit
位条件转移类指令
JC
检测C
若C=1则偏移转移
若C=0则顺序执行
若(C)=1
若(C)=0
则顺序执行
注意(PC)+2
与JZ正好相反
JNC
若C=0则偏移转移
若C=1则顺序执行
JNCrel
位操作指令2-2
JB
检测bit
若bit=1则偏移转移
若bit=0则顺序执行
JBbit,rel
若(bit)=1
若(bit)=0
注意(PC)+3
JNB
若bit=0则偏移转移
若bit=1则顺序执行
JNBbit,rel
JBC
若bit=1则偏移转移,且bit清零
JBCbit,rel
则(PC)+rel→PC且0→bit
bit清零
注意:
1.位累加器C就是进位标志位CY。
2.位地址是片内RAM字节地址20H~2FH,一共128个位,地址为00H~7FH。
还有单元地址可被8整除的SFR。
3.ACC(E0H~E7H)、B(F0H~F7H)和片内RAM的128个位可做软件标志或存储位变量
4.位表达方式:
(1)直接位地址,如D4H
(2)点操作符号方式,如PSW.4(3)位名称方式,如RS1(4)用户自定义,用伪指令bit
伪指令2-1
伪指令
ORG
汇编起始命令
规定了该指令后的程序放在ROM的起始地址
ORG16位地址
ORG2000H
START:
MOVA,#64H
START在2000H
ORG可多次出现
END
汇编程序结束
后面的单片机不管了
EQU
给数据地址,代码地址,位地址或一个立即数定义一个名字
字符名称EQU项
字符名称可以是一个8位的也可以是16位的
AAEQUR1
MOVA,AA
就是用AA代表R1
DELYEQU07EBH
DELY就是16位的
1.EQU定义的字符名必须先定义后使用
DATA可以后定义先使用
2.EQU可以把一个汇编符号赋值给字符名称,DATA只能把数据赋给字符名
3.DATA可把表达式赋值给字符名称,其表达式必须是可求值的
一般DATA用来定义数据地址
DATA
数据地址赋值命令
字符名称DATA表达式
DB
从当前ROM地址开始,存入数据
数据可以是一字节
用逗号分开的字节串
单引号中的ASCII字符串
DB项或项表
DB0A3H
DB26H,03H
DB‘ABC’
得到
(2000H)=A3H
(2001H)=26H
(2002H)=03H
(2002H)=41H
(2003H)=42H
(2004H)=43H
A、B、C的ASCII码是41H,42H,43H
8位的
只对ROM有用,不能对RAM
伪指令2-2
DW
按照16位数据存入当前地址
高8位先存入
低8位后存入
DW16位数据项或项表
ORG1500H
DW7234H,8AH,10H
(1500H)=72H
(1501H)=34H
(1502H)=00H
(1503H)=8AH
(1504H)=00H
(1505H)=10H
16位的
DS
从当前地址开始
保留表达式所代表的值个单元,以备后用
DS表达式
ORG1000H
DS08H
DB30H,8AH
(1008H)=30H
(1009H)=8AH
BIT
就是给某一位地址起个名,好记
字符名BIT位地址
A1BITP1.0
P1口第0位的位地址90H起了一个A1名
摘入于北京航空航天大学出版社李朝青的《单片机原理及接口技术》(第3版)
对89C51的汇编语言进行整理,以备初期使用
有不对的地方请大家指出,邮箱whx_cb@