第3章80C51的指令系统1_第1页
第3章80C51的指令系统1_第2页
第3章80C51的指令系统1_第3页
第3章80C51的指令系统1_第4页
第3章80C51的指令系统1_第5页
已阅读5页,还剩76页未读 继续免费阅读

下载本文档

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

文档简介

第3章80C51的指令系统指令格式及常用符号3.180C51的寻址方式3.2数据传送指令(29条)3.3算数运算指令(24条)3.4逻辑运算与循环类指令(24条)3.5控制转移类指令(17条)3.6位操作类指令(17条)3.72023/2/61●一台计算机所能执行的全部的指令集合指令系统概述指令是计算机中具有特定功能的操作命令●程序与程序设计按预定要求编排的指令序列称为程序。编排的过程称为程序设计●指令系统设计一种CPU,一般从设计指令系统开始因而,一种机器的指令系统是机器本身固有的决定了机器的性能用户无法改变,必须继承、学习、掌握、应用2023/2/62机器语言:二进制代码,是机器唯一能直接识别、执行的语言。汇编语言:为了记忆和阅读方便,制造商对指令系统每一条指令,都给出了指令助记符。用助记符,操作数,标号编写的程序称为汇编语言源程序。一、汇编语言汇编语言必须翻译成机器语言才能被机器执行●程序设计语言汇编语言:高级语言:符号语言:上页下页回目录如P55,图3-1所示。全是机器码2023/2/63完成由汇编语言到机器代码的过程叫汇编汇编的方法有两种:自动汇编、手工汇编由机器代码到汇编语言的过程叫反汇编汇编语言源程序机器语言汇编反汇编交叉汇编2023/2/643.1指令格式及常用符号3.1.1机器指令的字节编码形式

8位编码仅为操作码

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

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

8位编码含操作码和寄存器编码位号76543210字节opcoderrr如:MOVA,R0编码为:11101000即:E8H操作数仅有A,AB,Rn,DPTR,C2023/2/65双字节指令(45条)位号76543210字节opcodedata或direct三字节指令(17条)位号76543210字节opcodedata或directdata或direct如:MOVA,#50H编码为:0111010001010000即:74H50H如:MOV20H,#50H编码为:011101010100000001010000即:75H20H50H仅含有一个data8,direct,rel,address112023/2/66书写格式注意:操作助记符不能缺少操作数个数可为:1、2、3个2个操作数的指令,目的操作数在左边标号表示符号地址一般格式[标号]:操作助记符[目的操作数][,源操作数][;注释]3.1.2符号指令的书写格式2023/2/6775H81HROM60HMAIN:MOVSP,#60H;设置堆栈指针0030H0031H0032H0033H02H00H30H0000H……LJMPMAINORG0030HORG0000H2023/2/68描述符号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/2/69我的信在他那!找信去!②①注:找信是寻找信的“地址”!你能说出第二封信的“地址”吗?2023/2/610用何种方式寻找指令的操作数或指令的执行地址1、立即寻址寻址空间:指令形式:操作码立即数程序存储器指令的操作数存放在程序存储器中操作数紧跟操作码后面立即寻址:在哪里?用何种方式寻找OP#dataImmediateAddressing上页下页回目录指令的寻址方式:指令的寻址方式:80C51的寻址方式3.22023/2/611MOVA,#30H;A#30H例1:操作码立即数PCPCPC74H30HROM××A30HMOVDPTR,#8000H;DPTR#8000H例2:操作码PCPCPC立即数的高8位立即数的低8位DPHDPLPC80H00H90H80HROM00H上页下页回目录2023/2/6122、直接寻址寻址空间:指令的三种形式:操作码操作数地址在指令中直接给出操作数的真实地址操作码后面紧跟一个实际操作数地址操作码操作数地址立即数操作码源操作数地址目的操作数地址内RAM的低128字节特殊功能寄存器SFR区直接寻址直接寻址是访问SFR的唯一方法DirectAddressing上页下页回目录00H~7FH80H~FFHCPU内部直接间接2023/2/613“与”上页下页回目录MOVA,30H;A(30H)例1:操作码操作数地址PCPCPC74H30HROM××A内RAM××30H××ANL30H,#30H;30H(30H)∧#30H

