51指令系统Word文件下载.docx

上传人:b****6 文档编号:18066069 上传时间:2022-12-13 格式:DOCX 页数:18 大小:66.21KB
下载 相关 举报
51指令系统Word文件下载.docx_第1页
第1页 / 共18页
51指令系统Word文件下载.docx_第2页
第2页 / 共18页
51指令系统Word文件下载.docx_第3页
第3页 / 共18页
51指令系统Word文件下载.docx_第4页
第4页 / 共18页
51指令系统Word文件下载.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

51指令系统Word文件下载.docx

《51指令系统Word文件下载.docx》由会员分享,可在线阅读,更多相关《51指令系统Word文件下载.docx(18页珍藏版)》请在冰豆网上搜索。

51指令系统Word文件下载.docx

控制转移类指令(17条)

位操作类指令(17条)

3.1.2汇编语言指令格式

操作码助记符[目的操作数,源操作数]

例如MOVA,R0就表示把工作寄存器R0中的数据送入A累加器。

3.1.3汇编语言指令和机器码书写格式

地址机器码[标号]汇编语言指令[注解]

2000H748ASTART:

MOVA,#8AH;

送被乘数

3.1.4指令中的常用符号

·

Rn:

表示当前工作寄存器R0~R7中的一个。

@Ri:

表示寄存器间接寻址,常常作间接寻址的地址指针。

其中Ri代表R0和R1寄存器中的一个。

Direct:

表示内部数据存贮器单元的地址及特殊功能寄存器SFR的地址,对SFR而言,既可使用它的物理地址,也可直接使用它的名字。

#data:

表示8位立即数,即8位常数,取值范围为#00H~#0FFH

#data16:

表示16位立即数,即16位常数,取值范围为#0000H~#0FFFFH

addr16:

表示16位地址

addr11:

表示11位地址

rel:

用补码形式表示的地址偏移量,取值范围为-128~+127。

Bit:

表示内部RAM和SFR中的具有位寻址功能的位地址。

SFR中的位地址可以直接出现在指令中,为了阅读方便,往往也可用SFR的名字和所在的数位表示。

如:

表示PSW中奇偶校验位,可写成D0H,也可写成PSW.0的形式出现在指令中。

@:

表示间接寻址寄存器或基址寄存器的前缀符号。

$:

表示当前指令的地址。

3.2寻址方式

每条指令存数或取数都需要知道如何获得该数据,如何产生操作数或其地址就称作寻址。

指令的寻址方式是指如何获得操作数的方法,一个指令系统的寻址方式越多,计算机的功能越强,灵活性越大。

所以寻址方式的多样性和灵活性是衡量计算机性能的一项重要指标。

MCS-51单片机有七种寻址方式。

1.寄存器寻址(RegisterAddressing)

在指令中指出存放操作数的寄存器,因为寄存器在片内RAM中,所以其特点是速度快。

如MOVA,R0,INCDPTR,MULAB,DECR7等。

寄存器包括32个工作寄存器(分4组)以及部分专用寄存器。

指令只能使用当前寄存器组的8个通用寄存器R0~R7,对不同寄存器组可以通过PSW中的RS0,RS1来选择。

2.直接寻址(DirectAddressing)

指令中给出操作数的8位直接地址,可用这种寻址方式的存储空间只限于内部RAM。

在一般指令中用Direct表示直接地址。

有以下三种情况:

片内RAM的低128个字节(00H~7FH)。

MOVA,78H

ORLA,5EH

专用寄存器SFR:

这是访问SFR的唯一方法。

在指令中可以给出直接地址,也可以给出寄存器符号。

MOVTCON,A或MOV88H,A

MOVA,SBUF或MOVA,99H

片内RAM(包括SFR)的中的可位寻址空间,即位操作指令中的位地址。

也可把其单独列为位寻址(见7.位寻址)。

MOVC,7EH

SETB20H

SETBEA/IE.7/AFH

CLREX0/IE.0/A8H

3.寄存器间接寻址(RegisterIndirectAddressing)

用寄存器存放操作数的地址,即用寄存器作为地址指针,但要在寄存器前面加上@以示区别。

可以用作地址指针的间接寄存器只能是R0、R1和DPTR,在一般指令中分别用@Ri和@DPTR来表示。

这种寻址方式可用于访问片内和片外RAM,不能用于访问SFR。

片内RAM(8X51的低128个字节地址00H~7FH,8X52的低256个字节地址00H~FFH),用R0或R1作间接寄存器。

MOVA,@Ri(i=0或1)

ANLA,@Ri

