第三章 8051汇编指令_第1页
第三章 8051汇编指令_第2页
第三章 8051汇编指令_第3页
第三章 8051汇编指令_第4页
第三章 8051汇编指令_第5页
已阅读5页,还剩84页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1第三章8051单片机汇编指令3.1MCS-51指令系统概述

对8051单片机编程可以使用机器语言、汇编语言及高级语言-C语言。但单片机并不能直接执行汇编语言和高级语言,都必须通过汇编器“翻译”成为二进制机器码方能执行。2指令:就是能完成特定功能的命令。指令系统:CPU所能执行的各种指令的集合。51单片机基本指令共111条,其中:单字节指令49条双字节指令45条三字节指令17条3从指令执行时间看,单机器周期指令64条双机器周期指令45条4机器周期指令2条4

汇编指令中常用的一些符号注释

Rn—选中的工作寄存器是R0-R7中任意一个。Ri—选中的寄存器是R0和R1中任意一个。direct—内部数据存储单元的8位地址。包含内部存储单元地址和特殊功能寄存地址。#data—指令中的8位常数。#data16—指令中的16位常数。5addr16—16位目的地址。addr11—11位目的地地址。@—间接寄存器寻址或基址寄存器的前缀。DPTR—数据地址指针。bit—直接寻址位地址。6A—累加器A。B—寄存器B。C—进位标志位CY。(x)—X地址中的内容。

((x))—由X地址中的内容为地址,其地址单元中的内容。7汇编语言对不同数制的表示方式数据的表示方式:十进制立即数:MOVA,#123十六进制:MOVA,#7FH二进制:MOVA,#10011011B直接地址的表示方式:十进制立即数:MOVA,123十六进制:MOVA,7FH二进制:MOVA,10011011B8指令格式:一条汇编语言指令中最多包含4个区段,如下所示:

[标号:]操作码[操作数][;注释]其中,操作数又分为:原操作数和目的操作数;两个操作数之间用‘,’分开目的操作数源操作数例如:

MOVA,#2893.2MCS-51的寻址方式

寻址方式--就是CPU寻找操作数或操作数地址的方式。在MCS-51单片机指令系统中,有以下7种寻址方式:

(1)立即数寻址;

(2)直接寻址;

(3)寄存器寻址;10(4)寄存器间接寻址;

(5)基址寄存器+变址寄存器间接寻址;

(6)相对寻址;

(7)位寻址。11

[1].立即数寻址

指令中原操作数直接以数据出现。为了与直接寻址方式相区别,在立即数前加上“#”符号

例如:

MOV

A,#0EH

MOV

A,#20

MOV

A,#'k'12[2].直接寻址

指令中原操作数直接以存储单元的地址出现。

MOVA,direct

例如:

MOV

A,68H13

[3].寄存器寻址

寄存器寻址可以对8个工作寄存器R0-R7进行操作,也可以对寄存器A、B等进行操作。例如:

MOVR1,#10

MOV

A,R1MOVR2,AMOVB,R2MOVR5,B14

[4].寄存器间接寻址访问RAM存储器的低128B单元内容,通过R0和R1作为间接寄存器。

例如:

MOV

A,@R0

外部数据存储器的空间为64kB,可采用DPTR作为间址寄存器进行访问,指令如下:

MOVX

A,@DPTR15[5].变址寻址(基地址+变址寄存器间接寻址)

规定DPTR或PC为变址寄存器,A为地址偏移量。

变址寻址方式只能访问程序存储器。

MOVCA,@A+DPTRMOVCA,@A+PC16例如:

MOVDPTR,#2000HMOVA,#03H

MOVC

A,@A+DPTR

17[6].位寻址指令中操作数是8位二进制数中的某一位。对片内RAM的位寻址区(20H~2FH)和可位寻址的专用寄存器进行位操作。例如:CLRCCPLCSETBP1.2作业:写出51单片机可位寻址的专用寄存器有哪些?18[7].相对寻址

以PC的内容为基址,加上给出的偏移量作为转移地址,从而实现程序的转移。这种寻址方式主要用于转移指令。

例如:

