第3章MCS-51系列单片机的指令系统及汇编语言程序设计_第1页
第3章MCS-51系列单片机的指令系统及汇编语言程序设计_第2页
第3章MCS-51系列单片机的指令系统及汇编语言程序设计_第3页
第3章MCS-51系列单片机的指令系统及汇编语言程序设计_第4页
第3章MCS-51系列单片机的指令系统及汇编语言程序设计_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

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

文档简介

1、主要内容 寻址方式 指令系统 传送与交换指令 算术运算、逻辑运算指令 控制转移指令 位操作指令 伪指令 程序设计举例,第3章 MCS-51系列单片机的指令系统及汇编语言程序设计,计算机通过执行程序完成人们指定的任务,程序由一条一条指令构成,能为CPU识别并执行的指令的集合就是该CPU的指令系统。 MCS-51单片机汇编语言指令格式: 操作符 目的操作数,源操作数 操作符指明该指令完成什么操作; 操作数是指明该指令的操作对象。 目的操作数是存放结果的。 指令中操作数提供的方式称为寻址方式。,指令中的常用符号 Rn: 表示当前工作寄存器R0R7中的一个。 Ri: 代表R0和R1寄存器中的一个,用作

2、间接寻址寄存器。 dir : 8 位直接字节地址(片内 RAM 和 SFR ) #data: 8位立即数,即8位常数。可以为2进制(B)、 10进制、16进制(H)、 字符( ) #data16: 表示16位立即数,即16位常数,取值范围为: #0000H#0FFFFH addr16 : 表示16位地址 addr11 : 表示11位地址 rel : 相对偏移量(为一字节补码)用于相对转移指令中 bit : 位地址,在位地址空间中。 $: 表示当前指令的地址。,指令中直接给出操作数的寻址方式。在51系列单片机的指令系统中,立即数用一个前面加 “#”号的8位数(#data,如#30H)或16位数(

3、#data16,如#2052H)表示。立即寻址中的数,称为立即数。 例如指令:MOV A,#58H;58HA,3.1 寻址方式3.1.1 立即寻址,操作数的地址直接出现在指令中。 寻址对象: 内部数据存贮器:使用它的地址。 特殊功能寄存器:既可使用它的地址,也可以直接使用寄存器名。 位地址空间 程序存储器空间 例:MOV A,40H ;(40H)A MOV 40H,41H ;(41H)(40H) MOV P0,#45H ; 45HP0 MOV 80H,#45H ; 45HP0 MOV C,18H ; 位地址18HC,3.1.2 直接寻址,操作数存放在寄存器中。 寻址对象:A,B,C,DPTR,

4、R0R7 。 B仅在乘除法指令中为寄存器寻址,在其他指令中为直接寻址。 A可以寄存器寻址又可以直接寻址,直接寻址时写作ACC 例如:MOV A,R0 ;R0A MUL AB ;A*BBA ADD A,ACC ;A+AA,3.1.3 寄存器寻址,操作数存放在以寄存器内容为地址的单元中,用做间址的寄存器为Ri(i=0,1)、DPTR。 对片内的间接寻址用Ri(i=0,1) 如: MOV R0,#20H MOV R0,A ;A(20H) 对片外的间接寻址可用Ri(i=0,1)或DPTR 如: MOVX DPTR,A ;A以DPTR的内容为地址的外部RAM中 MOVX R1,A ;A以P2 R1内容为

5、地址的外部RAM中 PUSH和POP指令的源操作数是以SP间接寻址 注意:寄存器间接寻址不能访问SFR MOV R1,#81H MOV A,R1 ;不能访问SP,只能用 MOV A,SP,3.1.4 寄存器间址,变址寻址只能访问程序存储器。操作数所在位置的地址由DPTR或PC寄存器与A的内容相加后形成。其中累加器A内容是可变的。变址寻址只有三条指令。 MOVC A, A+DPTR ;(A+DPTR)A MOVC A, A+PC ;(A+PC)A JMP A+DPTR ;A+DPTRPC 注意:A的内容是无符号数。 PC值是指令的当前PC值,即下条指令的PC值,3.1.5 变址寻址,3.1.6

6、相对寻址,变址寻址只能访问程序存储器。相对寻址是将程序计数器PC的当前值与指令第二字节给出的偏移量相加,从而形成转移的目标地址。 如:JZ 61H 注意: 相对偏移量是一字节有符号数,用补码表示,偏移范围是:-128+127。 PC值是指令的当前PC值,即下条指令的PC值。 源程序中偏移量常用符号地址表示。,对可位寻址的位地址寻址。包括片内RAM的位地址空间和可位寻址的SFR(地址能被8整除) 如:MOV C,20H ;位寻址 MOV A,20H ;字节寻址 以上两条指令究竟是位寻址还是字节寻址,根据两操作数类型一致的原则,由另一个操作数决定。,3.1.7 位寻址,寻址方式与存储空间的对应关系

