单片机原理及接口技术(第二版,李全利)第3章80C51的指令系统_第1页
单片机原理及接口技术(第二版,李全利)第3章80C51的指令系统_第2页
单片机原理及接口技术(第二版,李全利)第3章80C51的指令系统_第3页
单片机原理及接口技术(第二版,李全利)第3章80C51的指令系统_第4页
单片机原理及接口技术(第二版,李全利)第3章80C51的指令系统_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

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

文档简介

第3章80C51的指令系统指令格式及常用符号3.180C51的寻址方式3.2数据传送指令(29条)3.3算数运算指令(24条)3.4逻辑运算与循环类指令(24条)3.5控制转移类指令(17条)3.6位操作类指令(17条)3.72023/1/3113.1指令格式及常用符号3.1.1机器指令的字节编码形式

8位编码仅为操作码

单字节指令(49条)机器指令:计算机能直接识别和执行的指令。

位号76543210字节opcode如:INCA编码为:00000100即:04H

8位编码含操作码和寄存器编码位号76543210字节opcoderrr如:MOVA,R0编码为:11101000即:E8H2023/1/312双字节指令(45条)位号76543210字节opcodedata或direct三字节指令(17条)位号76543210字节opcodedata或directdata或direct如:MOVA,#50H编码为:0111010001010000即:74H50H如:MOV20H,#50H编码为:011101010100000001010000即:75H20H50H2023/1/313书写格式注意:操作助记符不能缺少操作数个数可为:1、2、3个2个操作数的指令,目的操作数在左边一般格式操作助记符[目的操作数][,源操作数][;注释]3.1.2符号指令的书写格式2023/1/314描述符号Rn(n=0~7)-当前工作寄存器组中的寄存器R0~R7之一Ri(i=0,1)-当前工作寄存器组中的寄存器R0或R1@----------间址寄存器前缀#data------8位立即数/#data16-----16位立即数direct------片内低128个RAM单元地址及SFR地址addr11------11位目的地址addr16------16位目的地址rel---------8位地址偏移量,范围:-128~+127bit---------片内RAM位地址、SFR的位地址(×)------表示×地址单元或寄存器中的内容/----------位操作数的取反操作前缀2023/1/3153.2.1寄存器寻址寻址方式:寻找(源)操作数或指令转移地址的方式80C51单片机有7种寻址方式3.2

80C51的寻址方式操作数在寄存器中寻址空间:R0~R7、A、B(AB形式)和DPTR特点:传送和执行速度快【例】若(R0)=30H,

执行MOVA,R0后,(A)=30H

2023/1/3163.2.2直接寻址操作码后字节存放的是操作数的地址寻址空间:片内RAM低128字节SFR(符号形式)另一类直接寻址是转移目标地址的寻址。如:LJMPADDR16【例】若(50H)=3AH,

执行MOVA,50H后,(A)=3AH

2023/1/3173.2.3寄存器间接寻址寄存器中的内容是操作数的地址寻址空间:片内RAM(@Ri、SP)片外RAM(@Ri、@DPTR)【例】若(R0)=30H,(30H)=5AH

执行MOVA,@R0后,(A)=5AH

片内:MOV片外:MOVX2023/1/3183.2.4立即寻址操作数在指令编码中寻址空间:ROM对于MOVDPTR,#2100H指令,立即数高8位“21H”装入DPH

【例】执行MOVA,#50H

结果:(A)=50H

2023/1/3193.2.5变址寻址操作数地址:基地址+偏移量寻址空间:ROM变址寻址还用于跳转指令,如JMP@A+DPTR

【例】(A)=0FH

(DPTR)=2400H执行MOVA,@A+DPTR”后结果:(A)=88H

2023/1/31103.2.6相对寻址用于跳转指令,实现程序分支Rel常用符号地址表示,离源地址不要超过(-128~+127)

【例】若rel为75H,PSW.7为1,JCrel存于1000H开始的单元。

执行JCrel指令后,程序将跳转到1077H单元取指令并执行。2023/1/31113.2.7位寻址寻址位数据寻址空间片内RAM位空间SFR位空间【例】位地址00H内容为1,MOVC,00H执行后,位地址PSW.7的内容为1。位寻址方式实质属于位的直接寻址。

2023/1/31123.3数据传送类指令(29条)一般不影响标志寄存器PSW的状态。传送类指令有两大类

一般传送(MOV)特殊传送,如:MOVCMOVXPUSH、POPXCH、XCHDSWAP

2023/1/31133.3.1一般传送指令16位传送(仅1条)MOVDPTR,#data16;DPTR←data16例:执行指令MOVDPTR,#1234H后(DPH)=12H,(DPL)=34H。8位传送通用格式:MOV<目的字节>,<源字节>;2023/1/3114以A为目的【例3-9】若(R1)=20H,(20H)=55H。执行指令