S:MOVA,#20.....AJMPS软件使用介绍单片机编程软件:KEIL19电路仿真软件:PROTEUS电路仿真软件PCB设计软件实例20KEIL使用1、新建工程:工程菜单->新建工程2、新建程序文件:1)文件菜单->新建文件;2)保持文件,输入文件名,后缀为***.a(汇编程序)或***.c(C语言程序)3、添加程序文件到工程中4、在程序文件中编写程序5、编译程序:工程菜单->

Rebuildalltargetfiles(重新编译所有的源文件并且编译应用程序)21PROTEUS使用

1、打开软件:打开ISIS软件222、新建原理图:文件菜单->新建设计3、添加软件并绘制原理图4、加载程序文件***.HEX文件:双击原理图上的单片机,在弹出对话框中添加程序文件5、电路仿真:点击播放键开始仿真233.3MCS-51指令系统按指令功能分,指令系统可以分为5大类:1、数据传输指令:28条2、算术运算指令:24条3、逻辑运算及移位指令:25条4、控制转移指令:17条5、位操作指令:17共111条指令。24数据传输指令码:MOV;MOVC;MOVXPUSH;POPXCH;XCHD算术运算指令码:

ADD;ADDC;INC;DA;SUBB;DECMUL;DIV逻辑运算指令码:

CLR;CPL;RL;RLC;RR;RRC;SWAPANL;ORL;XRL;25控制转移类指令码:

AJMP;SJMP;LJMP;JMPJZ;JNZ;CJNE;DJNZACALL;LCALL;RET;RETINOP位操作指令码:

MOV;CLR;CPL;SETBANL;ORLJC;JNC;JB;JNB;JBC26

[1].

以累加器A为目的操作数类指令(4条)

MOV

A,direct

;(data)→(A)

MOV

A,#data

;#data→(A)

MOV

A,Rn

;(Rn)→(A)

MOV

A,@Ri

;((Ri))→(A)3.3.1数据传送指令

该类不影响标志C,AC和OV,但可能会对奇偶标志P有影响。27[2].

以寄存器Rn为目的操作数的指令(3条)

MOV

Rn,direct

;(data)→(Rn)

MOV

Rn,#data

;#data→(Rn)

MOV

Rn,A

;(A)→(Rn)注意:MOVRn,Rn错误指令数据传送指令28

[3].

以直接地址为目的操作数的指令(5条)

MOV

direct,direct

;(data)→(data)

MOV

direct,#data

;#data→(data)

MOV

direct,A

;(A)→(data)

MOV

direct,Rn

;(Rn)→(data)

MOV

direct,@Ri

;((Ri))→(data)数据传送指令29[4].

以间接地址为目的操作数的指令(3条)

MOV

@Ri,direct

;(data)→((Ri))

MOV

@Ri,#data

;#data→((Ri))

MOV

@Ri,A

;(A)→((Ri))注意:MOV@Ri,Rn错误指令数据传送指令30[5].

查表指令(2条)

这组指令的功能是对存放于程序存储器中的数据表格进行查找传送,使用变址寻址方式:

MOVC

A,@A+DPTR

;((A)+(DPTR))→A

MOVC

A,@A+PC

;(PC)+1→PC,((A)+(PC))→A数据传送指令31[6].

累加器A与外部RAM传送指令(4条)

MOVX

@DPTR,A

;(A)→((DPTR))

MOVX

A,@DPTR

;((DPTR))→(A)

MOVX

A,@Ri

;((Ri))→(A)

MOVX

@Ri,A

;(A)→((Ri))数据传送指令32习题1、下面指令完成什么内容,各指令属于什么寻找方式

MOV45H,#20HMOV46H,#30HMOVA,45H

MOV

A,#

45H

MOVR0,A

MOV46H,@R0

MOVR0,#46H

MOVXA,@R0数据传送指令33

[7].

堆栈操作类指令(2条)

“先进后出”

PUSH

direct

;(SP)+1→(SP),(direct

)→(SP)

POP

direct

;(SP)→(direct

),(SP)-1→(SP)数据传送指令34例如:进入中断服务子程序时,把程序状态寄存器PSW、累加器A、数据指针DPTR进栈保护。设当前SP为60H。则程序段执行完,各寄存器存放的数据地址=?SP=?

