MCS-51指令系统概述_第1页
MCS-51指令系统概述_第2页
MCS-51指令系统概述_第3页
MCS-51指令系统概述_第4页
MCS-51指令系统概述_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

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

文档简介

1、第三章 MCS-51指令系统第一节 指令系统概述一、指令类型一、指令类型MCS-51指令系统: 数据传送指令 算术运算指令 逻辑运算指令 位操作指令 控制转移指令 二、指令格式二、指令格式操作码 操作数1,操作数2,操作数3 操作码:表示指令进行何种操作。 操作数:指出了参加操作的数据或数据存放的地址。 操作数和操作码之间用一个或几个空格隔开,操作数之间以逗号“,”分开。 三、伪指令三、伪指令不产生机器语言指令,仅提供汇编控制信息。1定位伪指令 ORG m m:代表16位地址。 功能:指出汇编语言程序通过编译,得到的机器语言程序的起始地址。2定义字节伪指令 DB X1,X2,Xn Xi:单字节

2、数据。它为十进制或十六进制数,也可以为一个表达式。Xi也可以为由两个单引号“”所括起来的一个字符串 ,每一个字符为一个ASCII码。 功能:X1,X2,Xn 送目标程序存储器,通常用于定义一个常数表。3字定义伪指令 DW Y1,Y2,Yn Yi:双字节数据。它可以为十进制或十六进制的数,也可以为一个表达式。 功能:Y1,Y2,Yn送目标程序存储器,经常用于定义一个地址表。4汇编结束伪指令 END 功能:汇编结束标志。5标号和注释 标号:操作码 操作数1,操作数2,操作数3;注释 标号:加在指令之前,必须以字母开始,后跟18个字母或数字,并以冒号“:”结尾。标号的值是它后面的指令存储地址。 注释

3、:对某一条指令或某一段程序的功能说明,它必须以分号“;”开始 。四、常用的缩写符号四、常用的缩写符号A 累加器ACC。AB 累加器ACC和寄存器B组成的寄存器对。C 进位标志位CY,也是位操作指令中的位累加器。Rn 表示当前选中的通用寄存器R0R7(n=07)。Ri 表示通用寄存器中可用作8位地址指针的R0和R1(i=0,1)。direct 直接地址,取值为00FFH。data 立即数,表示一个常数。 间接寻址。addr 表示外部数据存储器的地址。bit 表示内部RAM或特殊功能寄存器中的直接位地址。 寄存器。() 寄存器内容。() 由X寄存器寻址的存储器单元内容。() 寄存器的内容取反。rr

4、r 指令编码中rrr三位值由工作寄存器Rn确定,R0R7对应rrr为 000111。 指本条指令起始地址。rel 相对偏移量,其值为128+127。第二节 寻址方式寻址方式:指令给出参与运算的数据的方式。一、寄存器寻址一、寄存器寻址 指令指出某一个寄存器的内容作为操作数。 寻址空间:R0R7 A、B、C、AB、DPTR二、直接寻址二、直接寻址 在指令中含有操作数的直接地址,该地址指出了参与运算或传送的数据所在的字节单元或位的地址。 直接寻址方式访问以下三种存储空间: 特殊功能寄存器(特殊功能寄存器只能用直接寻址方式访问)。 内部数据存储器的低128字节。 位地址空间。 三、寄存器间接寻址三、寄

5、存器间接寻址 指令指出某一个寄存器的内容作为操作数的地址。寻址空间:内部RAM(R0、R1、SP) 外部数据存储器(R0、R1、DPTR)四、立即寻址四、立即寻址 立即寻址方式中操作数包含在指令字节中,即操作数以指令字节的形式存放于程序存储器中。五、基寄存器加变址寄存器间接寻址五、基寄存器加变址寄存器间接寻址 以16位的程序计数器PC或数据指针DPTR作为基寄存器,以8位的累加器A作为变址寄存器,基寄存器和变址寄存器的内容相加形成16位的地址,该地址即为操作数的地址。 寻址空间:程序存储器(A+PC、A+DPTR) 六、相对寻址六、相对寻址 相对寻址方式是为实现程序的相对转移而设计的,为相对转

6、移指令所采用。目的地址:PC值+转移指令字节数+relPC值:执行完该转移指令后的PC值 。rel:带符号的8位二进制补码数,所能表示的数的范围是128+127 。第三节 数据传送指令 MOV , 数据传送指令是指把源操作数传送到目的操作数。指令执行后,源操作数的值不改变,目的操作数的值改为源操作数赋给的相应值。 除以累加器A为目的操作数寄存器指令会对奇偶标志位P有影响外,其余指令执行时均不会影响任何PSW的标志位。 一、内部数据传送指令一、内部数据传送指令1以累加器A为目的操作数的指令 MOV A,Rn ;n=07 MOV A,direct MOV A,Ri ;i=0,1 MOV A,#da

