第3章 指令系统(8学时)_第1页
第3章 指令系统(8学时)_第2页
第3章 指令系统(8学时)_第3页
第3章 指令系统(8学时)_第4页
第3章 指令系统(8学时)_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

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

文档简介

1、,0000H,FFFFH,0000H,FFFFH,ROM,内RAM,外RAM,00H,FFH,寄存器区,位寻址区,数据缓冲区,SFR,20H,30H,80H,E0H,A,第3章 MCS51指令系统,指令的格式: LOOP: MOV A, R0 ;将R0的内容送A 标号 操作码 第一操作数 第二操作数 注释 (目的操作数) (源操作数) 注:白色的内容不是必须的,3.2 数据传输类指令1. 以累加器A为目的操作数的指令,MOV A, data ; A data MOV A, Rn ; n=07, A (Rn) MOV A, Ri ; i=0,1 , A (Ri) MOV A, direct ;

2、A (Rn) direct为内部RAM或SFR地址 注: MOV A, Ri 以Ri的内容为地址 ,把该地址中 的内容送到A中去。A (Ri) MOV A, R0 MOV A, #20H ; (A) = 20H MOV A, 20H ; (A) = (20H) ,注意两组指令不同点,MOV R0, #30H MOV 30H, #60H MOV A, R0 (A)=,2. 以Rn为目的操作数的指令,MOV Rn, A ;Rn (A) , n=07 MOV Rn , direct ;Rn (direct) MOV Rn ,data ;Rn data,3.以直接地址为目的操作数的指令,MOV dir

3、ect, A ;direct (A) MOV direct, Rn ; direct (Rn) , n=07 MOV direct, Ri ; direct ( Ri ) ) , i=0,1 MOV direct, direct ;direct (direct) MOV direct, #data ;direct data,4. 以寄存器间接地址为目的操作数指令,MOV Ri, A ;(Ri) (A) ,i=0,1 MOV Ri , direct ;(Ri) (direct) MOV Ri ,data ;(Ri) data,应用举例1,MOV P1, #0FEH ; 11111110B 可以使

4、P1.0上的发光二极管点亮 MOV P1, #0F0H ; 11110000B 可以使P1口上的上面4个发光二极管点亮,8段数码管显示,MOV P1, #00H ; 显示 8. MOV P1, #0F8H ; 显示 7 MOV P1, #88H ; 显示 A,应用举例2,一个引脚的高低电平,可以通过“光电耦合器”控制继电器,从而以“弱电”控制“强电”。,3.1 寻址方式,指令的格式: LOOP: MOV A, R0 ;将R0的内容送A 标号 操作码 第一操作数 第二操作数 注释 (目的操作数) (源操作数) 注:白色的内容不是必须的 寻址方式:寻找(或确定)操作数所在单元地址的方式。 寻址方式

5、越多,计算机寻址能力越强,但指令系统也越复杂。 说明:以下讨论的寻址方式都是针对源操作数的。但实际上目的操作数也有寻址问题。,3.1.1 寄存器寻址 MOV A, Rn 操作数在寄存器中,如R0R7,A、B、Cy(位)、DPTR 3.1.2 直接寻址 MOV A, 40H 操作数直接以单元地址形式给出(也可以寄存器名称形式给出,但A B DPTR 除外) 如: MOV A, P0 ; MOV R0, TH0 3.1.3 寄存器间接寻址 MOV A, R1 操作数是通过寄存器间接得到的。 3.1.4 立即寻址 MOV A, #40H 操作数在指令中直接给出。 3.1.5 基址寄存器加变址寄存器寻

6、址 以DPTR或PC为基址寄存器,以A为变址寄存器, 以两者相加形成的16位地址为操作数的地址。 MOVC A, A+DPTR MOVC A, A+PC,5. 16位数据传输指令,MOV DPTR, #data16; DPTR data16 DPTR-数据指针,为SFR中(DPH)、(DPL) MOV DPTR, #2010H 相当于:MOV DPH, #20H MOV DPL, #10H,6. 堆栈操作指令,退栈指令 POP direct 如: (SP)=62H, (62H)=70H ,(61H)=30H 时,执行 POP DPH ;(SP) DPH, (SP)1=61HSP POP DPH

7、L ;(SP) DPL, (SP)1=60HSP 结果: (DPTR)=7030H, (SP)=60H,进栈指令 PUSH direct 如: (SP)=60H, (A)=30H ,(B)=70H 时,执行 PUSH Acc ;(SP)+1=61HSP, (A) 61H PUSH B ;(SP)+1=62HSP, (B) 62H 结果: (61H)=30H, (62H)=70H, (SP)=62H,堆栈的存储原则:先进后出,(SP),(SP+1),(SP+2),(SP+3),7. 累加器A与外部数据传输指令,MOVX A, DPTR ; A (DPTR) 地址范围64K MOVX A, Ri