PUSHPSWPUSHACCPUSHDPLPUSHDPH61H=PSW62H=ACC63H=DPL64H=DPHSP=64H数据传送指令35

POPACC

POPDPLPOPDPHPOPPSW

DPH=(64H)DPL=(63H)ACC=(62H)PSW=(61H)SP=60H注:堆栈指令对A累加器操作时,只能写成“ACC”数据传送指令36习题2、下列程序执行完后,判断各寄存器的值和SP的值。

MOVSP,#40HMOVA,#20HMOVR0,#4AHPUSHACCPUSHR0ADDA,R0POPACCPOPR0数据传送指令37

[8].

交换指令(3条)

XCH

A,Rn

;(A)←→(Rn)

XCH

A,@Ri

;(A)←→((Ri))

XCH

A,direct

;(A)←→(direct

[9].

半字节交换指令(1条)

XCHD

A,@Ri

;(A3-0)←→((Ri)3-0)注:目的操作数都是A数据传送指令38例题1:

MOVR6,#45HMOV30H,#20HXCHA,R6XCHA,30H例题2:

MOV30H,#20HMOVR0,#30HXCHDA,@R0数据传送指令393.3.2MCS-51算术运算指令[1].

加法指令(4条)

ADD

A,#data

;(A)+#data→(A)

ADD

A,direct

;(A)+(data)→(A)

ADD

A,Rn

;(A)+(Rn)→(A)

ADD

A,@Ri

;(A)+((Ri))→(A)注:目的操作数都是A40

[2].

带进位加法指令(4条)

ADDC

A,direct

;(A)+(data)+(C)→(A)

ADDC

A,#data

;(A)+#data+(C)→(A)

ADDC

A,Rn

;(A)+Rn+(C)→(A)

ADDC

A,@Ri

;(A)+((Ri))+(C)→(A)算术运算指令41[3].

带借位减法指令(4条)SUBB

A,direct

;(A)-(data)-(C)→(A)SUBB

A,#data

;(A)-#data-(C)→(A)SUBB

A,Rn

;(A)-(Rn)-(C)→(A)

SUBB

A,@Ri

;(A)-((Ri))-(C)→(A)

算术运算指令42

[4].

乘法指令(1条)MUL

AB

;(A)×(B)→(A)和(B)

结果低8位存在累加器A,而高8位存在寄存器B中。如果OV=1,说明乘积大于FFH,否则OV=0,但进位标志位CY总是等于0。

注:AB连写,中间不加","

号算术运算指令43[5].

除法指令(1条)

DIV

AB

;(A)÷(B)→(A)和(B)得到的商存在累加器A,而余数存在寄存器B中。当除数B为0时,OV=1,表示除法无意义。注:AB连写,中间不加","

号算术运算指令44

[6].

加1指令(5条)

加1指令不会对任何标志有影响,如果原寄存器的内容为FFH,执行加1后,结果就会是00H。

INC

direct

;(direct

)+1→(direct

INC

@Ri

;((Ri))+1→((Ri))

INC

Rn

;(Rn)+1→(Rn)

INCA

;(A)+1→(A)

INC

DPTR

;(DPTR)+1→(DPTR)

算术运算指令45

[7].

减1指令(4条)

若原寄存器的内容为00H,减1后即为FFH,运算结果不影响任何标志位。

DEC

A

;(A)-1→(A)

DECdirect

;(data)-1→(data)

DEC

@Ri

;((Ri))-1→((Ri))

DEC

Rn

;(Rn)-1→(Rn)注:DPTR不能进行DEC算术运算指令46[8].

十进制调整指令(1条)

DA

A

注:操作数只能时A

这条指令通常跟在加法指令之后,进行BCD码调整,使累加器A中的内容调整为二位压缩型

BCD码的数。算术运算指令47执行该指令时,判断:

1、如果A中的低4位>9或辅助进位标志AC=1,则低4位加6操作;2、如果A中的高4位>9或进位标志C=1,则高4位加60H操作;算术运算指令48例如:有两个BCD数36与45相加,结果应为BCD码81,程序如下:MOVA,#36HADDA,#45HDAA算术运算指令49[9].

累加器半字节交换指令(1条)

这条指令是将累加器中的内容高低半字节互换。

SWAP

A

;(A3-0)←→(A7-4)算术运算指令50练习:1、判断下面指令的对错。MOVA,#10HMOVR0,R5MOVA,@R4MOVA,@A+DPTRMOVCA,@A+R0MOV@R0,AMOVXA,@DPTRXCHR0,AXCHA,#20HADDR0,AMULA,BDIVBADAR4算术运算指令512、执行下面程序段后,各寄存器的值是多少,SP=?初始值为:ACC=58H,R2=36H,DPTR=9E7FH,SP=30HADDA,R2PUSHACCPUSHDPLPUSHDPHADDA,R2POPACCPOPDPL算术运算指令523、编程,完成一下功能。

(30H)=10;(31H)=15;(32H)=(30H)+(31H);(33H)=(31H)-(30H);(34H),(35H)=(30H)*(31H);(36H)=(30H)/(31H)的商;

(37H)=(30H)/(31H)的余;算术运算指令533.3.3逻辑运算及移位指令

指令有与、或、异或、求反、左右移位、清0等逻辑操作。[1].

循环移位指令(4条)

RL

A

;累加器A中的内容循环左移一位

RR

A

;累加器A中的内容循环右移一位

RLC

A

;累加器A中的内容连同进位位CY循环左移一位

RRC

A

;累加器A中的内容连同进位位CY循环右移一位54[2].

求反指令(1条)

这条指令将累加器中的内容按位取反。

CPL

A

;[3].

清零指令(1条)

这条指令将累加器中的内容清0。

CLR

A

;0→(A)逻辑运算及移位指令55[4].

逻辑与操作指令(6条)

ANL

A,direct

ANL

A,#data

ANL

A,Rn

ANL

A,@Ri

ANLdirect,#data

ANLdirect,A

逻辑运算及移位指令56

[5].

逻辑或操作指令(6条)

ORL

A,direct

ORL

A,@Ri

ORL

A,#data

ORL

A,Rn

ORL

direct,#data

ORL

direct,A

逻辑运算及移位指令57[6].

逻辑异或操作指令(6条)

XRL

A,direct

XRL

A,@Ri

XRL

A,#data

XRL

A,Rn

XRL

direct,#data

XRL

direct,A

逻辑运算及移位指令58习题:执行下列指令,分析运行结果。SETBCMOVA,#0FEHRLARLCACPLAANLA,#0F0HCLRAMOVR0,#50HORLA,R0RRARRARRCA逻辑运算及移位指令59编程程序,完成下列控制功能。原理图如下图所示。要求:D1亮->D2亮->。。。D8亮->D1亮逻辑运算及移位指令603.3.4控制转移指令

这些指令的执行一般都不会对标志位有影响。[1].

无条件转移指令(4条)

这组指令执行完后,程序就会无条件转移到指令所指向的地址上去。

LJMP

addr16

;addr16→(PC)

AJMP

addr11

;(PC)+2→(PC),addr11→(PC10-0)

SJMP

rel

;(PC)+2+rel→(PC)

JMP

@A+DPTR

;(A)+(DPTR)→(PC)61[2].

条件转移指令(8条)1)累加器判零转移指令

JZ

rel

;A=0,(PC)+2+rel→(PC)

JNZ

rel

;A≠0,(PC)+2+rel→(PC)2)比较转移指令

