89C51总汇编指令集.docx

上传人:b****6 文档编号:7984248 上传时间:2023-05-12 格式:DOCX 页数:26 大小:104.05KB
下载 相关 举报
89C51总汇编指令集.docx_第1页
第1页 / 共26页
89C51总汇编指令集.docx_第2页
第2页 / 共26页
89C51总汇编指令集.docx_第3页
第3页 / 共26页
89C51总汇编指令集.docx_第4页
第4页 / 共26页
89C51总汇编指令集.docx_第5页
第5页 / 共26页
89C51总汇编指令集.docx_第6页
第6页 / 共26页
89C51总汇编指令集.docx_第7页
第7页 / 共26页
89C51总汇编指令集.docx_第8页
第8页 / 共26页
89C51总汇编指令集.docx_第9页
第9页 / 共26页
89C51总汇编指令集.docx_第10页
第10页 / 共26页
89C51总汇编指令集.docx_第11页
第11页 / 共26页
89C51总汇编指令集.docx_第12页
第12页 / 共26页
89C51总汇编指令集.docx_第13页
第13页 / 共26页
89C51总汇编指令集.docx_第14页
第14页 / 共26页
89C51总汇编指令集.docx_第15页
第15页 / 共26页
89C51总汇编指令集.docx_第16页
第16页 / 共26页
89C51总汇编指令集.docx_第17页
第17页 / 共26页
89C51总汇编指令集.docx_第18页
第18页 / 共26页
89C51总汇编指令集.docx_第19页
第19页 / 共26页
89C51总汇编指令集.docx_第20页
第20页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

89C51总汇编指令集.docx

《89C51总汇编指令集.docx》由会员分享,可在线阅读,更多相关《89C51总汇编指令集.docx(26页珍藏版)》请在冰点文库上搜索。

89C51总汇编指令集.docx

89C51总汇编指令集

寻址方式表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

可以直接用位地址

也可以用寄存器名字加位数表

如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

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

得到10111110B

(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个

P0.0~P0.7,P1.0~P1.7,P2.0~P2.7,

P3.0~P3.7

本操作必须有一方是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)点操作符号方式,如PSW.4(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位的

1.EQU定义的字符名必须先定义后使用

DATA可以后定义先使用

2.EQU可以把一个汇编符号赋值给字符名称,DATA只能把数据赋给字符名

3.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位地址

A1BITP1.0

P1口第0位的位地址90H起了一个A1名

摘入于北京航空航天大学出版社李朝青的《单片机原理及接口技术》(第3版)

对89C51的汇编语言进行整理,以备初期使用

有不对的地方请大家指出,邮箱whx_cb@

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2