7、ta功能:把源操作数的内容送入累加器A。2以Rn为目的操作数的指令 MOV Rn,A ;n=07 MOV Rn,direct MOV Rn,#data功能:把源操作数的内容送入当前工作寄存器区的R0R7中的某一个寄存器。 3以直接寻址的单元为目的操作数指令 MOV direct,A MOV direct,Rn ;n=07 MOV direct,direct MOV direct,Ri ;i=0、1 MOV direct,#data功能:把源操作数送入由直接地址指出的存储单元。4以寄存器间接寻址的单元为目的操作数指令 MOV Ri,A ;i=0、1 MOV Ri,direct MOV Ri,#d

8、ata功能:把源操作数内容送入R0或R1指出的内部RAM存贮单元中。516位数据传送指令 MOV DPTR,#datal6功能:把16位常数送入DPTR。6堆栈操作指令内部RAM中可以设定一个后进先出(LIFO)的堆栈 。 (1)进栈指令 PUSH direct功能:首先将堆栈指针SP加1,然后把直接地址指出的内容传送到堆栈指针SP寻址的内部RAM单元中。 (2)退栈指令 POP direct功能:堆栈指针SP寻址的内部RAM单元内容送入直接地址指出的字节单元中,堆栈指针SP减1。7字节交换指令 XCH A,Rn ;n=07 XCH A,direct XCH A,Ri ;i=0、1功能:将累加

9、器A的内容和源操作数内容相互交换。 8半字节交换指令 XCHD A,Ri ;i=0、1功能:将A的低4位和R0或R1指出的RAM单元低4位相互交换,各自的高4位保持不变。 二、累加器二、累加器A与外部数据存储器传送指令与外部数据存储器传送指令 MOVX A,DPTR MOVX A,Ri ; i=0,1 MOVX DPTR,A MOVX Ri,A功能:将累加器A和外部扩展的RAMIO口的数据传送。三、查表指令三、查表指令 1MOVC A,A+PC功能:以PC作为基址寄存器,A的内容作为无符号数和PC内容(下一条指令的始地址)相加后得到一个16位的地址,由该地址指出的程序存储器单元内容送到累加器A

10、。 2MOVC A,A十DPTR功能:以DPTR作为基址寄存器,A的内容作为无符号数和DPTR的内容相加得到一个16位的地址,由该地址指出的程序存储器单元的内容送到累加器A。 第四节 算术运算指令 算术运算指令有加、减、乘、除法指令,增量和减量指令。一、加法指令一、加法指令1不带进位的加法指令 ADD A,Rn ; n=07 ADD A,direct ADD A,Ri ; i0、1 ADD A,#data 功能: 把所指出的第二操作数和累加器A的内容相加,其结果放在累加器中。 指令执行后,影响PSW标志位。 2带进位加法指令 ADDC A,Rn ;n=07 ADDC A,direct ADDC

11、 A,Ri ;i=0、1 ADDC A,#data功能: 同时把所指出的第二操作数、进位标志与累加器A内容相加,结果放在累加器中。 指令执行后,影响PSW标志位。3增量指令 INC A INC Rn ;n=07 INC direct INC Ri ;i=0、1 INC DPTR功能: 把指令所指出的操作数加1。 除对A作影响P外不影响任何PSW标志。4十进制调整指令 DA A功能:对累加器A中由上一条加法指令(加数和被加数均为压缩的BCD码)所获得8位结果进行调整,使它调整为压缩BCD码的数。 二、减法指令二、减法指令1带进位减法指令 SUBB A,Rn ;n=07 SUBB A,direct

12、 SUBB A,Ri ;i=0、1 SUBB A,#data功能: 从累加器中减去第二操作数和进位标志,结果在累加器中。 指令执行后,影响PSW标志位。 2减1指令 DEC A DEC Rn ;n=07 DEC direct DEC Ri ;i=0、1功能: 将指定的操作数减1。 除对A作影响P外不影响任何PSW标志。 三、乘法指令三、乘法指令 MUL AB功能:把累加器A和寄存器B中的8位无符号整数相乘,其16位积的低位字节在累加器A中,高位字节在B中。 如果积大于255(0FFH),则置位溢出标志OV;否则清“0”OV。进位标志CY总是清“0” 。四、除法指令四、除法指令 DIV AB功能