MOV@R0,A;

若R0=30H,A=34H

片外RAM:

访问片外RAM的唯一方法就是寄存器间接寻址。

注意指令操作码要改为MOVX。

访问第一页256个单元RAM时,可用8位的R0或R1寄存器作间接寄存器。

实际上是默认高8位地址为00H。

MOVXA,@Ri(i=0或1)

MOVX@Ri,A(i=0或1)

若需要访问其他页面,可以先把高8位送P2口,再用R0或R1寄存器作低8位地址指针也可访问整个64k片外RAM。

访问整个64k片外RAM,可用16位的DPTR寄存器作间接寄存器。

MOVXA,@DPTR

MOVX@DPTR,A

另外,堆栈操作中的栈指针(SP)也可以认为是一种寄存器间接寻址方式。

4.立即寻址(ImmediateAddressing)

一般把在指令中直接给出的操作数称为立即数。

在指令操作码的后面紧跟一个和或二个字节的操作数。

但要在立即数的前面加一个#以与直接地址区别。

在一般指令格式中,立即数用#DATA或#DATA16表示。

MOVA,#3AH;

3AH→A

MOVA,#2476H;

2476H→DPTR

而MOVA,3AH;

(3AH)→A

5.变址寻址(IndexAddressing)

以DPTR或PC寄存器作基址寄存器,用累加器A作变址寄存器,以其内容相加形成要访问字节数据的有效地址。

这种寻址方式用于查表指令。

MOVCA,@A+DPTR

若(A)=05H,(DPTR)=0300H则A←(0305H)

①只能对程序存储器寻址;

②只有两条;

MOVCA,@A+DPTR,MOVCA,@A+PC

③全部是一字节指令

6.相对寻址(RelativeAddressing)

相对寻址是将程序计数器PC的当前值与指令中给出的偏移量相加,就形成转移的目标地址。

用于程序的相对转移指令,指令中给出了转移目标地址相对于程序计数器PC的位(偏)移量。

位移量用一字节补码表示。

最大转移地址为-128~+127,考虑到转移指令长度为2~3字节。

所以目标地址距离转移指令地址的差为–126~+129(两字节)或-125~+130(三字节)。

这里PC的当前值是指执行完该转移指令后的PC中的地址值,即转移指令操作码的PC值加上该转移指令的字节数(可以是2或3)。

2000HSJMP08H;

PC←PC+2+08H

程序转移有效地址=(PC+2/3)+偏移量

在实际应用中,往往是已知转移指令操作码的地址(源地址)和需要转移的目标地址,求偏移量。

偏移量=目标地址-(源地址+2/3)

偏移量为正,向下转移;

偏移量为负,向上转移。

计算偏移量只要用地址的低8位运算,因为仅表示相对转移。

7.位寻址(BitAddressing)

直接对数据位的操作称为位寻址。

位寻址只能对有位地址的单元作位寻址操作。

这种寻址方式实际上是一种直接寻址方式,不过其地址是位地址。

ANLC,30H,表示用进位位Cy与位地址为30H的逻辑位进行“与”操作。

SETB10H,表示将10H位置1

位寻址的寻址范围:

①内部RAM中的可位寻址区:

字节单元地址20H~2FH16个单元的128位,位地址为00H~7FH

②可位寻址的专用寄存器中的可寻址位:

可位寻址的寄存器有B,ACC,PSW,IP,P3,IE,P2,SCON,P1,TCON,P0等11个,有可寻址位83位。

专用寄存器中寻址位在指令中有四种表示方法。

●直接使用地址。

80H,88H,90H,98H,0A0H,0A8H,0B0H,0B8H,0D0H,0E0H,0F0H,开始的8个连续位地址,除去0BDH,0BEH,0BFH,0ADH,0AEH5个位地址。

●位名称。

如SM0,PT1,F0等

●字节地址加位如0D0H.5

●专用寄存器符号加位如PSW.5

注意:

一条指令可能有两个操作数,可分别用两种不同寻址方式。

3.3单片机执行指令的过程

执行程序的过程就是执行指令的过程。

执行指令的过程大致如下:

地址线出现指令操作码所在单元的地址;

自动修改PC(加一);

读(取)指令操作码,送指令寄存器IR;

经指令译码器进行指令译码;

发出操作信号;

给出操作数地址(由寻址方式决定),取出操作数;

执行操作。

发出下一条指令地址;

…。

 

3.4数据传送指令

3.4.1片内RAM低128字节(包含工作寄存器区,位地址空间等)

1.寄存器寻址:

