单片机原理与应用系统设计第03章 指令系统-02_第1页
单片机原理与应用系统设计第03章 指令系统-02_第2页
单片机原理与应用系统设计第03章 指令系统-02_第3页
单片机原理与应用系统设计第03章 指令系统-02_第4页
单片机原理与应用系统设计第03章 指令系统-02_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

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

文档简介

1、第3章 指令系统 单片机原理与应用系统设计 电子工业出版社 , 2009.7 欧伟明 何静 凌云 刘剑 等编著8/14/20221本章主要内容 MCS51单片机指令概述 7种寻址方式 分类介绍89S51单片机的指令系统 8/14/202223.1 MCS51单片机指令概述 指令格式 符号说明 8/14/202233.1.1 指令格式指令的基本格式 :例如,工作寄存器向累加器传送数据指令汇编语言指令为:MOV A, Rn ; A为目的操作数,Rn为源操作数 机器码指令为 :1110 1rrr ; rrr = 000111,分别表示R0 R7 8/14/202243.1.2 符号说明 在编写汇编语

2、言源程序时,字母符号是不区分大小写的。在本书中,汇编语言源程序一般采用大写字母。汇编语言源程序符号说明请参见教材第 页。8/14/202253.2 寻址方式 寻找操作数或指令的地址的方式称为寻址方式。 寄存器寻址方式 直接寻址方式 寄存器间接寻址方式 立即寻址方式 变址寻址方式 相对寻址方式 位寻址方式 8/14/202263.2.1 寄存器寻址方式寄存器寻址时,指令中的操作数为某一寄存器的内容,指定了寄存器,也就指定了操作数。 寄存器包括: 工作寄存器R0R7 部分特殊功能寄存器,A、AB寄存器对、DPTR等例如,指令 INC R0; R0 (R0)+1 8/14/202273.2.2 直接

3、寻址方式直接寻址时,指令中的操作数部分直接给出了操作数的地址。 寻址范围只限于片内RAM : 低128个存储单元,8-bit二进制数表示地址。 特殊功能寄存器,用直接地址或称号表示。例如,指令 MOV A, 30H ; A (30H) 8/14/202283.2.3 寄存器间接寻址方式寄存器间接寻址时,指令中给出的寄存器为地址指针。 寻址范围: 片内和片外RAM 256单元,用R0或R1间接寻址。 片外RAM 65536单元,用DPTR间接寻址。 例如:MOV A, RiMOVX A, Ri MOVX DPTR, A 8/14/202293.2.4 立即寻址方式操作数直接包含在指令中,这种给定

4、操作数的方式称为立即寻址方式。 寻址范围: 仅限于程序存储器空间。 例如: MOV A, #18H ;将立即数18H送到累加器A MOV DPTR, #5678H ; DPH #56H,DPL #78H 8/14/2022103.2.5 变址寻址方式变址寻址方式是以程序计数器PC或数据指针DPTR作为基址寄存器,以累加器A作为变址寄存器,它们两者内容之和为有效地址。 寻址范围: 程序存储器空间。 变址寻址方式的指令只有3条: MOVC A, A+DPTR; 查表指令 MOVC A, A+PC; 查表指令 JMP A+DPTR; 散转指令8/14/2022113.2.6 相对寻址方式相对寻址是以

5、PC的相对值为基地址,加上指令中所给定的偏移量,形成有效的转移地址。 目的地址 = 转移指令所在地址 +转移指令的字节数 +偏移量rel例如,指令 SJMP rel ; PC (PC)+2+rel 8/14/2022123.2.7 位寻址方式位寻址时,操作数是二进制数表示的地址,其位地址出现在指令中。 寻址范围: 片内RAM中的位寻址区。字节地址为20H2FH,位地址为 00H7FH ,共16字节128-bit 。 特殊功能寄存器的可寻址位 。例如,指令 CLR bit ; 地址为bit的位单元清0 8/14/2022133.3 89S51单片机的指令系统共有111条指令,分为5大类: 数据传