例2:操作码PCPCPC直接地址立即数PC53H30HROM

30H××内RAM××30H

××ALU“结果”另一类直接寻址是转移目标地址的寻址。如:LJMPADDR162023/2/6143、寄存器寻址寻址空间:指令的三种形式:操作码当前选定的寄存器内容就是实际操作数操作码立即数操作码直接地址R0~R7,由RS0、RS1确定寄存器区/4A、B(AB形式)和DPTRMOVA,R3;A(R3)

例1:ADDA,R3;A(A)+(R3)例2:寄存器寻址:RegisterAddressing操作数隐含操作数显然隐含寻址上页下页回目录2023/2/6154、寄存器间接寻址寻址空间:指令的三种形式:操作码操作码立即数操作码直接地址内部RAM(@R0,@R1,SP)外部RAM(@R0,@R1,@DPTR)寄存器间接寻址:指令选定的寄存器内容就是实际的操作数地址RegisterIndirectAddressing上页下页回目录2023/2/616MOV@R0,A例1:操作码PCPCF6HROMR030H;累加器传送指令内RAM××30HA××××MOVXA,@DPTR例2:操作码PCPCE0HROMDPTR2000H外RAM××2000HA×××ד读”RD“读”上页下页回目录2023/2/6175、变址寻址基址寄存器加变址寄存器间接寻址:以DPTR或PC作基址寄存器,A作变址寄存器两者相加形成操作数地址。寻址空间:程序存储器(@A+DPTR、@A+PC)指令形式:操作码上页下页回目录2023/2/618MOVCA,@A+DPTR例:操作码PCPCDPTR2400HA

0FH93HROM……××240FH设(A)=0FH(DPTR)=2400H××ALU“读”PSEN“读”MOVCA,@A+DPTR上页下页回目录2023/2/6196、相对寻址程序存储器寻址空间:指令的三种形式:操作码

rel操作码直接地址

rel操作码立即数

rel相对寻址以当前PC值为基准地址,加上指令的偏移量“rel”,结果为目标地址。rel为有符号补码数,范围:-128~+127一般为双字节或三字节指令RelativeAddressing上页下页回目录寻址指令执行地址目标地址2023/2/620JNZrel例:;累加器A不等零则转移设:rel=23H2025H2002H2001H2000H

ROM70H23H下一条指令.......操作码PCPCPC(PC)=2002Hrel=23H修正后转移目标地址D(PC)=2025HPCALU偏移量上页下页回目录(PC)=2002HRel=23H)005202HD=2023/2/6212025H2112H2111H2110H

ROMDFHF2H下一条指令.......操作码PCPCPC(PC)=2112Hrel=F2H修正后转移目标地址D(PC)=2104HALU偏移量上页下页回目录例:DJNZR7,rel;(R7)–1不为“0”则转PC2104H指令(PC)=2112HRel=F2H)FF4012HD=2023/2/6227、位寻址寻址空间:片内RAM的20H~2FH字节地址位地址:00H~7FH

共128位SFR中12个能被8整除的字节地址位地址请参看P43

表2-16共93位BitAddressing以访问触发器的方式,对内部RAM、SFR的位地址空间进行访问,称为位寻址。位地址用于布尔指令。共221位上页下页回目录位寻址方式实质属于位的直接寻址。

2023/2/623【例】位地址00H内容为1,MOVC,00H执行后,位地址PSW.7的内容为1。2023/2/624寻址方式与相应的寻址空间小结:寄存器R0~R7,A,BCY,DPTR片内内RAM的低128字节特殊功能寄存器SFR直接寻址direct寄存器间址@R0,@R1,SP@R0,@R1,@DPTR片内RAM、片外RAM与I/O口立即数#data程序存储器程序存储器变址@A+DPTR,@A+PC程序存储器相对寻址PC+rel位寻址片内RAM20H~2FH部分SFRbit利用的变量使用的空间方式2023/2/625一般不影响标志寄存器PSW的状态。传送类指令有两大类

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

数据传送指令(29条)3.32023/2/6263.3.1一般传送指令1、16位传送(仅1条)MOVDPTR,#data16;DPTR←data16例:执行指令MOVDPTR,#1234H后(DPH)=12H,(DPL)=34H。三字节指令