13、:把累加器A中的8位无符号整数除以寄存器B中的8位无符号整数,所得商的整数部分存放在累加器A中,余数在寄存器B中。 如果原来B中的内容为0,即除数为0,则结果A和B中内容不定,并置位溢出标志OV。在任何情况下,都清“0”CY。 第五节 逻辑运算指令 一、累加器一、累加器A的逻辑操作指令的逻辑操作指令 1CLR A功能:将累加器A清“0”,不影响CY、AC、OV等标志。 2CPL A功能:将累加器ACC的每一位逻辑取反。不影响标志。 3左环移指令 RL A 4带进位左环移指令 RLC A 5右环移指令 RR A 6带进位右环移指令 RRC A 7累加器ACC半字节交换指令 SWAP A功能:将累

14、加器ACC的高半字节(ACC.7ACC.4)和低半字节(ACC.3ACC.0)互换。 二、两个操作数的逻辑操作指令二、两个操作数的逻辑操作指令 1逻辑与指令 ANL A,Rn ;n=07 ANL A,direct ANL A,Ri ;i=0、1 ANL A,#data ANL direct,A ANL direct,#data 功能:操作数之间执行按位的逻辑与操作,结果存放在目的操作数中。 2逻辑或指令 ORL A,Rn ;n=07 ORL A,direct ORL A,Ri ;i=0、1 ORL A,#data ORL direct,A ORL direct,# data功能:操作数之间执行

15、按位的逻辑或操作,结果存到目的操作数中去。 3逻辑异或指令 XRL A,Rn ;n=07 XRL A,direct XRL A,Ri ;i=0、1 XRL A,#data XRL direct,A XRL direct,#data功能:操作数之间执行按位的逻辑异或操作,结果存放到目的操作数中去。 第六节 位操作指令 进位位CY(程序状态字PSW.7)作为累加器C,以RAM和SFR内的位寻址区的位单元作为操作数,进行位变量的传送、修改和逻辑等操作。 一、位变量传送指令 MOV C,bit MOV bit,C 二、位变量修改指令 CLR C CLR bit CPL C CPL bit SETB C

16、 SETB bit 三、位变量逻辑操作指令三、位变量逻辑操作指令 1位变量逻辑与指令 ANL C,bit ANL C,bit功能:如果源位的布尔值是逻辑0,则进位标志清“0”,否则进位标志保持不变。操作数前斜线“”表示用寻址位的逻辑非作源值,但不影响源位本身值,不影响别的标志。 2位变量逻辑或指令 ORL C,bit ORL C,bit功能:如果源位的布尔值为1,则置位进位标志,否则进位标志CY保持原来状态。同样,斜线“”表示逻辑非。第七节 控制转移指令一、无条件转移指令一、无条件转移指令1短跳转指令AJMP addr11指令编码: a10a9a800001 a7a6a5a4a3a2a1a0功

17、能:2KB字节范围内的无条件转跳指令,程序转移到指定的地址。 该指令在运行时先将PC+2,然后通过把PC的高5位和指令第一字节高3位以及指令第二字节相连(PC15PC14PC13PC12PC11a10a9a8a7a6a5a4a3a2a1a0)而得到转跳目的地址送入PC。 2相对转移指令 SJMP rel功能:无条件转跳指令,执行时在PC加2后,把指令的有符号的偏移量rel加到PC上,并计算出转向地址。因此,转向的目标地址可以在这条指令前128字节到后127字节之间。 3长跳转指令 LJMP addrl6功能:把指令提供的16位目标地址送入PC,无条件地转向指定地址。转移的目标地址可以在64K字

18、节程序存储器地址空间的任何地方,不影响任何标志。 4基寄存器加变址寄存器间接转移指令(散转指令) JMP A+DPTR功能:把累加器A中8位无符号数与数据指针DPTR中的16位数相加(模216),结果作为下条指令地址送入PC,不改变累加器和数据指针内容,也不影响标志。 实现程序的散转。二、条件转移指令二、条件转移指令 条件满足才转移(相当于执行一条相对转移指令),条件不满足时则顺序执行下面的指令。 转移目的地址 =下一条指令的第一个字节地址 PC+相对偏移量 rel 1测试条件符合转移指令 JZ rel ;(A)=0 JNZ rel ;(A)0 JC rel ;CY=1 JNC rel ;CY