6、送类指令(29条) 算术运算类指令(24条) 逻辑运算及移位类指令(24条) 控制转移类指令(17条) 位操作类指令(17条) 8/14/2022143.3.1 数据传送类指令语句格式: MOV , 在传送指令中,有从右向左传送数据的约定,即指令的右边操作数是源操作数,表达的是数据的来源,而左边的操作数是目的操作数,表达的是传送数据的目的地址。 源操作数:累加器A、工作寄存器Rn、直接地址direct、间址寄存器、立即数。 目的操作数:累加器A、工作寄存器Rn、直接地址direct、间址寄存器。 除了奇偶标志位P外,数据传送类指令一般不影响程序状态字PSW的其他标志位,当然,直接访问PSW的指

7、令除外。8/14/202215一般传送指令 16位传送 将源操作数data16(通常是地址常数)送入目的操作数DPTR中。例如: MOV DPTR,#1234H 结果为: (DPH)=12H,(DPL)=34H。8/14/202216 8位传送 data不能用作目的字节; 源字节与目的字节不相同(除direct外); 寄存器与寄存器、寄存器间址之间不相互传送。传送关系目的源操作数AARnRndirectdirectRiRi#data8/14/202217 以A为目的 例:若(R1)= 20H,(20H)= 55H 执行 MOV A,R1MOV A,RndirectRi#data结果:(A)=

8、55H。8/14/202218 以Rn 为目的 例:若(50H)= 40H 执行 MOV R6,50H MOV Rn,Adirect#data结果:(R6)= 40H。8/14/202219 以direct 为目的 例:若(R1)=50H,(50H)=18H 执行MOV 40H,R1 结果:(40H)=18H。 MOV direct,Rndirect1Ri#dataA8/14/202220 以Ri为目的 例:若(R1)=30H,(A)=20H 执行 MOV R1,A结果:(30H)=20HMOV Ri,Adirect#data8/14/202221 ROM查表 2. MOVC A,A+PC 以

9、PC的当前值与偏移量之和作为程序存储器地址,将该地址单元的内容传送到A。指令执行后PC的内容不变。 特殊传送指令1. MOVC A,A+DPTR 以DPTR与偏移量之和作为程序存储器地址,将该地址单元的内容传送到A。指令执行后DPTR的内容不变。8/14/202222 读写片外RAM 1. 读片外RAM MOVX A,DPTR MOVX A,Ri2. 写片外RAM MOVX DPTR,A MOVX Ri,A8/14/202223 堆栈操作3. 操作 PUSH direct POP direct1. 原则:向地址高端生长,后进先出2. SP :指向栈顶(活动端),复位值07H例:若(SP)=07

10、H,(40H)=88H 执行 PUSH 40H 结果:(SP)=08H,(08H)=88H。8/14/202224 数据交换例:若(R0)=80H,(A)=20H。执行 XCH A,R0交换类指令, 传送是双向的1. 字节交换XCH A,RndirectRi结果:(A)=80H,(R0)=20H。8/14/2022252. 半字节交换 例1:若(R0)30H,(30H)67H, (A)20H。 执行 XCHD A,R0 后, (A)27H,(30H)60H。 XCHD A,Ri SWAP A例2:若(A)30H,执行SWAP A后,(A)03H。8/14/2022263.3.2 算术运算类指令

11、 89S51指令系统具有较强的加、减、乘、除四则运算功能,但只有8bits数据运算指令,没有16bits数据运算指令。 共有24条算术运算类指令。8/14/2022271. 加法类指令 不带进位加影响:PSW的Cy、AC、OV、PADD A,RndirectRi#data注:D7、D6位只有一个有进位时,(OV)= 1。例如,两个正数相加结果为负数或两个负数相加结果为正数时属于错误结果,此时(OV)= 1。8/14/202228 带进位加 注释: 1. 源操作数与A的内容相加再与Cy相加,结果送入目的操作数A中。ADDC A,RndirectRi#data2. Cy是在该指令执行之前已存在的值

12、。8/14/202229 加1指令 源操作数的内容加 1 ,结果再送回原单元。这些指令中仅 INC A 影响P标志。INC RndirectRiDPTRA8/14/202230 十进制调整指令 注释: 1. 当A中低4位数出现了非BCD码或低4位产生进位(AC=1),则在低4位加6。2. 当A中高4位数出现了非BCD码或高4位产生进位(Cy=1),则在高4位加6。 对A中刚进行的2个BCD码加法的结果调整。 DA A3. 调整后,Cy表示结果的百位值。 8/14/2022312. 减法类指令 不带借位减影响:PSW的Cy、AC、OV、P注: D7、D6位只有一个有借位时,(OV)=1。如要用此