MOVA,@R1

后,(A)=55H。2023/1/3115以Rn为目的【例3-10】执行指令MOVR6,#50H

后,(R6)=50H2023/1/3116以direct为目的【例3-11】若(R1)=50H,(50H)=18H,执行指令

MOV40H,@R1

后,(40H)=18H2023/1/3117以@Ri为目的【例3-12】若(R1)=30H,(A)=20H,执行指令

MOV@R1,A

后,(30H)=20H。

2023/1/31183.3.2特殊传送指令

以DPTR内容为基址读ROM中常数表项指令MOVCROM中可以存放程序代码,还经常存放常数表

MOVCA,@A+DPTR;A←((A)+(DPTR))

以PC内容为基址MOVCA,@A+PC;A←((A)+(PC))常数表存放约束小,称为远程查表指令。占用DPTR

常数表存放约束大,称为近程查表指令。不占用DPTR

2023/1/3119

读片外RAM读片外RAM及接口单元数据的指令MOVX片外RAM中经常存放数据采集与处理的中间数据

MOVXA,@DPTR;A←((DPTR))MOVXA,@Ri

;A←((Ri))

写片外RAMMOVX@DPTR,A;((DPTR))←AMOVX@Ri,A;((Ri))←A注意:用@Ri寻址时,高8位地址由P2口提供

2023/1/3120

入栈指令PUSH堆栈操作指令PUSH和POP堆栈是一片存储区,遵循“后进先出”原则,栈顶由SP指示。80C51的堆栈设在片内RAM低端的128个单元,向上生长。PUSHdirect;SP←(SP)+1,(SP)←(direct)出栈指令POPPOPdirect;(direct)←((SP)),SP←(SP)-1注:堆栈用于子程序调用时保护返回地址,或者用于保护子程序调用之前的某些重要数据(即保护现场),还可以用于数据交换。

2023/1/3121利用堆栈完成40H与50H单元内容的交换的示例

MOVSP,#6FH;将堆栈设在70H以上RAM空间PUSH40H;①将40H单元的“23H”入栈,之后(SP)=70HPUSH50H;②将50H单元的“45H”入栈,之后(SP)=71HPOP40H;③将SP指向的71H单元的内容弹到40H单元,之后(SP)=70HPOP50H;④将SP指向的70H单元的内容弹到50H单元,之后(SP)=6FH(a)初始状态(b)2条PUSH指令执行后(c)2条POP指令执行后2023/1/3122

字节交换指令XCH数据交换指令XCH、XCHD和SWAP数据交换属于同时进行的双向传送【例3-20】若(R0)=80H,(A)=20H。执行指令XCHA,R0

后,(A)=80H,(R0)=20H。

2023/1/3123

半字节交换指令XCHD【例3-21】若(R0)=30H,(30H)=67H,(A)=20H。执行指令

XCHDA,@R0指令后,(A)=27H,(30H)=60H。

XCHD是间址操作数的低半字节与A的低半字节互换。SWAP是累加器的高低4位互换【例3-22】若(A)=30H,执行指令SWAPA后,(A)=03H。

2023/1/31243.4算数运算类指令(24条)算数运算结果要影响PSW中标志位

CY为1,无符号数(字节)加减发生进位或借位OV为1,有符号数(字节)加减发生溢出错误

AC为1,十进制数(BCD码)加法的结果应调整

P为1,存于累加器A中操作结果的“1”的个数为奇数

标志位意义标志位与相关指令影响指令标志ADD、ADDC、SUBBDAMULDIVCY√√00AC√√××OV√×√√P√√√√2023/1/3125算数运算影响标志位示例【例3-23】有2个参与相加的机器数,一个是84H,另一个是8DH。试分析运算过程及其对状态标志的影响。结果:CY为1;AC为1;OV为1;P为0

2023/1/31263.4.1加法不带进位加法【例3-24】若有2个无符号数存于累加器A和RAM的30H单元,即(A)=84H,(30H)=8DH,试分析执行指令ADDA,30H

后的结果。由于对无符号数相加,要考察CY。由上页图可知,CY=1,因此知道运算的结果发生了进位,即实际值应该是100H+11H。所以,编程者应确保单字节无符号数运算结果不要超过255

2023/1/3127【例3-25】若有2个有符号数存于累加器A和RAM的30H单元,即(A)=84H,(30H)=8DH,试分析执行指令ADDA,30H后的结果。有符号数相加,只需考察溢出标志OV即可。由上图可见OV=1,因此可知运算的结果发生了溢出,这说明累加器A中的结果已经不是正确的值了。