19、=0 JB bit, rel ;(bit)=1 JNB bit, rel ;(bit)=0 JBC bit, rel ;(bit)=1 (转移后清洗直接寻址位)2比较不相等转移指令 CJNE A, direct, rel CJNE A, #data, rel CJNE Rn, #data, rel ;n=17 CJNE Ri,#data,rel ;i=0 、1功能: 比较两个操作数的大小。如果它们的值不相等,则转移。 转移目的地址 =下一条指令的第一个字节地址 PC+相对偏移量 rel 如果第一操作数(无符号整数)小于第二操作数,则置位进位标志CY;否则,CY清0。 不影响任何一个操作数的内容

20、。 3减1不为0转移指令 DJNZ Rn, rel ;n=17 DJNZ direct,rel 功能: 源操作数减1,结果回送到源操作数中去。 如果结果不为0,则转移。 转移目的地址 =下一条指令的第一个字节地址 PC+相对偏移量 rel 利用内部RAM单元作程序循环计数器。 三、调用和返回指令三、调用和返回指令 主程序和子程序结构主程序二次调用子程序示意图主程序二次调用子程序示意图 二级子程序嵌套示意图二级子程序嵌套示意图 调用和返回 子程序是独立于主程序的具有特定功能的程序段,单独编写,能被主程序调用,又能返回主程序。 堆栈和PC值的保留 调用子程序时,CPU自动自动将当前PC值保留在堆栈

21、中,子程序返回时,自动弹出,送入PC。 现场保护和恢复现场 现场保护:子程序开始时,保护现场。 恢复现场:在子程序返回前,恢复现场。 1短调用指令 ACALL addr11 指令编码: a10a9a810001 a7a6a5a4a3a2a1a0功能: (PC)+ 2 PC,并压入堆栈,先PCL,后PCH,(SP)+2SP。 子程序入口地址= PC15PC14PC13PC12PC11a10a9a8a7a6a5a4a3a2a1a0PC 2长调用指令 LCALL addrl6功能: (PC)+ 3 PC,并压入堆栈,先PCL,后PCH,(SP)+2SP。 addr16 PC,获得子程序起始地址 3返

22、回指令(1)从子程序返回指令 RET 功能:从堆栈中退出PC的高位和低位字节,把栈指针SP减2,并从产生的PC值开始执行程序。(2)从中断返回指令 RETI功能:从堆栈中退出PC的高位和低位字节,栈指针减2,同时清除中断优先,开放低级中断。 4空操作指令 NOP功能: CPU不做任何操作,只作时间上的消耗。常用于程序的等待或时间的延迟。第八节 汇编语言程序设计举例一、汇编语言程序的结构一、汇编语言程序的结构1、程序设计的基本步骤(1)分析题意,明确要求;(2)建立思路,确定算法;(3)编制框图,绘出流程;(4)编写程序,上机调试。2、画流程图二、延时程序二、延时程序例1 延时程序。 DEL:

23、MOV R7,#200 ;1T DELl: MOV R6,#125 ; 1T DEL2:DJNZ R6,DEL2 ; 2T DJNZ R7,DEL1 ; 2T RET ; 2Tfosc=12MHz晶振时,T=1s。这段程序的延迟时间为:(250+1+2)200+1+2=50.303ms。 三、查表程序三、查表程序例例2 设设a、b为小于为小于10的正整数。试编程计算的正整数。试编程计算C=a2+b2的函数值,存入的函数值,存入30H中。中。a、b的值已存放在的值已存放在40H、41H单元中。单元中。 MOV A,40H ACALL SUB3 ;查表得a2的值 MOV R2,A MOV A,41

24、H ACALL SUB3 ;查表得b2的值 ADD A,R2 MOV 30H,A SJMP $SUB3: INC A MOVC A,APC RET DB 00H,01H,04H,09H,10H, 19H,24H,31H,40H,51H四、数制转换四、数制转换一个整数的十进制表示式为:A=an10n+a1101+a0例如:5731=5103+7102+3101+1 =(510+7)10+310+1编写程序形式: 初值: Yn= an, i=n-1 Y=YX+ai i=i-1结束条件:i0例例3 4位十进制整数转换位十进制整数转换为二进制整数程序。为二进制整数程序。 设单字节BCD码a3,a2,a1,a0依次存放于内部RAM中的50H53H单元,转换成的二进制整数存放于R3R4。 IDTB:MOV R0, #50H MOV R2, #3 MOV R3, #0 MOV A, R0 MOV R4, A L00P:MOV A, R4 MOV B, #10 MUL AB MOV R4, A ;R410低8位 MOV A,B XCH A, R3 MOV B #10 MUL AB ADD A,R3 MOV R3,A

温馨提示

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

评论

0/150

提交评论