CJNE

A,direct,rel

;A≠(direct

),(PC)+3+rel→(PC);A>(direct)则CY=0;A<(direct)则CY=1

控制转移指令62CJNE

A,#data,rel

;A≠#data,(PC)+3+rel→(PC)CJNE

Rn,#data,rel

;Rn≠#data,(PC)+3+rel→(PC)

CJNE

@Ri,#data,rel

;@Ri≠#data,(PC)+3+rel→(PC)控制转移指令633)减1不为0转移指令DJNZ

Rn,rel

;(Rn)-1→(Rn),(Rn)≠0,(PC)+2+rel→(PC)DJNZ

direct,rel

;(direct)-1→(direct),(direct)≠0,(PC)+2+rel→(PC)控制转移指令64习题:分析下面程序的功能。DELAY:MOVR7,#250D1:MOVR6,#248DJNZR6,$DJNZR7,D1

65习题:编写程序,要求将数据区30H~50H中的内容清零。MAIN:movr2,#21h;地址数movr0,#30h;首地址xh:mov@r0,#0incr0djnzr2,xh

END66

[3].

子程序调用及返回指令(4条)ACALL

addr11

;短调用指令,可在2kB空间调用子程序。执行过程:

1)(PC)+2→(PC)

2)PUSHPC7-03)PUSHPC15-84)addr11→(PC10-0)控制转移指令67LCALL

