第三章 89C51汇编语言指令系统_第1页
第三章 89C51汇编语言指令系统_第2页
第三章 89C51汇编语言指令系统_第3页
第三章 89C51汇编语言指令系统_第4页
第三章 89C51汇编语言指令系统_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

第三章8051汇编语言指令系统3.1汇编语言概述3.1.1基本概念指令:CPU执行操作的命令指令系统:所有指令的集合程序:根据指令系统编写的指令序列语言:计算机所能识别的指令形式语言种类:机器语言、汇编语言、高级语言

语言分类举例(以10+20=30并存放为例)机器语言:

0111010000001010A10(740AH)

0010010000010100A=A+20(2414H)计算机真正能识别的是这种二进制代码,但不直观汇编语言:

MOVA,#0AH(740AH)

ADDA,#14H(2414H)采用助记符可便于阅读和编写,效率高高级语言:A=10A=A+20最直观,软件开发快,代码效率不如汇编3.1.2汇编语言指令格式标准5段式:标号:操作码[目的操作数],[源操作数];注释例如:LOOP:MOVA,R0;把R0内容放入A

标号和注释不是必须的,操作数的数量不确定,可能是一个、两个或没有:例如:MOVA,#20H(两个操作数)

INCR0(一个操作数)

RET(没有操作数)3.1.3指令的代码长度1.单字节指令(49条)(1)指令码中隐含对寄存器的操作如INCDPTRA3HCLRAE4H

这类指令主要涉及一些专用寄存器(2)操作码中的rrr三位指定一个工作寄存器如MOVA,Rn11101rrr其中rrr=0~7,分别对应R0~R7

所以有:MOVA,R011101000E8HMOVA,R411101100ECHMOVA,R711101111EFH2.双字节指令(45条)一个字节操作码,另一个字节为操作数或地址*指令中给出操作数地址的情况(隐含寻址)指令形式:这时R0或DPTR中的内容本身不是操作数,而是操作数所在存储单元的地址。3.三字节指令(17条)3.2寻址方式定义:寻址方式是指寻找操作数(尤其是源操作数)的途径或手段。89C51单片机共7种寻址方式。1.寄存器寻址(最常用)寄存器指R0~R7和A、B、DPTR

例如MOVA,R0MOVR1,AADDA,R5MOVP1,A

2.直接寻址直接给出操作数所在的地址,包括片内128字节RAM地址和专用寄存器SFR的名称。例如:MOVA,45H45H本身不是数据,而是指45H单元内的数据内容。又如:MOVA,P1(90H)是读取P1口再如:MOVA,SBUF(99H)是读取串行接收缓冲器这种寻址方式的指令至少占2字节,想一想,为什么?3.立即寻址源操作数是一字节(或2字节)直接数据如MOVA,#20H

注意立即数只能是源操作数,不能是目的操作数。特殊指令:

MOVDPTR,#DATA16具体如:MOVDPTR,#2000H请判断这条指令应为几字节?4.寄存器间接寻址(难点)

概念:寄存器中的内容不是数据,而是数据所在的地址。可做间址的寄存器有R0、R1、DPTR

有效空间:R0、R1操作片内128字节RAMDPTR操作片外最大64KRAM

注意:不能用此方式操作SFR。指令举例:MOV A,@R0MOVX A,@DPTR

间址概念的图解寄存器间接寻址方式是指令中给出的寄存器的内容为操作数的地址,而不是操作数本身,即寄存器为地址指针。在指令码助记符中,间接寻址用符号“@”来表示。

5.变址寻址(主要用于查表)含义:基地址+变址寄存器间址如:MOVC A,@A+DPTR指令说明:本条指令中,MOVC是专门用来读取程序存储器空间ROM单元内容的,源操作数的地址由累加器A中的偏移量与指针DPTR16位地址之和来指定。操作顺序是先求地址之和,再读取数据,送入累加器。6.相对寻址(重要)要点:(1)出现在相对转移指令中(2)当前PC值=执行完转移指令后的值(3)跳转的偏移量是一字节补码rel

若rel<80H,向地址增大方向转移若rel>=80H,向地址减小方向转移(4)目的地址=源地址+2/3+rel(rel有正负)

注意:所加的字节数可能是2或3,由本条指令自身长度决定。

相对寻址指令举例:

JCrel(JCNEXT)

如果当前进位位为1,则转到NEXT标号处;否则,继续执行下一条指令。

DJNZR7,LOOPR7内容减1,然后判断是否为0。若不为0则转到标号LOOP处,否则继续执行下一条。这里,NEXT和LOOP都是自己定义的标号地址,在汇编时将自动翻译成相对地址rel值。 7.位寻址

寻址区域:可位寻址的专用寄存器片内RAM20H~2FH各字节中的位指令举例:CLR02HJNB03H,rel

注意操作数按对等原则区分字节和位地址:

MOVA,40H40H是字节地址

MOVC,40H此时40H是位地址想一想,为什么?寻址空间和符号规定请同学自阅并熟悉之。3.389C51单片机指令系统要求:了解汇编指令按功能分类能读懂简单程序片段3.3.15种指令类别:数据传送类:源、目的,源不变,目的修改算术运算类:四则运算,影响标志位逻辑运算及移位类:按位操作,影响标志位控制转移类:跳转、调用和返回,地址变化位操作类:置位、复位、测试,判断转移3.3.2数据传送类

共8种助记符:

MOVCPU与内部RAM和SFR之间传送

MOVXCPU与外部RAM和I/O之间传送

MOVCCPU对程序存储器ROM读操作

PUSH压栈

POP弹栈

XCH字节交换

XCHD半字节交换

SWAP累加器自身半字节交换MOV指令详解(使用最频繁)在MOVx,y格式中