7、,内部RAM、SFR之间的传送MOV指令,3.2 指令系统3.2.1 数据传送与交换指令,例 R1=20H,(20H)=55H, MOV A,R1 执行后,A=55H。 例 (40H)=30H, MOV R7,40H 执行后,R7=30H。 例 MOV R7,40H 执行后,R7=40H。,注意: 寄存器之间无传送; 寄存器间址和寄存器之间无传送; 立即数不能做目标地址;,2. 外部存储器和A累加器之间的传送,MOVX,MOVC,利用 MOVX 实现片外数据存储器数据传送 (2000H)(2100H),MOV DPTR,#2000H MOVX A,DPTR MOV DPTR,#2100H MO

8、VX DPTR,A,; DPTR= 2000H,; DPTR= 2100H,; A X,;(2100H) X,x,片外数据存储器不能直接寻址。下列为非法指令: MOVX A,2000H MOVX 2100H,2000H ,利用Ri间址来实现将(2000H)(2100H) MOV P2,#20H;高位地址 MOV R0,#00 ;低位地址 MOVX A,R0;读片外RAM MOV P2,#21H;改变高位地址 MOVX R0,A;写片外RAM,利用 MOVC 指令实现查表功能注:只能从程序存储器读取数据到A累加器。 只能使用变址间接寻址方式,1)DPTR为基址寄存器 MOVC A,A+DPTR

9、;A(A+DPTR) 查表范围为 64KB 程序存储器任意空间。,2)PC为基址寄存器 MOVC A,A+PC;A (A+PC) 常数表只能在查表指令后 256B 范围内。,例 查表法求 Y=X2。设 X(0X15)在片内 RAM 20H单 元,要求将查表求 Y,存入片内 RAM 21H单元,1)用DPTR作基址寄存器 ORG 0100H SQU: MOV DPTR,#TAB ;确定表首地址 MOV A,20H ;取 X MOVC A,A+DPTR ;查表求 Y=X2 MOV 21H,A ;保存Y RET ;子程序结束 ;其它程序段,ORG 0200H ;常数表格首地址 TAB: DB 00,

10、01,04,09,225 ;平方表,指令地址 源程序 ORG 0100H;程序起始地址 0100HSQU: MOV A,20H;取X 0102H ADD A,#3;修正偏移量 0104HMOVC A,A+PC ;查表求Y=X2 0105H MOV 21H,A;存结果 0107HRET ;子程序结束 0108HTAB: DB 00,01,04 ;平方表 010BHDB 09,225,思考题:当0X255时,如何用查表法编程求Y=X2,2)用PC作基址寄存器,3.交换指令 实现片内RAM区的数据双向传送 1) 字节交换指令 XCH A,Rn ;ARn XCH A,Ri ;A(Ri) XCH A,d

11、ir ;A(dir) 2) 半字节交换指令 XCHD A,Ri ;A03(Ri)03 SWAP A ;A47A03,4. 堆栈操作指令 入栈指令:PUSH dir ;SPSP+1,(SP)(dir ) 出栈指令:POP dir ;(dir )(SP),SPSP-1,1. 以A为目的操作数的算术、逻辑运算指令(24条),3.2.2 算术运算和逻辑运算指令,2. 以dir为目的操作数逻辑运算指令(6条),与 ANL 或 ORL 异或 XRL,3. 加1、减1指令,4. 十进制调整指令 DA A ;仅对存于A中的加法结果进行十进制调整,若需完成十进制减法运算,则应变减法运算为补码的加法运算即可,其减

12、数X的补码通过 (99-X)+1再DA A后得到。,原则:和低4位大于9或有半进位,则低4位加6 和高4位大于9或有 进位,则高4位加6,例:(DATA)-(DATA+1)=(DATA+2) Y-X=Y-X+100 - 有效位为2位十进制,模为100 =Y+(99-X)+1,5. 乘、除法指令,MUL AB,;ABBA,DIV AB,;AB商在A中,余数在B中,6. 专对A的指令,CPL A,CLR A,; 0 A,MOV A,#99H DA A CLR C ADD A,DATA SUBB A,DATA+1 DA A ADD A,#1 MOV DATA+2,A,RR A,RL A,RLC A,

13、RRC A,移位指令(仅对 A ),1.调用程序和返回类指令 1)长调用 LCALL addr16 ;addr16PC015 指令功能同80X86中的CALL,调用范围64KB全部空间,指令的机器码为三字节。 2)短调用 ACALL addr11 ;addr11PC010 指令的功能同前,主要区别为: addr11PC010,而PC1115保持原值不变,故其调用范围为2KB,即子程序入口距当前PC不得超过2KB地址范围。本指令的机器码为二字节。,3.2.3 控制转移类指令,3)子程序返回指令(从栈顶弹出断点到PC) RET ;从调用子程序返回。 RETI ;从中断服务程序返回并恢复 中断优先级

14、状态触发器。 2. 转移指令 1)无条件转移指令 (1)短转移 AJMP addr11 ;addr11PC010 转移范围:2KB 机器码为2字节,(2)长转移 LJMP addr16 ;addr16PC015 转移范围:64KB 机器码为3字节。 (3)间接转移 JMP A+DPTR ;A+DPTRPC 分析下列程序段,说出当A分别为0和2时,程序转置何处?该程序段的功能是什么? MOV DPTR,#TABLE JMP A+DPTR TABLE: AJMP PROC0 AJMP PROC1 AJMP PROC2 AJMP PROC3,(4)无条件相对转移 SJMP rel ;PC+relPC