addr16

;长调用指令,可在64kB空间调用子程序。执行过程:

1)(PC)+3→(PC)

2)PUSHPC7-03)PUSHPC15-84)addr16→(PC)控制转移指令68

RET

;子程序返回指令。执行过程:

1)popPC15-82)popPC7-0

RETI

;中断返回指令,除具有RET功能外,还有清除内部中断状态标志。控制转移指令69例题:编写子程序,要求完成A+B-C=DJS:MOVA,R0ADDA,R1SUBBA,R2;D

RETMAIN:MOVR0,#20H;AMOVR1,#15H;BMOVR2,#10H;C

ACALLJSMOVR3,A……….AJMPMAIN子程序主程序70[4].

空操作指令(1条)

NOP

这条指令除了使PC加1,消耗一个机器周期外,没有执行任何操作。可用于短时间的延时。控制转移指令713.3.5位操作指令

[1].

位传送指令(2条)

MOV

C,bit

;bit→CY,某位数据送CY

MOV

bit,C

;CY→bit,CY数据送某位72

[2].

位置位、复位指令(4条)这些指令对CY及可寻址位进行置位或复位操作。

CLR

C

;0→CY,清CY

CLR

bit

;0→bit,清某一位

SETB

C

;1→CY,置位CY

SETB

bit

;1→bit,置位某一位位操作指令73[3].

位运算指令(6条)位运算都是逻辑运算,有与、或、非三种指令。

ANL

C,bit

;(CY)∧(bit)→CY

ANL

C,/bit

;(CY)∧()→CY

ORL

C,bit

;(CY)∨(bit)→CY

ORL

C,/bit

;(CY)∧()→CY

CPL

C

;()→CY

CPL

bit

;()→bir位操作指令74[4].

位控制转移指令(5)

JC

rel

;(CY)=1转移,(PC)+2+rel→PC,否则程序往下执行,(PC)+2→PC

JNC

rel

;(CY)=0转移,(PC)+2+rel→PC,否则程序往下执行,(PC)+2→PC。位操作指令75

JB

bit,rel

;位状态=1转移。JNB

bit,rel

;位状态=0转移。JBC

bit,rel

;位状态=1转移,并使该位

清“0”。76例题:编写程序,要求查找一组数据,小于10的数有几个。数据如下:TAB:DB12,13,4,15,16,25,6,2MAIN:movr2,#0;<10的个数movr3,#8;数组的个数

movR4,#0;数据表的地址

movdptr,#tablp1:MOVA,R4movca,@a+dptr

subba,#10jnclp2incr2;<10的个数++

clrclp2:incr4;数据地址++

djnzr3,lp1

ajmpmainTAB:DB12,13,4,15,16,25,6,277MAIN:movr2,#0;<10的个数movr3,#8;数组的个数

movR4,#0movdptr,#tablp1:movA,R4movca,@a+dptr

cjnea,#10,lp2sjmplp3lp2:jnclp3

incr2

;<10的个数++

clrclp3:incr4

;数据地址++djnzr3,lp1

ajmpmainTAB:DB12,13,4,15,16,25,6,2781、按要求写出下列指令(1)将R0中的数据传送到30H。

(2)将R0中的数据传送到R7。(3)将R0的数据传送到B。

(4)将40H中的数据传送到50H。(5)将40H中的数据传送到R2。

(6)将立即数40H传送到R5。

(7)将立即数40H传送到50H。习题79(8)将立即数40H传送到以R1中内容为地址的存储单元中。(9)将R6中的数据传送到以R0中内容为地址的存储单元中。802、

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论