12H

34H

90H机器码2023/2/6273.3.1一般传送指令2、8位传送通用格式:MOV<目的字节>,<源字节>;功能:把源字节内容送目的字节,源字节内容不变目的地址源地址数据MOVA,#20H20HA20H,ARndirect1@RiARndirect2@Ri#dataARndirect2@Ri#dataMOVRnA#datadirect2direct1ARndirect2@Ri#data@RiAdirect2#data※(1)源操作数和目的操作数不相同(direct除外)

(2)Rn、@Ri之间不可相互传送。

(3)立即数不可以做目的操作数2023/2/628MOVdirect,directMOVR0,R7×MOVA,R7

MOVR0,A√MOV00H,07H√MOVR0,07H√MOV00H,R7√MOVSP,R0MOV81H,00H2B2T3B2T2B2T2B2T2023/2/6293.3.2特殊传送指令

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

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

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

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

93H机器码1B2T83H机器码1B2T2023/2/630MOVDPTR,#TAB

MOVCA,@A+DPTR2004H2003H2002H2001H2000H2008H2009H2005H2006H2007H存储器00H01H04H09H10H19H24H31H40H51HTAB:例:在外部ROM中存放0~9的平方值。根据累加器A中的数(0~9),查找对应的平方值。TAB:DB0,1,4,9,16DB25,36,49,64,812023/2/631操作码PCPCDPTR2000HA

03H

09HMOVDPTR,#TABMOVCA,@A+DPTR

93HROM……00H2000H01H04H09H2001H2002H2003H…;设(A)=03H,查“3”的平方ALU2023/2/632用PC作基址寄存器,它并不指向表格首址;是PC当前值与所查表格首址之间的距离;即(PC)+#dataTAB表格首址设(A)=03H,是表格中的第3项;单字节指令,设指令在ROM中的地址为1FF0HADDA,#dataMOVCA,@A+PC2000H1FF1H-000FH;#data是变址调整值#dataPC当前值表格首址TABBEL:DB00HDB01HDB04H…DB09H2000H12HA……PCPC2003HTAB:2023/2/633PCPC操作码MOVCA,@A+PC

93HROM……00H2000H01H04H09H2001H2002H2003H…1FF0H1FF1H(PC)=1FF1HA12H09H;查“3”的平方ALUTAB:A03H+0FH2023/2/634

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

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

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

E0HRD1B2TE2H~E3H1B2TF0H1B2TF2H~F3H1B2TWR2023/2/635【例】

0BF02H:MOVDPTR,#0BFF8H0BF05H:MOVXA,@DPTR0BF06H:INCDPTR0BF07H:MOVX@DPTR,A2023/2/6362023/2/6372023/2/638

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

2023/2/639利用堆栈完成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/2/640SPSP例:堆栈操作设(40H)=23H,(50)=45H’建立堆栈’压入操作’弹出操作

6FH70H71H72H73H

23H

45HSPMOVSP,#6FHPUSH40HPUSH50HPOP50HSP结果:50H的内容45H,SP的内容为70H45H2023/2/641

字节交换指令XCH数据交换指令XCH、XCHD和SWAP【例3-20】若(R0)=80H,(A)=20H。执行指令XCHA,R0

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

2023/2/642

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

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

【例3】若(A)=30H,执行指令SWAPA后,(A)=03H。

A(Ri)AXCHD是间址操作数的低半字节与A的低半字节互换。SWAP是累加器的高低4位互换经常用于非压缩BCD码的使用2023/2/6431、当(01H)=00H,将78H入R0中,PSW中RS1RS0=00,有几种方法?分别是什么?MOVR0,#78HMOV@R1,#78HMOV00H,#78H2、将内部RAM中30H和31H的低半字节组成一个字节放入片内RAM中32H中。3、片外RAM中0060H内容片内RAM31H内容低4位互换后送回到片外0061H中。思考:2023/2/644算数运算结果要影响PSW中标志位

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

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

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

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

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

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

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

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

加12023/2/649将内部RAM33H~30H与RAM43H~40H连续四字节的内容相加后结果存于内部RAM33H~30H中