8、; A (Ri) 地址范围0255 MOVX DPTR, A ; (DPTR) (A) MOVX Ri , A ; (Ri) (A),8. 查表指令,(1)MOVC A, A+DPTR; A (A)+(DPTR) 例: (DPTR)=0300H, (A)02H ROM中 (0302H)=55H 执行: MOVC A, A+DPTR 结果:(A)=55H,(2)MOVC A, A+PC A (A)+(pc),PC程序指针,指向下一条指令的地址 例:根据A中的内容(09)查平方表,MOVC A, A+PC 例子:,地址 机器码 源程序 ORG 0000H0000 7403 MOV A, #03H0

9、002 83 MOVC A, A+PC0003 00 DB 00H0004 01 DB 01H0005 04 DB 04H0006 09 DB 09H0007 10 DB 10H0008 19 DB 19H0009 24 DB 24H 000A 31 DB 31H000B 40 DB 40H000C 51 DB 51H (顺便讲解如何查机器码)END,字节交换指令,XCH A , Rn ; (A) (Ri) XCH A , direct ; (A) (direct) XCH A , Ri ; (A) (Ri) 例: (A)=80H, (R7)=97H 执行:XCH A , R7 结果:(A)=

10、97H, (R7)=80H 例:将片内RAM 60H单元与61H单元的数据交换。 XCH 60H,61H 对吗?,习题,1MOV A,#1000H;A1000H 2MOVX A,1000H;A(1000H)片外RAM 3MOVC A,1000H;A(1000H)片外ROM 4MOVX 60H,A;片外RAM(60H)A 5MOV R0,60H;片内RAM:(61H)(60H) MOV 61H,R0 6. XCH R1,R2 ;R1R2 7. MOVX DPTR,#2000H ;DPTR2000H 8. MOVX 60H,DPTR;片内RAM片外RAM,下列指令是否错误,如错请改正:,10.半字

11、节交换指令,XCHD A, Ri ;(A)0-3 (Ri ) 0-3 例:(R0)=60H, (60H)=3EH, (A)=59H 执行: XCHD A, R0 结果:(A) 5E H (60H)39 H,3.2.2 算术操作类指令,1. 加法指令(Addtion) 2. 带进位加法指令 3. 加1指令 (Increase) 4. 十进制调整指令 5. 带借位减法指令(Subtraction) 6. 减1指令(Decrease) 7. 乘法指令(Multiplication) 8. 除法指令(Division),加法指令(Addtion),ADD A, Rn ; A(A)+(Rn) ADD A

12、, Ri ;A(A)+((Ri)) ADD A, direct ;A(A)+(direct) ADD A, data ;A(A)+#data 对标志位的影响 Cy - 进位位 AC - 半进位位 OV - 溢出位,PSW寄存器,Cy:进位标志位 AC:辅助进位标志位 F0: 供用户使用的标志位 OV:溢出标志位 P:奇偶标志位 A中数据的奇偶性。当1的个数为奇数,P=1,否则P=0。 RS1 RS0 0 0 区0(地址:00H07H) 0 1 区1(地址:08H0FH) 1 0 区2(地址:10H17H) 1 1 区3(地址:18H1FH),2. 带进位加法指令,ADDC A, Rn ; A(

13、A)+(Rn)+(Cy) ADDC A, Ri ;A(A)+(Ri ) +(Cy) ADDC A, direct ;A(A)+(direct) +(Cy) ADDC A, data ;A(A)+#data +(Cy) 对标志位的影响与ADD相同,加1指令,INC A ;A(A)+1 INC Ri ;Ri(A)+1 INC direct ;direct(direct)+1 INC Ri ;(Ri)(Ri)+1 INC DPTR ;DPTR(DPTR)+1 对标志位不产生影响 若: (A)0FFH , (Cy)=0 执行: INC A 结果:(A)00H , (Cy)=0,十进制调整指令,DA A

14、 用途:紧跟在BCD码加法指令(不包括减法)之后,进行十进制调整。 (96H 为压缩BCD码,表示十位为9, 个位为6, ) 如两BCD码加: MOV A, #35H ADD A, #46H (A)=7BH, 并不是 81H 但: DA A 后, (A)81H,带借位减法指令(Subtraction),SUBB A, Rn ; A(A)-(Rn)-(Cy) SUBB A, Ri ;A(A)-(Ri) ) -(Cy) SUBB A, direct ;A(A)-(direct) -(Cy) SUBB A, data ;A(A)-#data -(Cy) 对标志位的影响 Cy - 进位位 AC - 半