编程者应确保单字节有符号数运算结果不超过-128~127。否则,就要将数据用多字节表示或在程序运行中对状态标志进行判断:无符号数用JNC或JC,有符号数要用JNB或JB。2023/1/3128带进位加法(这组指令方便了多字节加法的实现)

加12023/1/3129十进制调整DAA;调整A的内容为正确的BCD码两个压缩的BCD码按二进制相加后,必须经过调整方能得到正确的和。

当A中低4位出现了非BCD码(1010~1111)或低4位的进位AC=1,则应在低4位加6调整。当A中高4位出现了非BCD码(1010~1111)或高4位的进位CY=1,则应在高4位加6调整。

执行十进制调整指令后,PSW中的CY表示结果的百位值2023/1/3130【例3-24】若(A)=01101001B,表示的BCD码为(R2)=01011000B,表示的BCD码为,执行指令:ADDA,R2DAA(A)=00100111B,即且(CY)=1,即正确的结果为:127

2023/1/31313.4.2减法带借位减法用此组指令完成不带借位的减法,只需先清CY为0即可

CY为1,表示D7位需借位

AC为1,表示D3位需借位OV为1,表示“D6有借位D7无借位”或“D7有借位D6无借位”2023/1/3132【例3-25】若(A)=C9H,(R2)=54H,(CY)=1,试分析指令SUBBA,R2执行后,累加器的内容及状态标志。(A):11001001(201)-(CY):

1(1)11001000-(R2):

01010100(84)结果:01110100(116)即:(A)=74H,(CY)=0,(AC)=0,(OV)=1,(P)=0。分析:数据为无符号类型。该指令执行前CY=1,说明此指令不是运算的最低字节,即在此指令执行之前,一定执行过低字节的减法并产生了借位。因此,本次相减(201-1-84=116=74H)结果为74H。2023/1/3133减1这组指令仅DECA

影响P标志。其余指令都不影响标志位的状态。2023/1/31343.4.3乘法仅有一条乘法指令MULAB;A与B相乘无符号结果:B中为积的高8位,A中为积的低8位。

CY总是被清0;OV=1表示积大于FFH

3.4.4除法仅有一条除法指令DIVAB;A除以B

无符号结果:A中为商的整数部分,B中为余数

CY总是被清0;OV=1表示除数为02023/1/31353.5逻辑运算与循环类指令(24条)3.5.1逻辑与逻辑:与、或、异或、清0和取反循环:左、右移,带进位位左、右移【例】(A)=C3H,(R0)=AAH,执行指令ANLA,R0

后,(A)=82H与操作常用于对某些不关心位进行“清0”,同时“保留”另一些关心位

2023/1/31363.5.2逻辑或【例】(A)=C3H,(R0)=55H,执行指令ORLA,R0

后,(A)=D7H或操作常用于对某些关心位进行“置1”,不关心位保持不变

2023/1/31373.5.3逻辑异或【例】(A)=C3H,(R0)=AAH,执行指令XRLA,R0

后,(A)=69H异或操作常用于对某些关心位进行“取反”,不关心位保持不变

2023/1/31383.5.4逻辑清0和取反3.5.5累加器循环移位2023/1/31393.6控制转移类指令(17条)3.6.1无条件转移短跳转AJMPaddr11;PC←(PC)+2,PC10~0←addr112023/1/3140长跳转LJMPaddr16;PC←addr16相对转移SJMPrel

;PC←(PC)+2,PC←(PC)+rel

目标地址rel

对应范围为+127~-128。

2023/1/3141【例】若“NEWADD”为地址1022H,PC的当前值为1000H。执行指令SJMPNEWADD后,程序将转向1022H处执行(rel=20H=1022H-1000H-2)。解析如下:2023/1/3142散转移JMP@A+DPTR;PC←(PC)+1,PC←(A)+(DPTR)

可完成多条判跳指令的功能【例】功能:当(A)=00H时,程序将转到ROUT0处执行;当(A)=02H时,程序将转到ROUT1处执行;……。

MOVDPTR,#TABLEJMP@A+DPTRTABLE:AJMPROUT0AJMPROUT1AJMPROUT2AJMPROUT32023/1/31433.6.2条件转移累加器判0转移比较不等转移2023/1/3144减1不为0转移2023/1/3145【例】有一段程序如下,该程序执行后,(A)=10+9+8+7+6+5+4+3+2+1=37HMOV23H,#0AHCLRALOOPX:ADDA,23HDJNZ23H,LOOPXSJMP$2023/1/31463.6.3调用与返回调用

指令执行时将返回地址入栈

SP应设为合适值(默认值07H)

2023/1/3147【例3】若(SP)=07H,标号“XADD”表示的实际地址为0345H,PC的当前值为0123H。执行指令ACALLXADD

后:返回地址为:(

温馨提示

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

评论

0/150

提交评论