MOVR7,#4MOVR0,#30HMOVR1,#40HCLRCLOP:MOVA,@R0ADDCA,@R1MOV@R0,AINCR0INCR1DJNZR7,LOPRET2023/2/650十进制调整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/2/651【例3-24】若(A)=01101001B,表示的BCD码为(R2)=01011000B,表示的BCD码为,执行指令:ADDA,R2DAA(A)=00100111B,即且(CY)=1,即正确的结果为:127

2023/2/652例:设(A)=37H;(R3)=36H,执行下面的程序:

00110111(37H)

00110110(36H)(6DH)

01101101过“9”

00000110

01110011补“6”(73H);(A)=6DH;(A)=73H

01110011(73H)

10011001(99H)

1

00001100(0CH)

CY

01100110

01110010(72H);(A)=0CHCY=1;(A)=72H过“9”补“6”110111100ADDA,R3DAAADDA,#99HDAA“+99”就等于减“-1”互补DAA只能跟在加法指令之后2023/2/6533.4.2减法带借位减法用此组指令完成不带借位的减法,只需先清CY为0即可

CY为1,表示D7位需借位

AC为1,表示D3位需借位OV为1,表示“D6有借位D7无借位”或“D7有借位D6无借位”2023/2/654【例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/2/655减1这组指令仅DECA

影响P标志。其余指令都不影响标志位的状态。2023/2/6563.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/2/6573.5逻辑运算与循环类指令(24条)3.5.1逻辑与逻辑:与、或、异或、清0和取反循环:左、右移,带进位位左、右移【例】(A)=C3H,(R0)=AAH,执行指令ANLA,R0

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

11010110∧010001010100010011010110∧11010110∧000000000000000011010110∧11010110∧000011110000011011010110∧11010110∧111100001101000011010110∧11010110∧100000001000000011010110∧11111111110001102023/2/6583.5.2逻辑或【例】(A)=C3H,(R0)=55H,执行指令ORLA,R0

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

11010110∨010001011101011100000101∨100000001000010100000101∨001100000011010100000101∨100000001000010100000101∨001100000011010100000101∨00000000000001012023/2/6593.5.3逻辑异或【例】(A)=C3H,(R0)=AAH,执行指令XRLA,R0

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

11010110⊕010001011101011111010110⊕110101100000000011010110⊕01011001100011112023/2/6603.5.4逻辑清0和取反3.5.5累加器循环移位?多字节循环怎么做?2023/2/661例:将片内RAM31H30H整体带进位的左移1位。CLRCMOVA,30HRLCAMOV30H,AMOVA,31HRLCAMOV31H,AA.0A.7CYA.0A.7CY30H.6……30H.0CY(原)31H.6……31H.030H.730H.731H.72023/2/6623.6控制转移类指令(17条)3.6.1无条件转移短跳转AJMPaddr11;PC←(PC)+2,PC10~0←addr112023/2/663长跳转LJMPaddr16;PC←addr16相对转移SJMPrel;PC←(PC)+2,PC←(PC)+rel目标地址rel

对应范围为+127~-128。

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

可完成多条判跳指令的功能mova,r7adda,r7

MOVDPTR,#TABLEJMP@A+DPTRTABLE:AJMPROUT0AJMPROUT1AJMPROUT2AJMPROUT3据R7内容转移2023/2/6663.6.2条件转移累加器判0转移比较不等转移2023/2/667减1不为0转移2023/2/668【例】有一段程序如下,该程序执行后,(A)=10+9+8+7+6+5+4+3+2+1=37HMOV23H,#0AHCLRALOOPX:ADDA,23HDJNZ23H,LOOPXSJMP$2023/2/669条件转移类指令范例——方案一还有什么方法实现循环的终止?将00H~0FH这16个数顺序地置入片内RAM20H~2FH单元中。

MOVR0,#20H MOVR7,#16 CLRALOOP:MOV@R0,AINCAINCR0DJNZR7,LOOPSJMP$2023/2/670条件转移类指令范例——方案二

MOVR0,#20H CLRALOOP:MOV@R0,AINCAINCR0CJNEA

温馨提示

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

评论

0/150

提交评论