y为源操作数,可以是:A、立即数、工作寄存器、直接地址、间接地址。

x为目的操作数,可以是:A、工作寄存器、直接地址、间接地址。注意(1)立即数不能是目的操作数(2)不存在MOVR1,R2MOV@R1,@R0MOVA,@R2指令举例MOVA,#05HMOV A,R7MOVA,@R0MOVA,40HMOVR3,AMOVR4,#33HMOVR5,33HMOV22H,AMOV23H,R6MOV40H,41HMOV42H,@R1MOV43H,#3AH

关于对专用寄存器的操作对SFR实际采用的是直接寻址方式,写法可有变化,例如堆栈指针SP字节地址为81H,对它操作可写成:

MOVSP,#60H(编译系统自动识别SP)或者MOV81H,#60H

这两者是等价的,但以前一种为方便,条件是编译系统能识别SP之类的保留字。再如MOVA,PSWMOVA,D0H

后一种方法要求记忆所有SFR地址,且阅读不方便。

特殊的16位传送操作(常用)数据地址指针寄存器DPTR结构:它可以按16位操作,也可以按高低字节单独操作。例如:MOVDPTR,#2000H或者:

MOVDPH,#20HMOVDPL,#00H数据传送类指令应用举例例1:为R7赋值立即数2AHMOVR7,#2AH例2:将46H单元内容读到累加器AMOVA,46H例3:将R2中的字节内容送到片外1008H单元

MOVA,R2MOVDPTR,#1008HMOVX@DPTR,A3.3.3算术运算类(四则运算,双目)共5种助记符:ADD:不带进位加法ADDC:带进位加法SUBB:带借位减法MULAB:无符号乘法A×B=BA(高在前)DIVAB:无符号除法A/B=A(商)B(余数)要点:A是必然的目的操作数指令应用举例例4:单字节加法,R4+R3R6R5(高在前)

MOVA,R3取一个加数

ADDA,R4加上另一个加数

MOVR5,A存和低字节

CLRAA清零

ADDCA,#00H考虑进位位

MOVR6,A存高字节(0或1)注意:执行ADD操作时影响进位位CY例5:双字节加法R2R1+R4R3=R7R6R5MOVA,R1取加数低字节ADDA,R3与被加数低字节相加MOVR5,A存低字节和MOVA,R2取加数高字节ADDCA,R4与被加数高字节相加MOVR6,A存高字节和CLRAA清零ADDCA,#00H加进位MOVR7,A存进位值例6:双字节减法R2R1-R4R3=R6R5CLRC预先清除借位标志MOVA,R1取被减数低字节SUBBA,R3减去减数低字节MOVR5,A存低字节差值MOVA,R2取被减数高字节SUBBA,R4减去减数高字节和借位MOVR6,A存高字节差值注意:可根据此时CY的状态判断是否够减例7:多字节乘法演算规则双字节乘以双字节的结果要由4字节表示如R3R4×R5R6=40414243H3.3.4逻辑操作类要点:(1)逻辑运算与算术运算的最大不同在于,虽然是字节的形式,但是按位运算.(2)一目运算的操作数必然是A,双目运算多数有A参加且为目的操作数.(3)指令功能包括:与、或、异或、清除、求反、移位共7种指令助记符:ANL:ANLA,x(x:Rn,地址,@Ri,立即数)ORL:ORLA,xXRL:XRLA,x以上操作称为双目运算.下列为单目的,只对A.CLR:CLRAA累加器清零CPL:CPLAA按位求反RL/RLC:RLA/RLCA算术/逻辑左移RR/RRC:RRA/RRCA算术逻辑右移应用举例

例8:把P1口高4位清零,低2位置1,其余不变

MOVA,#0FHANLP1,AMOVA,#03HORLP1,A说明:这时的逻辑操作称为读-修改-写

0FH可称为屏蔽字,03H可称为组合字.例9:逻辑操作位图(A)ANLA,38H(A=9FH)CPLA(A=7CH)3.3.5控制转移类(使用较少但很重要)共16种助记符:

无条件小类JMP@A+DPTR

间接转移(散转)

SJMPrel一字节补码短跳转

AJMP11位地址标号2K空间

LJMP16位地址标号64K空间条件转移小类JZrel/JNZrel为0/非0转

JCrel/JNCrel有/无进位转

JBbit,rel/JNBbit,rel置位/复位转

CJNE[x],[y],rel比较不等转

DJNZx,rel减1不为0转调用和返回小类ACALL/LCALL短调用/长调用

RET/RETI子程序返回/中断返回

3.3.6位操作类共15种助记符:MOVC,bit/MOVbit,CCLRC/CLRbitSETBC/SETBbitANLC,bit/ANLC,/bitORLC,bit/ORLC,/bitCPLC/CPLbitJBbit,rel/JNBbit,relJBCbit,rel

综合编程举例例10.把片外RAM2000H~200FH内容传送到片内RAM40H~4FH中.

解:MOVDPTR,#2000H源首地址

MOVR7,#10H计数初始值

MOVR0,#40H目的首地址LOOP:MOVXA,@DPTR取一个源数据

MOV@R0,A存一个数据

INC

DPL修改源地址

INCR0修改目的地址

DJNZR7,LOOP判结束例11.把P1口的P1.6、P1.7清零,且置P1.0、P1.1为1,其余不变.解:MOVA,P1ANLA,#00111111BORLA,#00000011BMOVP1,A解:需3字节表示,设结果存于R0~R2,高在前.

MOVA,31H取该字节

MOVB,#64H64H=100DIVAB除以100,得BCD码最高位(百位)MOVR0,A存最高位

MOVA,B余数送AMOVB,#0AH

温馨提示

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

评论

0/150

提交评论