15、进位位 OV - 溢出位,减1指令(Decrease),DEC A ;A(A)1 DEC Ri ;Ri(A)1 DEC direct ;direct(direct)1 DEC Ri ;(Ri)(Ri)1 对标志位不产生影响 若: (A)00H , (Cy)=0 执行: DEC A 结果:(A)0FFH , (Cy)=0 无 DEC DPTR 指令,乘法指令(Multiplication),MUL AB ; (A)(B) 低8位A 高8位B A、B中都是无符号整数 如果积大于255,OV1,否则OV0; 进位标志总是清零 Cy0,除法指令(Division),DIV AB ; (A)(B) 商

16、A 余数B A、B中都是无符号整数 如果除数B为“0”,OV1,否则OV0; 进位标志总是清零 Cy0,3.2.3 逻辑运算指令1. 简单逻辑操作指令,CLR A ; A “0” CPL A ; A A SWAP A ; A03 A47 例: (A)=3AH, CPL A, (A)=0C5H 0011 1010B 1100 0101B (A)=3AH, SWAP A, (A)=0A3H,2. 循环指令,左循环指令 (Rotate Accumulator Left) RL A 例(A)6CH = 0110 1100B RL A (A)=1101 1000B=0D8H,带进位左循环指令(Rotat

17、e Accumulator Left through Carry flag),RLC A 例(A)6CH = 0110 1100B, (C) =1 RLC A (A)=1101 1001B=0D9H,右循环指令(Rotate Accumulator Right),RR A 例(A)6CH = 0110 1100B RR A (A)=0011 0110B=36H,带进位右循环指令(Rotate A Right with C),RRC A 例(A)6CH = 0110 1100B, (C) =1 RRC A (A)=1011 0110B=0B6H,2. 逻辑与指令,ANL A, Rn ANL A,

18、 direct ANL A, data ANL A, Ri ANL direct, A ANL direct, data “与” , “有0即0,全1为1” 0000 0111 ) 1111 1101 0000 0101 B 05H,3. 逻辑或指令,ORL A, Rn ORL A, direct ORL A, data ORL A, Ri ORL direct, A ORL direct, data “或” , “有1即1,全0为0” 0000 0110 ) 0110 1101 0110 1111 B 6FH,4. 逻辑异或指令,XRL A, Rn XRL A, direct XRL A,

19、data XRL A, Ri XRL direct, A XRL direct, data “异或” , “相异为1,相同为0” 0000 0110 ) 0110 1101 0110 1011 B 6BH,例 ( A)=01B,表示随机状态,为1或0,执行下述一组指令执行后A的值如何? XRL A,#0C0H;将累加器A的内容D7、D6取反 0 1 ORL A,#03H;将累加器A的内容D1、D0置1 1 1 0 1 0 0 0 0 ANL A,#0E7H;将累加器A的内容D4、D3清0 1 0 0 0 0 0 0 0 1 1 1 0 1 1 1 1 1 0 0 1 1 1 1 0 0 0 1

20、 1 解 :执行上述指令后,(A)=100011B。,习题1:如何将累加器A中的数据高4位清0,低位不变? 习题2:如何将寄存器R2中的数据奇数位取反,偶数位不变?,3.2.4 控制转移类指令1. 跳转指令,短跳指令 AJMP addr11 PCaddr11,跳转范围2k 长跳指令 LJMP addr16 PCaddr16,跳转范围64k 间接跳转指令 JMP A+DPTR PC(A)(DPTR),相对转移指令 SJMP rel,rel机器码的相对偏移量,为8位补码 转移范围:前128后127字节 rel(目的地址转移指令地址转移指令字节数)补 (目的地址PC当前值)补 编程时,可用标号代替转

21、移目的地址, rel 交给编译程序计算。 SJMP NEXT (或AJMP NEXT ,SJMP NEXT) NEXT: 原地踏步指令的指令: HERE: SJMP HERE 常写成: SJMP $,PC(PC)+2 PC(PC)+rel,地址 机器码 源程序 注释 ORG 0000H ; 整个程序起始地址 0000 20 00 30 LJMP MAIN ; 跳向主程序 ORG 0030H ; 主程序起始地址 0030 C3 MAIN: CLR C ; MAIN为程序标号 0031 E6 LOOP: MOV A , R0 0032 37 ADDC A, R1 0033 08 INC R0 00

22、34 DA FB DJNZ R1, LOOP ;相对转移 0036 80 03 SJMP NEXT 0038 78 03 MOV R0, #03H 003A 18 NEXT: DEC R0 003B 80FE SJMP $ ;HERE: SJMP HERE END ; 结束标记,程序中标号与地址之间的关系,2. 条件转移指令,JZ rel ;(A)0,转移 JNZ rel ;(A)0,转移,3. 比较不相等转移指令,CJNE A,#data,rel; (A)=#data,继续 C0 (A)#data, 转 C0 (A)#data, 转 C1 特点:只有时, C1 CJNE A,direct,rel CJNE Rn,#data,rel CJNE Ri,#data,rel,4

温馨提示

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

评论

0/150

提交评论