只用于片内工作寄存器R0~R7的存取

MOVRn,A

MOVA,Rn

注意工作寄存器有4个区,上电复位后自动选0区(00H~07H),其他区可通过设置PSW中的RS1、RS0来选择,例如

MOVR2,A;

上电时选中0区,送入0区R2(02H)

MOVPSW,#08H;

选择1区寄存器

送入1区R2(0AH)

2.直接寻址

MOVA,direct

MOVdirect,A

MOV@Ri,direct

MOVdirect,@Ri

MOVRn,direct

MOVdirect,Rn

MOVdirect,direct

MOVdirect,#data

如MOV40H,A

MOVR0,A

MOV50H,40H

3.寄存器间接寻址

MOVA,@Ri

MOV@Ri,A

MOV@Ri,#data

如MOVR0,#40H

MOVR1,#41H

MOVA,@R0

MOV@R1,A;

MOV41H,40H

MOV@R0,#55H

3.4.2专用寄存器(SFR)(80H~FFH中只占用21个字节,其他无用)

其中除ACC、B、DPTR可用寄存器寻址以外,其他只能用直接寻址。

MOVA,SFR

MOVSFR,A

MOVRn,SFR

MOVSFR,Rn

MOVdirect,SFR

MOVSFR,direct

MOVSFR,SFR

MOVSFR,#data→MOVDPTR,#data16

;

MOVDPH,#dataH

MOVDPL,#dataL

如MOV@R1,P1→MOV@R1,90H

MOVP1,P2→MOV90H,0A0H

3.4.3片内RAM

只能用寄存器间接寻址,一共只有6条指令,无其他指令可用。

MOVXA,@R0MOVX@R0,A

MOVXA,@R1MOVX@R1,A

MOVXA,@DPTRMOVX@DPTR,A

3.4.4程序存储器

在ROM/EPROM中要把数据输送到寄存器、片内RAM或SFR去,只能用立即寻址方式送数。

MOVA,#data

MOVRn,#data

MOV@Ri,#data

MOVdirect,#data

MOVSFR,#data

要获得EPROM中常数表格中的常数,只能用查表指令。

MOVCA,A+DPTR

MOVCA,A+PC

如要把0F转换成七段显示代码

DISP:

……

MOVDPTR,#SEGTBL

MOVCA,@A+DPTR

……

SEGTBL:

DB3FH;

0的七段代码

DB02H;

1的七段代码

又如

01007402MOVA,#02H

010283MOVCA,@A+PC

0103805BSJMPNEXT

010532DB32H

执行MOVCA,@A+PC指令后,因为这时PC=0103H,A=02H

所以该指令是把0105H单元中的数据32H送入A累加器。

注意:

片外RAM不能与片内RAM直接传送数据!

并只能通过A累加器作为中转。

另外工作寄存器之间不能直接打交道,也要通过A累加器作为中转。

但可以用直接寻址方式传送。

所以还有三组专门与ACC打交道的数据交换指令。

3.4.5数据交换指令

1.字节交换指令

XCHA,Rn;

工作寄存器内容与ACC内容交换

XCHA,direct/SFR;

片内RAM/SFR内容与ACC内容交换

XCHA,@Ri;

地址在Ri中的片内RAM内容与ACC内容交换

2.低半字节交换指令

XCHDA,@Ri;

片内RAM的低4位与ACC的低4位数据交换

3.累加器ACC低4位与高4位交换

SWAPA;

ACC的低4位与高4位数据交换

3.4.6栈操作指令

源地址是直接地址,目的地址是隐含间接地址寄存器(@SP)

或目的地址是直接地址,源地址是隐含间接地址寄存器(@SP)

PUSHdirect

POPdirect

例如,进入中断服务程序时,通常需要保护现场,把ACC、PSW、DPTR等寄存器内容压栈保护,若SP=38H

PUSHACC

PUSHPSW

PUSHDPH

PUSHDPL

执行这4条指令后,SP=3CH

在出中断服务程序返回主程序之前,还要恢复现场,要注意堆栈先进后出的特点,出栈次序要相反。

POPDPL

POPDPH

POPPSW

POPACC

3.5控制转移指令

3.5.1无条件转移指令

1.长跳转指令LJMPaddr16

(LongJump)

2.短跳转指令SJMPrel;

相对转移指令

(ShortJump)

3.绝对跳转指令AJMPaddr11

(AbsoluteJump)

该指令机器码构成如下:

addr11=a10a9a8a7a6a5a4a3a2a1a0

这11位地址在机器码中作如下安排:

机器码为a10a9a800001a7a6a5a4a3a2a1a0

操作码01H000

21H001

41H010

61H011

81H100

A1H101

C1H110

E1H111

实际转移地址是原PC中的地址的最高五位保持不变,低11位换上addr11。

关键是如何得到操作码?

例如

1938H1100KEYBD:

ACALLDISUP

……

1B0AH2138AJMPKEYBD

1B0CH

1B97H2138AJMPKEYBD

其地址高8位19H和1BH中的高5位相同。

如何形成操作码?

转移目的地址的高8位的最低3位+00001形成操作码,这里转移地址的高8位是19H,即00011001,其后三位为00100001,为21H,其第二字节即转移地址的低8位。

4.散转指令JMP@A+DPTR

DPTR中的基地址加上ACC中的无符号数形成有效转移地址。

通过改变ACC中的内容便可转移到不同的分支,故称散转指令。

如根据ACC中的数值转移到不同分支去。

(ACC中必须是偶数)

MOVDPTR,#TABLE

JMP@A+DPTR

TABLE:

AJMPROUT0;

A=0

AJMPROUT1;

A=2

AJMPROUT2;

A=4

……

3.5.2条件转移指令

1.进位/无进位转移指令(2字节相对转移指令)

JCrel;

Cy=1,则转移

JNCrel;

Cy=0,则转移

2.累加器内容全零/非零转移指令(2字节相对转移指令)

JZrel;

(A)=0,则转移

JNZrel;

(A)≠0,则转移

3.比较不相等转移指令(3字节3操作数相对转移指令)

CJNEA,#data,rel

CJNEA,direct,rel

CJNE@R0,#data,rel

CJNE@R1,#data,rel

CJNERn,#data,rel

第一操作数与第二操作数相比较(比较即相减后不回送结果),若不相等,则转移,同时会影响Cy标志。

当第一操作数小于第二操作数时,Cy=1;

反之,Cy=0。

利用此指令可实现程序三分支。

4.减1不为零转移指令(相对转移)

DJNZRn,rel;

2字节指令

DJNZdirect,rel;

3字节指令,direct可以是片内RAM任意字节地址。

5.位测试指令

JBbit,rel;

(bit)=1,则转移

JNBbit,rel;

(bit)=0,则转移

JBCbit,rel;

(bit)=1,则转移,同时该位清零

3.5.2子程序调用与返回指令

1.绝对调用指令

ACALLaddr11

其转移范围与AJMP相同。

操作码形成把AJMP中的00001换成10001。

AJMP操作码01,21,41,61,81,A1,C1,E1

ACALL操作码11,31,51,71,91,B1,D1,F1

2.长调用指令

LCALLaddr16

3.返回指令

RET

3.6算术逻辑运算指令

1.加法指令:

有带进位和不带进位两种加法指令

ADDA,RnADDCA,Rn

ADDA,@RiADDCA,@Ri

ADDA,directADDCA,direct

ADDA,#dataADDCA,#data

INCA

INCRn

INCdirect

INC@Ri

INCDPTR

DAA;

十进制调整指令

带进位加法指令主要用于多字节数的加法。

例如两个3字节无符号数相加

被加数放在片内RAM的20H~22H(低位在前)

加数放在片内RAM的2AH~2CH

MOVR0,#20H;

被加数首址

MOVR1,#2AH;

加数首址

MOVR7,#03H;

字节数

CLRC;

清进位标志

LOOP:

MOVA,@R0;

取被加数一个字节

ADDCA,@R1;

与加数一个字节相加

MOV@R0,A;

暂存中间结果

INCR0;

调整地址指针

INCR1

DJNZR7,LOOP;

字节数-1,不为零转移

CLRA

ADDCA,#00H;

处理进位

MOV@R0,A;

存放进位于23H单元

SJMP$

2.带借位减法指令

(SubtractBorrow)

SUBBA,Rn

SUBBA,@Ri

SUBBA,direct

SUBBA,#data

DECA

DECRn

DECdirect

DEC@Ri

3.乘法指令(单字节4机器周期指令)8位无符号数乘法

(Multiply)

MULAB;

BA←A×

B,Cy=0,

A和B中各放8位无符号数,指令执行后16位乘积的高8位在B中,低8位在A中。

例如,A=50H,B=A0H,执行MULAB后,A×

B=3200H,B=32H,A=00H。

(80)(160)(12800)

若乘积>

255时,OV=1

4.除法指令(单字节4机器周期指令)8位无符号数除法

DI

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

当前位置:首页 > 外语学习 > 法语学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1