15、, 即As2relPC,机器码为2字节 As为源地址(本指令的首地址),执行本指令时当前PCAs+2,rel 为转移的偏移量,转移可以向前转(目的地址小于源地址),也可以向后转(目的地址大于源地址),因此偏移量rel 是 1 字节有符号数,用补码表示(128127),所以指令转移范围在离源地址As的126129字节之间。,2)条件转移指令 (1)累加器为零(非零)转移 JZ/JNZ rel ;A=0/(A0) 则转移,否则顺序 执行程序 (2)减 1 不等于零转移 DJNZ Rn/dir,rel 功能为:Rn(dir)-1Rn(dir) 相减结果0转, 否则顺序执行程序,(3)比较转移指令 C

16、JNE A,dir,rel CJNE A,#data,rel CJNE Rn,#data,rel CJNE Ri,#data,rel,操作数1不等于操作数2则转,否则顺序执行。,1,MOV DATA+2,#0FFH MOV A,DATA CJNE A,DATA+1,NEXT NEXT: JC NEXT1 MOV DATA+2,#1 NEXT1:RET,1. 位传送指令 MOV C,bit ;(bit)CY MOV bit,C ;CYbit 2. 位状态控制指令 CLR C ;0CY CLR bit ;0bit SETB C ;1CY SETB bit ;1bit CPL C ;CYCY CPL

17、 bit ;bitbit,3.2.4 位操作指令,4.位转移 位转移根据位的值决定转移,均为相对转移指令。 JC rel ;CY=1,则转移,否则顺序执行程序 JNC rel ;CY=0, 则转移,否则顺序执行程序 JB bit,rel ;(bit)=1,则转移,否则顺序执行程序 JNB bit,rel ;(bit)=0,则转移,否则顺序执行程序 JBC bit,rel ;(bit)=1,则转移,且该位清零,否则 顺序执行程序,1.定义: 汇编控制指令,没有指令代码,不能被CPU执行,只用于汇编过程,为汇编程序提供汇编信息。 2.常用伪指令 (1)ORG ORG是设置起始地址伪指令,其格式是:

18、 ORG16位地址或标号 (2)END END是结束汇编伪指令,其格式是: END (3)DB DB是定义字节伪指令,其格式是: 标号: DB 字节型数表 (4)DW DW是定义字伪指令,其格式是: 标号:DW 字型数表,3.3 伪指令,(5)DS DS是定义存储空间伪指令,其格式是: 标号:DS 表达式 (6)EQU EQU是赋值伪指令,其格式是: 字符名称EQU数据或汇编符号 (7)DATA DATA是数据地址赋值伪指令,其格式是: 字符名称DATA表达式 (8)BIT BIT是位地址赋值伪指令,其格式是: 字符名称BIT位地址 详见表3.3 MCS-51中的伪指令,进制间的转换,1.十进

19、制二进制(整数),任何十进制数有: dn-110n-1 dn-210n-2 d1101 d0100 (dn-110 dn-2)10 d1)10 d0,规律: di10 di-1 (i=1,2,n-1),按二进制运算规则运算则得二进制数,3.4 程序设计举例,例:将位十进制数D3D2D1D0转换成二进制数,设位 十进制数D3D2D1D0按分离BCD码形式存放,要求结 果的高位存放在R3中,结果的低位存放在R2中。,方法:D3D2D1D0=(010+D3)10+D2)10D1)10+D0 结果:16位二进制数,流程:,MOVA,R2 MOVB,#0AH MULAB MOVR2,A MOVA,B X

20、CHA,R3 MOVB,#0AH MULAB ADDA,R3 MOVR3,A RET,MUL10:,结果单元乘10子程序,由于4位10进制(9999)小于16位2进制(65535),所以转换结果不会大于16位,MOV R0,#DATA MOV R7,#03H MOV A,R0 MOV R2,A MOV R3,#0 ACALL MUL10 INC R0 MOV A, R0 ADD A,R2 MOV R2,A,MOV A,R3 ADDC A,#0 MOV R3,A DJNZ R7,BCDB1 RET,BCDB:,BCDB1:,2. 十进制二进制(小数),10进制乘2取整(取溢出),例:0.625

21、= 2-1+2-3 = 0.10100000B,a.小数点位数由乘2次数定,结果单元字节数 也由此定,b.第一次的整数权最高=2-1,c.乘2是10进制的乘2,自身相加再DA A调整,D = b-12-1+ b-22-2b-m2-m,例:设入口时10进制数在A中,要求结果放在R2中(8位二进制小数),BCDBP: MOV R2,#0 MOV R6,#8 BCDBP1:ADD A,ACC DA A XCH A,R2 RLC A XCH A,R2 DJNZ R6,BCDBP1 RET,;结果单元清0,;次数初始,;102,;将整数移入结果单元,溢出在进位位中,3. 二进制十进制(整数),按权展开,以8位为例: b7

温馨提示

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

最新文档

评论

0/150

提交评论