13、组指令完成不带借位减法,只需先清“0”标志位Cy。SUBB A,RndirectRi#data8/14/202232 减1指令 源操作数的内容减 1 ,结果再送回原单元。这些指令中仅 DEC A 影响P标志。DEC RndirectRiA8/14/2022333. 乘法MUL AB 例: 若(A)=50H,(B)=A0H,执行指令 MUL AB 之后,(A)=00H,(B)=32H,(OV)=1,(Cy)=0。 当乘积大于FFH时,溢出标志位(OV)=1。 标志Cy总是被清“0”。X ABAB乘数被乘数积8/14/2022344. 除法例: 若(A)=FBH(251),(B)=12H(18),

14、执行指令 DIV AB 之后,(A)=0DH,(B)=11H,(OV)=0,(Cy)=0。DIV AB 除数为0,商的A和B内容不确定,且(OV)=1 。 标志Cy总是被清0。X ABAB除数被除数整数部分商 余数部分8/14/2022353.3.3 逻辑运算及移位类指令 逻辑运算:与、或、异或、清“0”和取反 A清“0”操作对P标志有影响。 对A循环移位1. 方向:左、右2. Cy:带、不带 共24条指令。 8/14/202236 逻辑与 源操作数与直接地址单元内容相与 例: 若(A)=C3H,(R0)=AAH,执行指令 ANL A,R0 之后,(A)=82H。ANL direct,A#da

15、taANL A,RndirectRi#data 源操作数与累加器A的内容相与8/14/202237 逻辑或 源操作数与直接地址单元内容相或 例: 若(A)=C3H,(R0)=55H,执行指令ORL A,R0 之后,(A)=D7H。ORL direct,A#dataORL A,RndirectRi#data 源操作数与累加器A的内容相或8/14/202238 逻辑异或 源操作数与直接地址单元内容相异或 例 若(A)=C3H,(R0)=AAH,执行指令 XRL A,R0 之后,(A)=69H。XRL direct,A#dataXRL A,RndirectRi#data 源操作数与累加器A的内容相异

16、或8/14/202239 逻辑与 源操作数与直接地址单元内容相与 例: 若(A)=C3H,(R0)=AAH,执行指令 ANL A,R0 之后,(A)=82H。ANL direct,A#dataANL A,RndirectRi#data 源操作数与累加器A的内容相与8/14/202240 累加器清“0”和取反 把A的内容取反,结果仍在A中。CPL ACLR A例 若(A)=A5H,执行指令 CLR A 之后,(A)=00H。 把A的内容清“0” ,结果仍在A中。8/14/202241 累加器循环移位 8/14/2022423.3.4 控制转移类指令(17条) 程序执行是顺序的,改变程序执行顺序,

17、称作程序转移。 控制程序转移采用转移指令无条件转移条件转移子程序调用与返回8/14/2022431. 无条件转移指令 短跳转 AJMP addr11 注释:1. PC先指向AJMP的下一条指令,再把11位地址码传送到PC100,PC1511不变。2. 当前PC值(下条指令地址)高5位,可确定32个2KB段之一。因此,AJMP转移范围为包含AJMP下条指令在内的2KB区间。8/14/2022441. 无条件转移指令 长跳转 LJMP addr16指令第二、三字节地址码分别装入PC的高8位和低8位中。可转到64KB的ROM空间的任何单元。例:若“NEWADD”表示转移目标地址1234H。执行 LJ

18、MP NEWADD 时,目标地址将装入PC中,程序转向地址 1234H 处运行。8/14/2022451. 无条件转移指令 相对转移 SJMP rel rel 是目标地址的标号,由汇编程序自动计算,并填入指令代码中。 第二字节为 rel,(补码),00H7FH为正向转移,80HFFH(1281)反向转移。 例:若“NEWADD”表示地址0123H,PC当前值为0100H。执行 SJMP NEWADD 后,程序转向 0123H 执行(此时re l= 0123H(01002)= 21H)。8/14/2022461. 无条件转移指令 散转移 JMP A+DPTR转移地址由DPTR和A相加形成。例程:

19、MOV DPTR,#TABLE JMP A+DPTRTABLE:AJMP ROUT0; (A)=00H 时 AJMP ROUT1; (A)=02H 时 AJMP ROUT2; (A)=04H 时 AJMP ROUT3; (A)=06H 时8/14/2022472. 条件转移指令累加器判0转移例:若A原来为00H,则 JNZ L1 ;程序往下执行 INC A ; JNZ L2 ;程序转向L2 处执行 JZ rel A的内容为 0转移JNZ rel A的内容不为 0转移8/14/2022482. 条件转移指令 比较不相等转移 对目的字节与源字节比较,不等则转移 比较时影响进位标志Cy,左操作数右操

20、作数。 若目的字节等于源字节,程序将继续往下执行。CJNE A,direct,rel CJNE ARnRi,#data,rel 8/14/2022492. 条件转移指令 减1不为0转移 每执行一次,循环控制单元减1,并判其是否为 0 不为0,则转移到目标地址继续循环; 为0,则结束循环,程序往下执行。DJNZ Rn,rel DJNZ direct ,rel 8/14/2022503. 调用与返回指令 子程序调用指令 子程序的短调用和长调用 目标地址形成方式与AJMP和LJMP相似 不影响任何标志 ACALL addr11 LCALL addr16 8/14/2022513. 调用与返回指令 返

21、回指令 RET 从堆栈中弹出压入堆栈保护的断点地址,并送入指令计数器PC,返回到断点处继续执行。 RETI 专用于中断服务程序返回,除返回中断断点处执行主程序以外,并有清除内部相应的中断状态寄存器(以保证正确的中断逻辑)的功能。RET RETI 8/14/2022524. 空操作指令NOP 1. 不产生任何控制操作,但: PC的内容加1 消耗1个机器周期 程序空间上占用一个字节 2. 常用来实现较短时间的延时。8/14/2022533.3.5 位操作类指令 以位为单位进行的各种操作。位地址形式:(表示PSW中的位5 ) 直接位地址(如,0D5H) 点操作符(如,0D0H.5、PSW.5等) 位

22、名称(如,F0) 伪指令定义(如,MYFLAG BIT F0)位操作指令中,位累加器要用字符“C”表示。注:在位操作指令中Cy与具体的直接位地址D7H对应。 8/14/202254 位传送指令 MOV bit,C MOV C ,bit 指定位地址中内容与Cy的内容的相互传送 例:若(Cy)=1,(P3)=1100 0101B,(P1)=0011 0101B。执行以下指令: MOV P1.3,C MOV C,P3.3 MOV P1.2,C 结果:(Cy)=0,P3的内容未变,P1的内容变为 0011 1001B。8/14/202255 位清“0”指令 位累加器Cy清“0” 例: 若(P1)=10

23、01 1101B。执行指令CLR P1.3 后,结果为:( P1 )=1001 0101B。CLR C CLR bit 位地址内容清“0”8/14/202256 位 置“1”指令 例 若(P1)=1001 1100B。执行指令SETB P1.0 后,(P1)1001 1101B。 位累加器Cy置“1”SETB C SETB bit 位地址内容置“1”8/14/202257 位逻辑与指令 例: 若(P1)=1001 1100B,(Cy)1。执行指令ANL C, P1.0 后,结果为:P1 内容不变,而(Cy)0。位地址单元内容与位累加器内容“与”ANL C,bit 位地址单元内容取反后的值与位累

24、加器内容“与”ANL C,/bit 8/14/202258 位逻辑或指令 位地址单元内容取反后的值与位累加器内容“或” 位地址单元内容与位累加器内容“或”ORL C,bit ORL C,/bit 位取反CPL C CPL bit 8/14/202259 判 C y 转移指令 当(Cy)=1,转向PC当前值与rel之和的目标地址执行,否则程序顺序执行。 JC rel JNC rel 当(Cy)=0,转向PC当前值与rel之和的目标地址去执行,否则程序顺序执行。 8/14/202260 判位 bit 转移指令 JB bit,rel JBC bit,rel JNB bit,rel 当( bit )=1,转向PC当前值与rel之和的目标地址执行,否则程序顺序执行。 当( bit )=0,转向PC当前值与rel之和的目标地址执行,否则程序顺序执行。 与上面指

温馨提示

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

评论

0/150

提交评论