C汇编指令集.docx
- 文档编号:23906597
- 上传时间:2023-05-22
- 格式:DOCX
- 页数:27
- 大小:112.52KB
C汇编指令集.docx
《C汇编指令集.docx》由会员分享,可在线阅读,更多相关《C汇编指令集.docx(27页珍藏版)》请在冰豆网上搜索。
C汇编指令集
公司内部档案编码:
[OPPTR-OPPT28-OPPTL98-OPPNN08]
C汇编指令集
寻址方式表2-1
寻址方式
定义
例子
使用范围
备注
寄存器寻址
直接用寄存器名称作为操作数进行寻址
MOVA,R0
MOVP1,A
就是A到P1口
ADDA,R0
当前工作寄存器组R0~R7
A
B
C
DPTR
直接寻址
操作数为片内RAM单元的地址
MOVA,3AH
MOVA,P1
MOVA,90H
包括32个工作寄存器组在内片内RAM低128字节
SFR
SFR(只能用直接寻址)
立即数寻址
直接一字节或两字节的数,用#来标明
如:
MOVDPTR,#DATA16
MOVDPTR,#2000H
MOVR0,#31H
ROM
寄存器间接寻址
用给出寄存器内的内容作为地址所指向的寄存器中内容为操作数,用@表明
MOVA,@R0
MOVA,@DPTR
R0或R1可以间接寻址片内RAM低128字节地址和片外RAM的低128字节地址。
SP(仅是PUSH和POP)
间接寻址64KB片外RAM。
不可以SFR
片外RAM可以利用R0,R1,DPTR
变址寻址
以PC或DPTR中的内容作为基地址,以A中内容作为地址偏移量
两者相加得到操作数地址
MOVCA,@A+DPTR
只能访问ROM
范围为64KB
只能读取
不能写入
多用于查表
相对寻址
以PC的值为源地址
与给出的偏移量rel相加得到目的地址
JCrel
如果CY=1,
(PC)+2+rel
SJMP55H
ROM
256字节范围内
rel范围是-128~127
正向:
rel=目的地址-源地址-2
反向:
rel=(目的地址-(源地址+2))的补码=FEH-|地址差|
寻址方式表2-2
寻址方式
定义
例子
使用范围
备注
位寻址
对某一位寻址bit
CLRbit
片内RAM中20H~2FH共128位
字节地址可以被8整除的SFR
可以直接用位地址
也可以用寄存器名字加位数表
如
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
MOVdirect,direct
前为源地址
后为目的地址
目的地址为间接地址
3个
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+DPTR
MOVCA,@A+PC
(PC)+1到PC后,((A)+(PC))到A
图1-2
传送指令2-2
类型
助记符
用途
格式
例子
备注
数据传送
MOVX
累加器A与片外RAM之间传送
4个
MOVXA,@Ri
MOVXA,@DPTR
MOVX@Ri,A
MOVX@DPTR,A
前两个使/RD=0
后两个使/WR=0
@Ri寻址片外RAM0~255字节
@DPTR寻址片外RAM0~64KB
栈指令PUSH
入栈
1个
PUSHdirect
(SP)+1→(SP)
(direct)→(SP)
栈指令
POP
出栈
1个
POPdirect
((SP))→direct
(SP)-1→(SP)
先进后出
交换指令XCH
字节交换
3个
XCHA,Rn
XCHA,direct
XCHA,@Ri
交换指令XCHD
半字节交换
1个
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
4条
ADDCA,Rn
ADDCA,direct
ADDCA,@Ri
ADDCA,#data
影响标志位AC,CY,OV,P
SUBB
带借位CY的减法
4条
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
1条
DIVAB
CY和OV清零
如果B中结果为00H,OV置1
INC
内容加1
5条
INCA
INCRn
INCdirect
INC@Ri
INCDPTR
不影响PSW,即使溢出也不影响
注意与ADD的区别
DEC
内容减1
4条
DECA
DECRn
DECdirect
DEC@Ri
同INC相同
注意没有DPTR
DA
ADD或ADDC后,压缩BCD数相加结果的调整,再存于A
1条
DAA
(A)=
0101011B
(56BCD数)
(R3)=
01100111B
(67BCD数)
ADDCA,R3
得到B
(0BEH)
CY=1
DAA
高低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
1条
CLRA
CPL
取反A全部内容
1条
CPLA
不影响标志位
RL
循环左移A一位
1条
RLA
RR
循环右移A一位
1条
RRA
RLC
带进位循环左移A一位
1条
RLCA
用于累加器A中内容*2
RRC
带进位循环右移A一位
1条
RRCA
SWAP
A中的高低4位内容互换
1条
SWAPA
(A)=FAH
SWAPA
(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
后两条是直接地址操作
如果是I/O端口,则可以是“读-修改-写”操作
XRL
逻辑异或
XRLA,Rn
XRLA,direct
XRLA,@Ri
XRLA,#data
XRLdirect,A
XRLdirect,#data
后两条是直接地址操作
如果是I/O端口,则可以是“读-修改-写”操作
注:
都置影响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,多用于产生机器周期延迟
NOP
跳转指令3-2
类型
助记符
用途
格式
过程
备注
有条件转移
JZ
A中内容全为0进行偏移跳转
JZrel
rel为带符号8位数-128~127共256字节
也可以是目标符号代替
JNZ
A中内容不全为0进行跳转
JNZrel
rel为带符号8位数-128~127共256字节
也可以是目标符号代替
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
(PC)+3→PC
(direct)>(A),(PC)+rel→(PC)且1→CY
(PC)+3→PC
(direct)=(A),(PC)+rel→(PC)且0→CY
CJNEA,#data,rel
(PC)+3→PC
#data<(A),(PC)+rel→(PC)且0→CY
(PC)+3→PC
#data>(A),(PC)+rel→(PC)且1→CY
(PC)+3→PC
#data=(A),(PC)+rel→(PC)且0→CY
跳转指令3-3
类型
助记符
用途
格式
过程
备注
有条件转移
CJNE
比较转移指令
CJNERn,#data,rel
(PC)+3→PC
#data<(Rn),(PC)+rel→(PC)且0→CY
首先PC内容加3
如果后面的比前面的小
按偏移量跳转,CY置1
如果后面的比前面的大
按偏移量跳转,CY置0
如果后面的等于前面的
不跳转,按顺序执行
CY置0
rel是+127~-128字节地址
示意如图1-4
(PC)+3→PC
#data>(Rn),(PC)+rel→(PC)且1→CY
(PC)+3→PC
#data=(Rn),(PC)+rel→(PC)且0→CY
CJNE@Ri,#data,rel
(PC)+3→PC
#data<((Ri)),(PC)+rel→(PC)且0→CY
(PC)+3→PC
#data>((Ri)),(PC)+rel→(PC)且1→CY
(PC)+3→PC
#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
(PC)+2→PC
(direct)-1→direct
如果(direct)≠0
则(PC)+rel→PC
如果(direct)=0
结束循环,程序往下执行
图1-4比较转移
图1-5循环转移
条用指令1-1
类型
助记符
用途
格式
过程
备注
调用返回指令
ACALL
在2KB地址空间内调用
ACALLaddr11
(PC)+2→PC
(SP)+1→SP
(PC0~7)→(SP)
(SP)+1→SP
(PC15~8)→(SP)
addr10~0→PC10~0
(PC15~11)不变
LCALL
在64KB的程序存储器范围内调用
LCALLaddr16
(PC)+3→PC
(SP)+1→SP
(PC0~7)→(SP)
(SP)+1→SP
(PC15~8)→(SP)
Addr15~0→PC15~0
RET
子程序返回到主程序
RET
((SP))→PC15~8
(SP)-1→SP
((SP))→PC7~0
(SP)-1→SP
RETI
中断返回指令
RETI
同上
返回的同时开放中断逻辑
图1-6调用返回指令示意图
位操作指令2-1
类型
助记符
用途
格式
过程
备注
位数据传送指令
MOV
传送
MOVC,bit
MOVbit,C
bit若为00H~7FH是片内RAM(20H~2FH单元)的128位地址
若为80H~FFH则在11个SFR中
也可以是I/O口,共32个
~,~,~,
~
本操作必须有一方是C
位修正指令
CLR
位清零
CLRC
CLRbit
SETB
位置1
SETBC
SETBbit
CPL
位取反
CPLC
CPLbit
位逻辑运算指令
ANL
逻辑与
ANLC,bit
ANLC,/bit
/bit是bit取反后运算,但bit内容不变
ORL
逻辑或
ORLC,bit
ORLC,/bit
位条件转移类指令
JC
检测C
若C=1则偏移转移
若C=0则顺序执行
JCrel
(PC)+2→PC
若(C)=1
则(PC)+rel→PC
若(C)=0
则顺序执行
注意(PC)+2
与JZ正好相反
JNC
检测C
若C=0则偏移转移
若C=1则顺序执行
JNCrel
(PC)+2→PC
若(C)=0
则(PC)+rel→PC
若(C)=1
则顺序执行
位操作指令2-2
类型
助记符
用途
格式
过程
备注
位条件转移类指令
JB
检测bit
若bit=1则偏移转移
若bit=0则顺序执行
JBbit,rel
(PC)+3→PC
若(bit)=1
则(PC)+rel→PC
若(bit)=0
则顺序执行
注意(PC)+3
JNB
检测bit
若bit=0则偏移转移
若bit=1则顺序执行
JNBbit,rel
(PC)+3→PC
若(bit)=0
则(PC)+rel→PC
若(bit)=1
则顺序执行
JBC
检测bit
若bit=1则偏移转移,且bit清零
若bit=0则顺序执行
JBCbit,rel
(PC)+3→PC
若(bit)=1
则(PC)+rel→PC且0→bit
若(bit)=0
则顺序执行
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)点操作符号方式,如(3)位名称方式,如RS1(4)用户自定义,用伪指令bit
伪指令2-1
类型
助记符
用途
格式
例子
备注
伪指令
ORG
汇编起始命令
规定了该指令后的程序放在ROM的起始地址
ORG16位地址
ORG2000H
START:
MOVA,#64H
START在2000H
ORG可多次出现
END
汇编程序结束
后面的单片机不管了
END
EQU
给数据地址,代码地址,位地址或一个立即数定义一个名字
字符名称EQU项
字符名称可以是一个8位的也可以是16位的
AAEQUR1
MOVA,AA
就是用AA代表R1
DELYEQU07EBH
DELY就是16位的
定义的字符名必须先定义后使用
DATA可以后定义先使用
可以把一个汇编符号赋值给字符名称,DATA只能把数据赋给字符名
可把表达式赋值给字符名称,其表达式必须是可求值的
一般DATA用来定义数据地址
DATA
数据地址赋值命令
字符名称DATA表达式
DB
从当前ROM地址开始,存入数据
数据可以是一字节
用逗号分开的字节串
单引号中的ASCII字符串
DB项或项表
ORG2000H
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位的
只对ROM有用,不能对RAM
DS
从当前地址开始
保留表达式所代表的值个单元,以备后用
DS表达式
ORG1000H
DS08H
DB30H,8AH
得到
(1008H)=30H
(1009H)=8AH
只对ROM有用,不能对RAM
BIT
就是给某一位地址起个名,好记
字符名BIT位地址
A1BIT
P1口第0位的位地址90H起了一个A1名
摘入于北京航空航天大学出版社李朝青的《单片机原理及接口技术》(第3版)
对89C51的汇编语言进行整理,以备初期使用
有不对的地方请大家指出,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编 指令