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

下载本文档

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

文档简介

1、第第3 3章章 89C5189C51的指令系统的指令系统 本章介绍本章介绍89C5189C51的的汇编语言汇编语言指令系统。指令系统。3.1 3.1 指令系统概述指令系统概述 MCS-51MCS-51的基本指令共的基本指令共111111条条: : 每条指令在程序存储器每条指令在程序存储器ROMROM中占据一定的中占据一定的空间空间,以字,以字节为单位。节为单位。按指令所占的字节来分:按指令所占的字节来分: (1) (1) 单字节单字节指令指令4949条;条; (2) (2) 双字节双字节指令指令4545条;条; (3) (3) 三字节三字节指令指令1717条。条。每条指令在执行时要花去一定的每

2、条指令在执行时要花去一定的时间时间,以机器周期,以机器周期为单位。为单位。按指令的执行时间来分按指令的执行时间来分: (1) (1) 1 1个机器周期个机器周期(1212个时钟振荡周期)指令个时钟振荡周期)指令6464条条 (2) (2) 2 2个机器周期个机器周期(2424个时钟振荡周期)指令个时钟振荡周期)指令4545条条 (3) (3) 4 4个机器周期个机器周期(4848个时钟振荡周期)个时钟振荡周期)只有乘、只有乘、 除两条指令的执行时间。除两条指令的执行时间。 12MHz12MHz晶振晶振: :机器周期为机器周期为1 1 s s。按指令的按指令的功能功能分类,可分为分类,可分为5

3、5大类:大类: 数据传送类(数据传送类(2929条);算术运算类(条);算术运算类(2424条)条) 逻辑运算及移位类(逻辑运算及移位类(2424);控制转移类();控制转移类(1717条)条) 位操作类(位操作类(1717条)条)标号:操作码标号:操作码 操作数;注释操作数;注释 3.2 3.2 指令格式指令格式 两部分组成,即两部分组成,即操作码操作码和和操作数操作数。 操作码操作码: :规定指令进行什么操作规定指令进行什么操作 操作数操作数: :指令操作的对象指令操作的对象方括符方括符 表示可选项表示可选项标号代表指令所在地址,标号代表指令所在地址,1-81-8个字母个字母/ /数字,数

4、字,“: :”结尾结尾 标号标号:操作码操作码 目的操作数目的操作数,源操作数源操作数;注释注释 START:MOV A,#30H START:MOV A,#30H ; ;将立即数将立即数30H30H传送至传送至A A中中 MOV DPTR,#5678H MOV DPTR,#5678H ; ;将立即数将立即数5678H5678H传送至传送至DPTRDPTR 标号:指令的符号地址。标号:指令的符号地址。 用于一段功能程序的识别标记或控制用于一段功能程序的识别标记或控制转移地址。转移地址。指令前的标号代表该指令的地址,指令前的标号代表该指令的地址, 是是用符号表示的地址用符号表示的地址。 一般用英

5、文字母和数字组成。一般用英文字母和数字组成。 标号必须用冒号标号必须用冒号“ :”与操作码分隔。与操作码分隔。 操作码:表示指令的操作功能。操作码:表示指令的操作功能。 操作码用助记符表示,操作码用助记符表示, 它它代表了指令代表了指令的操作功能的操作功能。 操作码是指令的必需部分,操作码是指令的必需部分, 是指令的核心,不可缺少。是指令的核心,不可缺少。 操作数:参加操作的数据或数据地址。操作数:参加操作的数据或数据地址。 操作数与操作码之间用空格分隔,操作数与操作数与操作码之间用空格分隔,操作数与操作数之间用逗号操作数之间用逗号“,”分隔。分隔。 操作数可以是操作数可以是数据数据,也可以是

6、,也可以是数据的地址数据的地址、数据地址的地址数据地址的地址或或操作数的其他信息操作数的其他信息。 操作数可分为目的操作数和源操作数。操作数可分为目的操作数和源操作数。 操作数可用二进制数、十进制数或十六进制操作数可用二进制数、十进制数或十六进制数表示。数表示。 操作数的个数可以是操作数的个数可以是0 03 3个。个。 注释:指令功能说明。注释:指令功能说明。 注释属于非必需项,是为便于阅读,注释属于非必需项,是为便于阅读,对指令功能作的说明和注解。对指令功能作的说明和注解。 注释必须以注释必须以“;”开始。开始。指令有单字节指令、双字节指令、三字节不同长指令有单字节指令、双字节指令、三字节不

7、同长度的指令,格式不同:度的指令,格式不同: (1 1)单字节指令:)单字节指令:操作码、操作数操作码、操作数 同在同在一个字一个字节中节中。 (2 2)双字节指令:)双字节指令:操作码操作码+ +操作数。操作数。 (3 3)三字节指令:)三字节指令:操作码操作码+ +操作数操作数+ +操作数。操作数。 3.3 3.3 指令系统的寻址方式指令系统的寻址方式寻址方式寻址方式就是在指令中就是在指令中说明操作数所在地址说明操作数所在地址的方法。的方法。共共7 7种种寻址方式。寻址方式。寄存器寻址寄存器寻址直接寻址直接寻址寄存器间接寻址寄存器间接寻址立即寻址立即寻址变址寻址变址寻址( (基址寄存器基址

8、寄存器+ +变址寄存器间接寻址变址寄存器间接寻址) )位寻址位寻址相对寻址相对寻址1 1寄存器寻址方式寄存器寻址方式 操作数在寄存器中操作数在寄存器中 MOV AMOV A,Rn Rn ;(;(RnRn)A A,n=0n=07 7 表示把寄存器表示把寄存器RnRn的内容传送给累加器的内容传送给累加器A A 寻址范围:寻址范围:(1 1)4 4组通用工作寄存区共组通用工作寄存区共3232个工作寄存器。个工作寄存器。(2 2)部分特殊功能寄存器,例如)部分特殊功能寄存器,例如A A、B B 以及数据指以及数据指针寄存器针寄存器DPTRDPTR等。等。MOV A,R0 MOV A,R0 ; ;将将R

9、0R0中的数据传送至中的数据传送至A A中中INC AINC AMUL ABMUL AB【例例】这些被寻址寄存器中的内容就是操作数这些被寻址寄存器中的内容就是操作数2 2直接寻址方式直接寻址方式 操作数直接以单元地址的形式给出:操作数直接以单元地址的形式给出: MOV AMOV A,40H40H 寻址范围:寻址范围: (1) (1) 内部内部RAMRAM的的128128个单元个单元(2) (2) 特殊功能寄存器。除了以单元地址的形式外特殊功能寄存器。除了以单元地址的形式外, ,还还可可用寄存器符号用寄存器符号的形式给出。例如:的形式给出。例如: MOV AMOV A,80H80H 与与 MOV

10、 AMOV A,P0P0是等价的是等价的。直接寻址是给出操作数的直接地址。直接寻址是给出操作数的直接地址。MOV A,3AH MOV A,3AH ;将内将内RAM 3AHRAM 3AH单元中的数据传送至单元中的数据传送至A A中中MOV A,P0 MOV A,P0 ;将特殊功能寄存器将特殊功能寄存器P0P0口中的数据传送至口中的数据传送至A A中中说明:说明:3AH3AH和和P0P0是以是以directdirect形式出现的直接地址形式出现的直接地址 访问特殊功能寄存器访问特殊功能寄存器SFRSFR只能采用直接寻址方式。只能采用直接寻址方式。3. 3. 寄存器间接寻址方式寄存器间接寻址方式 寄

11、存器中存放的是操作数的地址,寄存器中存放的是操作数的地址,在寄存器前加在寄存器前加前缀标志前缀标志“ ” 。访问访问内部内部RAMRAM或或外部外部RAMRAM的低的低256256个字节个字节时,时,只能采用只能采用R0R0或或R1R1作为作为间址寄存器间址寄存器。例如:。例如: MOV AMOV A,RiRi ;i=0i=0或或1 1 其中其中RiRi中的内容为中的内容为40H40H,把内部,把内部RAM40HRAM40H单元内容送单元内容送A A。寻址范围:寻址范围:(1 1)访问)访问内部内部RAMRAM低低128128个个单元,其通用形式为单元,其通用形式为RiRi(2 2)对)对外部

12、外部RAMRAM的的64K64K字节字节的间接寻址,例如:的间接寻址,例如: MOVX AMOVX A,DPTRDPTR(3 3)片外数据存储器的低)片外数据存储器的低256256字节字节 例如:例如:MOVX AMOVX A,RiRi(4 4)堆栈区)堆栈区 堆栈操作指令堆栈操作指令PUSHPUSH(压栈)和(压栈)和POPPOP(出栈)使用堆栈指针(出栈)使用堆栈指针(SPSP)作间址寄存器)作间址寄存器4 4立即寻址方式立即寻址方式 立即寻址是立即寻址是直接给出操作数直接给出操作数,操作数前有立即数符,操作数前有立即数符“ # # ”。【例例】ADD AADD A,#05H #05H ;

13、(A)(A)+(A)(A)+立即数立即数 05H05H注意:符号注意:符号“# #”表明其后跟的是立即数表明其后跟的是立即数, , 立即数立即数就是数字量本身。就是数字量本身。5 5变址寻址变址寻址 ( (基址寄存器加变址寄存器间址寻址方式基址寄存器加变址寄存器间址寻址方式) ) 本寻址方式是以本寻址方式是以DPTRDPTR或或PCPC作基址寄存器,以累加器作基址寄存器,以累加器A A作作为为变址寄存器变址寄存器。例如:例如:指令指令 MOVC AMOVC A,A+DPTRA+DPTR 其中其中A A的原有内容为的原有内容为05H05H,DPTRDPTR的内容为的内容为0400H0400H,该

14、指令执行的结果是把程序存储,该指令执行的结果是把程序存储器器0405H0405H单元的内容传送给单元的内容传送给A A。说明:说明: (1 1)本寻址方式是)本寻址方式是专门针对程序存储器专门针对程序存储器的寻址方式,寻的寻址方式,寻址范围可达到址范围可达到64KB64KB。(2 2)本寻址方式的指令只有本寻址方式的指令只有3 3条条:MOVC AMOVC A,A+DPTRA+DPTRMOVC AMOVC A,A+PCA+PCJMP A+DPTRJMP A+DPTR;将位地址;将位地址07H(07H(字节字节地址地址20H20H中最高位中最高位) )中的数据传送至进中的数据传送至进位位位位Cy

15、Cy。6. 6. 位寻址方式位寻址方式 位寻址是对内位寻址是对内RAMRAM和特殊功能寄存器中的可和特殊功能寄存器中的可寻址位进行操作的寻址方式。寻址位进行操作的寻址方式。MOV C,07HMOV C,07H 指令中直接给出了操作数所在的位地址。指令中直接给出了操作数所在的位地址。例:例: CLR P1.0 CLR P1.0 ;(P1.0) 0(P1.0) 0 SETB ACC.7 SETB ACC.7 ;(ACC.7) 1(ACC.7) 1 CPL C CPL C ;( C ) NOT( C )( C ) NOT( C )注意:注意: 1 1)位地址里的数据只可能是一个)位地址里的数据只可能

16、是一个 0 0 或或 1 1 2 2)有的位地址十分明确)有的位地址十分明确, ,如如 P1.0, ACC.7P1.0, ACC.7等等, ,有的位有的位地址则地址则“不太明确不太明确”,如:,如: MOV AMOV A,17H ; (A)(17H),17H17H ; (A)(17H),17H是是字节地址字节地址 MOV ACC.0MOV ACC.0,17H ;(ACC.0)(17H),17H ;(ACC.0)(17H),这里这里ACC.0 ACC.0 是是位地址位地址所以该指令中的所以该指令中的17H17H是是2222H H单元的第单元的第7 7位位7 7相对寻址方式相对寻址方式 在相对寻址

17、的转移指令中,给出了地址偏移量,以在相对寻址的转移指令中,给出了地址偏移量,以“relrel”表示,表示,即把即把PCPC的当前值加上偏移量就构成了程序转移的目的地址:的当前值加上偏移量就构成了程序转移的目的地址: 目的地址目的地址= =转移指令所在的地址转移指令所在的地址 + + 转移指令的字节数转移指令的字节数 + + relrel 偏移量偏移量relrel是一带符号的是一带符号的8 8位二进制数补码数位二进制数补码数。范围是:范围是:128 - +127128 - +127向向地址增加方向地址增加方向最大可转移(最大可转移(127+127+转移指令字节)个单元地址,转移指令字节)个单元地

18、址,向向地址减少方向地址减少方向最大可转移(最大可转移(128-128-转移指令字节)个单元地址。转移指令字节)个单元地址。 注意:注意:1 1)“当前当前PCPC值值”指程序中下一条指令所在的首地址,是一指程序中下一条指令所在的首地址,是一个个1616位数;位数;2 2)符号)符号“relrel”表示表示“偏移量偏移量”, ,是一个带符号的单字节数是一个带符号的单字节数, ,范围是范围是:-128:-128+127(80H+127(80H7FH)7FH)在实际编程中,在实际编程中,“relrel” 通常用标号代替通常用标号代替在实际编程中,在实际编程中,“relrel” 通常用标号代替通常用

19、标号代替例:例:SJMP LOOP1SJMP LOOP1例:例:2000H2000H:SJMP 08HSJMP 08H ; 原原PCPC值为值为2000H2000H;执行这条指令后的当前;执行这条指令后的当前PCPC值值为为2002H2002H,relrel为为08H08H。2002H+08H=200AH2002H+08H=200AH,转移目的地,转移目的地址为址为200AH200AH,程序就跳转至,程序就跳转至200AH200AH去执行了。去执行了。右图为右图为SJMP 08HSJMP 08H相对寻址相对寻址示意图。示意图。7 7种寻址方式及寻址空间,见种寻址方式及寻址空间,见表表3-13-

20、1。3.4 89C513.4 89C51指令系统分类介绍指令系统分类介绍111111条指令条指令,按功能分类,可分为下面,按功能分类,可分为下面5 5大类大类: (1 1)数据传送类)数据传送类(28(28条条) ) (2 2)算术操作类)算术操作类(24(24条)条) (3 3)逻辑运算类)逻辑运算类(25(25条条) ) (4 4)控制转移类)控制转移类(17(17条条) ) (5 5)位操作类)位操作类(17(17条条) )指令中符号的意义指令中符号的意义: :Rn Rn 当前寄存器区的当前寄存器区的8 8个工作寄存器个工作寄存器R0R0R7(n=0R7(n=0 7)7)。Ri Ri 当

21、前寄存器区中可作间接寻址寄存器的当前寄存器区中可作间接寻址寄存器的2 2个寄存个寄存 器器R0R0、R1(i=0,1)R1(i=0,1)。DirectDirect 直接地址,即直接地址,即8 8位的内部位的内部RAMRAM或特殊功能寄存或特殊功能寄存 器的器的字节字节地址。地址。#data#data 包含在包含在指令中的指令中的8 8位立即数位立即数。#data16#data16 包含在包含在指令中的指令中的1616位立即数位立即数。relrel 相对转移指令中的偏移量,为相对转移指令中的偏移量,为8 8位的带符号补位的带符号补 码数。码数。DPTRDPTR 数据指针数据指针,可用作,可用作1

22、616位的数据地址寄存器。位的数据地址寄存器。bitbit 内部内部RAMRAM或特殊功能寄存器中的或特殊功能寄存器中的直接寻址位直接寻址位。C C(或(或CyCy) 进位标志位或位处理机中的累加器。进位标志位或位处理机中的累加器。addr11addr11 1111位目的地址位目的地址addr16addr16 1616位目的地址位目的地址 间接寻址寄存器前缀,如间接寻址寄存器前缀,如RiRi,A+DPTRA+DPTR(X)(X) X X中的内容中的内容。(X)(X) 由由X X寻址的单元中的内容寻址的单元中的内容。 箭头右边的内容被箭头左边的内容所取代。箭头右边的内容被箭头左边的内容所取代。3

23、.4.1 3.4.1 数据传送类指令数据传送类指令 使用最频繁使用最频繁的一类指令的一类指令, ,通用格式:通用格式: MOV MOV , 属属“复制复制” ,而,而不是不是“搬家搬家”数据传送类指令数据传送类指令不影响标志位不影响标志位:CyCy、AcAc和和OVOV,影响奇偶标志位影响奇偶标志位P P。 1 1以累加器为目的操作数的指令以累加器为目的操作数的指令 MOV A,Rn ; (Rn)AMOV A,Rn ; (Rn)A,n=0n=07 7 MOV A,Ri ; (Ri)A,i=0,1MOV A,Ri ; (Ri)A,i=0,1 MOV A,direct ;MOV A,direct

24、;(directdirect)A A MOV A,#data ; #dataAMOV A,#data ; #dataA 例如:例如: MOV A,R6 ;(R6)AMOV A,R6 ;(R6)A,寄存器寻址,寄存器寻址 MOV A,70H ;(70H)AMOV A,70H ;(70H)A,直接寻址,直接寻址 MOV A,R0 ;(R0)AMOV A,R0 ;(R0)A,间接寻址,间接寻址 MOV A,#78H ;78HAMOV A,#78H ;78HA,立即寻址,立即寻址2. 2. 以以RnRn为目的操作数的指令为目的操作数的指令 MOV Rn,A ; (A)Rn,n=0MOV Rn,A ;

25、(A)Rn,n=07 7 MOV Rn,direct ; MOV Rn,direct ;(directdirect)Rn,n=0Rn,n=07 7 MOV Rn,#data ; #dataRn,n=0 MOV Rn,#data ; #dataRn,n=07 7 功能:是把源操作数的内容送入当前一组工作寄存器区的功能:是把源操作数的内容送入当前一组工作寄存器区的R0R0R7R7中的某一个寄存器。中的某一个寄存器。3.3.以直接地址以直接地址directdirect为目的操作数的指令为目的操作数的指令 MOV direct,A ; (A)directMOV direct,A ; (A)direct

26、 MOV direct,Rn;(Rn)direct, n=0 MOV direct,Rn;(Rn)direct, n=07 7 MOV direct1,direct2; MOV direct1,direct2; MOV direct,Ri ; (Ri)direct MOV direct,Ri ; (Ri)direct MOV direct,#data; #datadirect MOV direct,#data; #datadirect 功能:功能:把源操作数送入直接地址指出的存储单元。把源操作数送入直接地址指出的存储单元。directdirect指指的是内部的是内部RAMRAM或或SFRSFR

27、的地址。的地址。4.4.以寄存器间接地址为目的操作数的指令以寄存器间接地址为目的操作数的指令 MOV Ri,A ;(A)(Ri),i=0,1MOV Ri,A ;(A)(Ri),i=0,1 MOV Ri,direct ; MOV Ri,direct ; (directdirect)(Ri)(Ri) MOV Ri,#data ; #data(Ri) MOV Ri,#data ; #data(Ri)5.165.16位数传送指令位数传送指令 MOV DPTR,#data16 ; #data16DPTRMOV DPTR,#data16 ; #data16DPTR 唯一的唯一的1616位数据的传送指令位数

28、据的传送指令 , ,立即数的立即数的高高8 8位位送入送入DPHDPH,立即数的,立即数的低低8 8位位送入送入DPLDPL。6 6堆栈操作指令堆栈操作指令MCS-51MCS-51内部内部RAMRAM中可以设定一个中可以设定一个后进先出后进先出(LIFO-Last In LIFO-Last In First OutFirst Out)的区域称作)的区域称作堆栈堆栈. .堆栈指针堆栈指针SPSP指出指出堆栈的栈顶位置堆栈的栈顶位置。(1)(1)进栈指令进栈指令 PUSH directPUSH direct 先将栈指针先将栈指针SPSP加加1 1,然后把,然后把directdirect中的内容送到

29、栈指针中的内容送到栈指针SPSP指示的内部指示的内部RAMRAM单元中。单元中。例如:例如: 当(当(SPSP)=60H,=60H,(A A)=30H,=30H,(B B)=70H=70H时,时,执行:执行: PUSH ACCPUSH ACC (SP)+1=61HSP,(A)61H (SP)+1=61HSP,(A)61H PUSH BPUSH B; ; (SP)+1=62HSP,(B)62H (SP)+1=62HSP,(B)62H结果:结果:(61H)=30H,(62H)=70H,(SP)=62H(61H)=30H,(62H)=70H,(SP)=62H(2)(2)出栈指令出栈指令 POP di

30、rectPOP direct SP SP指示的栈顶(内部指示的栈顶(内部RAMRAM单元)内容送入单元)内容送入directdirect字字节单元中,栈指针节单元中,栈指针SPSP减减1 1。例如例如: : 当当 (SP)=62H(SP)=62H,(62H)=70H(62H)=70H,(61H)=30H,(61H)=30H, 执行:执行: POP DPH POP DPH ;(SP)DPH,(SP)-1SP ;(SP)DPH,(SP)-1SP POP DPL POP DPL ;(SP)DPL,(SP)-1SP;(SP)DPL,(SP)-1SP 结果:结果:(DPTR)=7030H(DPTR)=7

31、030H,(SP)=60H(SP)=60H7.7.累加器累加器A A与外部数据存储器传送指令与外部数据存储器传送指令 MOVX A,DPTR MOVX A,DPTR ;(DPTR)A,;(DPTR)A,读外部读外部RAM/IORAM/IO MOVX A,Ri MOVX A,Ri ;(Ri)A,;(Ri)A,读外部读外部RAM/IORAM/IO MOVX DPTR,A MOVX DPTR,A;(A)(DPTR),;(A)(DPTR),写外部写外部RAM/IORAM/IO MOVX Ri,A MOVX Ri,A ;(A)(Ri),;(A)(Ri),写外部写外部RAM/IORAM/IO功能:读外部功

32、能:读外部RAMRAM存储器或存储器或I/OI/O中的一个字节,或把中的一个字节,或把A A中一个字节中一个字节的数据写到外部的数据写到外部RAMRAM存储器或存储器或I/OI/O中。中。 注意:伴随着注意:伴随着RDRD* *或或WRWR* *信号有效。信号有效。采用采用DPTRDPTR间接寻址,间接寻址,高高8 8位地址(位地址(DPHDPH)由)由P2P2口输出,低口输出,低8 8位地址位地址(DPLDPL)由)由P0P0口输出。口输出。采用采用RiRi(i=0,1i=0,1)间接寻址)间接寻址,可寻址片外,可寻址片外RAMRAM的的256256个单元。个单元。RiRi内内容由容由P0P

33、0口输出。口输出。MOVMOV后后 “X X”表示单片机访问的是片外表示单片机访问的是片外RAMRAM存储器或存储器或I/OI/O。8.8.查表指令查表指令 共两条,用于读程序存储器中的数据表格的指令,均采用基址寄存器共两条,用于读程序存储器中的数据表格的指令,均采用基址寄存器加变址寄存器间接寻址方式。加变址寄存器间接寻址方式。 (1) MOVC A,A+PC(1) MOVC A,A+PC ; ; ;PC+1PC,(A+PC)A;PC+1PC,(A+PC)A以以PCPC作基址寄存器作基址寄存器,A A的内容的内容作为无符号整数和作为无符号整数和PCPC中的内容(下一条中的内容(下一条指令的起始

34、地址)指令的起始地址)相加后得到一个相加后得到一个1616位的地址,位的地址,该地址指出的程序该地址指出的程序存储单元的内容送到累加器存储单元的内容送到累加器A A。注意:注意:PSENPSEN* *信号有效信号有效。例如例如: : (A)=30H, (A)=30H,执行地址执行地址1000H1000H处的指令处的指令 1000H1000H: MOVC A,A+PCMOVC A,A+PC 本指令占用一个字节,执行结果将程序存储器中本指令占用一个字节,执行结果将程序存储器中1031H1031H的内容送入的内容送入A A。优点:优点:不改变特殊功能寄存器及不改变特殊功能寄存器及PCPC的状态,根据

35、的状态,根据A A的内容就可以取出的内容就可以取出表格中的常数。表格中的常数。缺点:缺点:表格只能存放表格只能存放在该条查表指令后面在该条查表指令后面的的256256个个单元之内单元之内,表格的,表格的大小受到限制,且表格只能被一段程序所利用。大小受到限制,且表格只能被一段程序所利用。(2) MOVC A,A+DPTR ; (2) MOVC A,A+DPTR ; ;(A+DPTR)A;(A+DPTR)A以以DPTRDPTR作为基址寄存器,作为基址寄存器,A A的内容作为无符号数和的内容作为无符号数和DPTRDPTR的内容的内容相加得到一个相加得到一个1616位的地址,把由该地址指出的程序存储器

36、单位的地址,把由该地址指出的程序存储器单元的内容送到累加器元的内容送到累加器A. A. 例如例如:(DPTR)=8100H (A)=40H (DPTR)=8100H (A)=40H 执行指令执行指令 MOVC A,A+DPTRMOVC A,A+DPTR 本指令的本指令的执行结果执行结果只和指针只和指针DPTRDPTR及累加器及累加器A A的内容有关,与该的内容有关,与该指令存放的地址及常数表格存放的地址无关,指令存放的地址及常数表格存放的地址无关,因此表格的大因此表格的大小和位置可以在小和位置可以在64K64K程序存储器中任意安排程序存储器中任意安排,一个表格,一个表格可为可为各个程序块公用。

37、各个程序块公用。两条指令是在两条指令是在MOVMOV的后面加的后面加C C,“C C”是是CODECODE的第一个字母,即代的第一个字母,即代码的意思。码的意思。内内RAMRAM( (包括特殊功能寄存器包括特殊功能寄存器): ): 用用MOVMOV指令传送;指令传送;外外RAM: RAM: 用用MOVXMOVX指令传送;指令传送;ROM: ROM: 用用MOVCMOVC指令传送。指令传送。 三个不同的存储空间用三种不同的指令传送:三个不同的存储空间用三种不同的指令传送:【例例】 按下列要求传送数据:设按下列要求传送数据:设ROM(2000H)=ABHROM(2000H)=ABH (1)ROM

38、2000H (1)ROM 2000H单元数据送内单元数据送内RAM 10HRAM 10H单元;单元; 解解(1)(1):MOV DPTR,#2000H ;置基址2000H,DPTR=2000H MOV A,#00H ;置变址0,A=00H MOVC A,A+DPTR ;读ROM 2000H,A=ABH MOV 10H,A ;存内RAM 10H单元, (10H)=ABH(2)R0M 2000H(2)R0M 2000H单元数据送外单元数据送外RAM 80HRAM 80H单元;单元;解解(2)(2):MOV DPTR,#1FFFH ;置基址1FFFH,DPTR=1FFFH MOV A,#01H ;置

39、变址01H,A=01H MOVC A,A+DPTR ;读ROM 2000H,A=ABH NOV R0,#80H ;置外RAN间址,R0=80H MOVX R0,A ;写外RAM 80H,外RAM(80H)=ABH(3)ROM 2000H(3)ROM 2000H单元数据送外单元数据送外RAM 1000HRAM 1000H单元;单元;解解(3)(3):MOV DPTR,#2000H ;置基址2000H,DPTR=2000H MOV A,#00H ;置变址0,A=00H MOVC A,A+DPTR ;读ROM 2000H,A=ABH MOV DPH,1OH ;修改外RAN地址,DPTR=1000H

40、MOVX DPTR,A ;写外RAM 1000H,外 RAM(1000H)=ABH【例例】 已知已知ROMROM中存有中存有0909的平方表,首地址为的平方表,首地址为2000H2000H,试根,试根据累加器据累加器A A中的数值查找对应的平方值,存入内中的数值查找对应的平方值,存入内RAM 30HRAM 30H。( (设设A=3)A=3) 解:解:若用若用DPTRDPTR作为基址寄存器,可编程如下:作为基址寄存器,可编程如下:1000H1000H:MOV DPTRMOV DPTR,#2000H #2000H ;置;置ROMROM平方表首地址平方表首地址 MOVC AMOVC A,A+DPTR

41、 A+DPTR ;A+2000H=2003H(A+2000H=2003H(设设A=3)A=3), ;A=(2003H)=09HA=(2003H)=09H MOV 30H MOV 30H,A A ;平方值存入内;平方值存入内RAM 30HRAM 30H中中 2000H2000H:00H 00H ;平方表:;平方表:0 02 2=0=02001H2001H:01H 01H ; 1 12 2=1 =1 2002H2002H:04H 04H ; 2 22 2=4=42003H2003H:09H 09H ; 3 32 2=9=92004H2004H:10H 10H ; 4 42 2=16=16,16=1

42、0H16=10H 2009H2009H:51H 51H ; 9 92 2=81=81,81=51H81=51H9 9字节交换指令字节交换指令 XCH A,RnXCH A,Rn XCH A,directXCH A,direct XCH A,RiXCH A,Ri例如:例如: (A)=80H(A)=80H,(R7)=08H(R7)=08H,(40H)=F0H(40H)=F0H (R0)=30H (R0)=30H,(30H)=OFH(30H)=OFH执行下列指令:执行下列指令: XCH A,R7 ;(A)XCH A,R7 ;(A)与与(R7)(R7)互换互换 XCH A,40H ;(A)XCH A,4

43、0H ;(A)与与(40H)(40H)互换互换 XCH A,R0 ;(A)XCH A,R0 ;(A)与与(R0)(R0)互换互换 结果:结果:(A)=0FH,(R7)=80H,(40H)=08H,(30H)=F0H(A)=0FH,(R7)=80H,(40H)=08H,(30H)=F0H1010半字节交换指令半字节交换指令 XCHD A,RiXCHD A,Ri 累加器的低累加器的低4 4位与内部位与内部RAMRAM低低4 4位交换。例如:位交换。例如: (R0)=60H,(60H)=3EH,(A)=59H(R0)=60H,(60H)=3EH,(A)=59H执行完执行完 XCHD A,ROXCHD

44、 A,RO 指令指令, ,则则(A)=5EH,(60H)=39H(A)=5EH,(60H)=39H。3.4.2 3.4.2 算术操作类指令算术操作类指令 单字节的加、减、乘、除法指令,都是针对单字节的加、减、乘、除法指令,都是针对8 8位二进制无符号位二进制无符号数。数。执行的结果对执行的结果对CyCy、AcAc、OVOV 三种标志位有影响。三种标志位有影响。但增但增1 1和减和减1 1指令不影响上述标志。指令不影响上述标志。1 1加法指令加法指令,(,(不带不带CyCy加法指令加法指令) )(4 4条)条) ADD A,Rn ;(A)+(Rn)AADD A,Rn ;(A)+(Rn)A,n=0

45、n=07 7 ADD A,direct ;(A)+(direct)A ADD A,direct ;(A)+(direct)A ADD A,Ri ;(A)+(Ri)A,i=0,1 ADD A,Ri ;(A)+(Ri)A,i=0,1 ADD A,#data ; (A)+#dataAADD A,#data ; (A)+#dataA 一个加数总是来自累加器一个加数总是来自累加器A A,而另一个加数可由不同的,而另一个加数可由不同的寻址方式得到。结果总是放在寻址方式得到。结果总是放在A A中。中。使用加法指令时,使用加法指令时,要注意累加器要注意累加器A A中的运算结果对各个标志中的运算结果对各个标志位

46、的影响:位的影响:(1 1)如果)如果位位7 7有进位有进位,则置,则置“1 1”进位标志进位标志CyCy,否则清,否则清“0 0”CyCy(2 2)如果)如果位位3 3有进位有进位,置,置“1 1”辅助进位标志辅助进位标志AcAc,否则清,否则清“0 0”AcAc(AcAc为为PSWPSW寄存器中的一位)寄存器中的一位)(3 3)如果位如果位6 6有进位,而位有进位,而位7 7没有进位,或者位没有进位,或者位7 7有进位,而有进位,而位位6 6没有,则溢出标志位没有,则溢出标志位OVOV置置“1 1”,否则清,否则清“0 0”OVOV。溢出标志位溢出标志位OVOV的状态,只有在的状态,只有在

47、带符号数加法运算带符号数加法运算时才有意义时才有意义。当两个带符号数相加时,当两个带符号数相加时,OV=1OV=1,表示加法运算表示加法运算超出了超出了累加累加器器A A所能表示的带符号数的有效范围。所能表示的带符号数的有效范围。MOV A,#74H MOV A,#74H ADD A,#9DH ADD A,#9DH 7 4 0111 0100 7 4 0111 0100 9 D 1001 1101 9 D 1001 1101 1 1 0001 0001 0001 0001结果结果:( A )= 11H:( A )= 11H (CY)= 1 (AC)=1 (CY)= 1 (AC)=1 (P)=0

48、 (OV)=0 (P)=0 (OV)=0 + + 例例3-23-2(A)=53H(A)=53H,(R0)=FCH(R0)=FCH,执行指令,执行指令 ADD A,R0ADD A,R0结果结果: (A)=4FH: (A)=4FH,Cy=1Cy=1,Ac=0Ac=0,OV=0OV=0,P=1P=1注意:注意:上面的运算中,由于上面的运算中,由于位位6 6和和位位7 7同时有进位,所以标同时有进位,所以标志位志位OV=0OV=0。 例例3-33-3 (A)= 85H,(R0)=20H, (A)= 85H,(R0)=20H,(20H20H)=AFH=AFH,执行指令:,执行指令: ADD A,R0AD

49、D A,R0 结果结果: :(A A)=34H=34H,Cy=1Cy=1,Ac=1Ac=1,OV=1OV=1,P=1P=1注意:注意:由于由于位位7 7有进位有进位,而,而位位6 6无进位无进位,所以标志位,所以标志位OV=1OV=12 2带进位加法指令带进位加法指令标志位标志位CyCy参加运算,因此是三个数相加。共参加运算,因此是三个数相加。共4 4条:条:ADDCADDCA,RnA,Rn;(A)+(Rn)+CA;(A)+(Rn)+CA,n=0n=07 7 ADDCADDCA,directA,direct;(A)+(direct)+CA ;(A)+(direct)+CA ADDCADDCA,

50、Ri A,Ri ;(A)+(Ri)+CA;(A)+(Ri)+CA,i=0,1i=0,1ADDCADDCA,#data A,#data ;(A)+#data+CA;(A)+#data+CA 例例3-3 3-3 (A A)=85H,=85H,(20H20H)=FFH,Cy=1=FFH,Cy=1,执行指令:,执行指令: ADDC A,20HADDC A,20H结果为结果为: :(A A)=85H=85H,Cy=1Cy=1,Ac=1Ac=1,OV=0OV=0,P=1 P=1 (A A中中1 1 的的位数为奇数)位数为奇数) 3 3增增1 1指令指令 5 5条增条增1 1指令:指令: INC AINC

51、A INC Rn ;n=0INC Rn ;n=07 7INC direct INC direct INC Ri ;i=0,1 INC Ri ;i=0,1 INC DPTRINC DPTR 不影响不影响PSWPSW中的任何标志中的任何标志。 第第5 5条指令条指令INC DPTRINC DPTR,是,是1616位数增位数增1 1指令。指令首先对低指令。指令首先对低8 8位指针位指针DPLDPL的内容执行加的内容执行加1 1的操作,当产生溢出时,就的操作,当产生溢出时,就对对DPHDPH的内容进行加的内容进行加1 1操作,并不影响标志操作,并不影响标志CyCy的状态。的状态。4 4十进制调整指令十

52、进制调整指令用于对用于对BCDBCD码十进制数加法运算结果的内容修正。码十进制数加法运算结果的内容修正。 指令格式:指令格式: DA ADA A两个两个BCDBCD码码按二进制相加按二进制相加之后,必须经本指令的调整才能得到之后,必须经本指令的调整才能得到正确的压缩正确的压缩BCDBCD码的和数。码的和数。(1 1)十进制调整问题)十进制调整问题二进制数的加法运算原则并不能适用于十进制数的加法运算二进制数的加法运算原则并不能适用于十进制数的加法运算,有时会产生错误结果。例如:有时会产生错误结果。例如:(a a)3+6=9 0011+0110=1001 3+6=9 0011+0110=1001

53、运算结果正确运算结果正确(b b)7+8=15 0111+1000=1111 7+8=15 0111+1000=1111 运算结果不正确运算结果不正确(c c)9+8=17 1001+1000=00001 C=1 9+8=17 1001+1000=00001 C=1 结果不正确结果不正确二进制数加法指令不能完全适用于二进制数加法指令不能完全适用于BCDBCD码十进制数的加法运算,码十进制数的加法运算,对结果作对结果作有条件的修正有条件的修正 十进制调整十进制调整(2 2)出错原因和调整方法)出错原因和调整方法BCDBCD码只用了了其中的码只用了了其中的1010个个,6 6个没用到的编码个没用到

54、的编码。(10101010,10111011,11001100,11011101,11101110,11111111)为为无效码无效码 凡结果凡结果进入进入或者或者跳过跳过无效码编码区无效码编码区时,其结果就是错误的。时,其结果就是错误的。调整的方法是把结果加调整的方法是把结果加6 6调整调整,即所谓十进制调整修正。,即所谓十进制调整修正。修正方法应是:修正方法应是:(a a)累加器低累加器低4 4位位大于大于9 9或辅助进位位或辅助进位位Ac=1Ac=1,则进行低,则进行低4 4位加位加6 6修正。修正。(b b)累加器高累加器高4 4位位大于大于9 9或进位位或进位位Cy=1Cy=1,则进

55、行高,则进行高4 4位加位加6 6修修正。正。(c c)累加器高累加器高4 4位位为为9 9,低低4 4位位大于大于9 9,则高,则高4 4位和低位和低4 4位分别位分别加加6 6修正。修正。是否加是否加6 6是是通过执行指令:通过执行指令:DA ADA A 来自动实现的来自动实现的 。例例3-43-4 (A A)=56H,=56H,(R5R5)=67H=67H,把它们看作为两个压缩的,把它们看作为两个压缩的BCDBCD数,进行数,进行BCDBCD数的加法。执行指令:数的加法。执行指令: ADD A,R5ADD A,R5 DA A DA A由于高、低由于高、低4 4位分别大于位分别大于9 9,

56、所以要分别加,所以要分别加6 6进行十进制调进行十进制调整对结果进行修正。整对结果进行修正。结果为:结果为: (A A)=23H=23H,Cy=1Cy=1 可见,可见,56+67=12356+67=123,结果是正确的。,结果是正确的。若若(A)(A)3 30 0 9 9或或(AC)=1(AC)=1则则(A)(A)3 30 0(A)(A)3 30 06 6; 若若(A)(A)7 74 4 9 9或或(CY)=1(CY)=1则则(A)(A)7 74 4(A)(A)7 74 46 6;例:两个十进制数例:两个十进制数“6565”与与“5858”相加,根据常识,相加,根据常识,显然其和应当为显然其和

57、应当为“123123”。MOV A,#65H MOV A,#65H ADD A,#58H ADD A,#58H DA ADA A结果结果:(A)= 23H:(A)= 23H (CY)= 1 (CY)= 1指令指令 “DA ADA A” 完成的操作完成的操作: 6 5 0110 01016 5 0110 0101 5 8 0101 1000 5 8 0101 1000 + +1 13 31818 19192 26 6 0110 01106 6 0110 0110若若(A)(A)3 30 0 9 9或或(AC)=1(AC)=1则则(A)(A)3 30 0(A)(A)3 30 06 6; 若若(A)

58、(A)7 74 4 9 9或或(CY)=1(CY)=1则则(A)(A)7 74 4(A)(A)7 74 46 6;又如:两个十进制数又如:两个十进制数“3939”与与“5858”相加,根据常相加,根据常识,显然其和应当为识,显然其和应当为“9797”。MOV A,#39H MOV A,#39H ADD A,#58H ADD A,#58H DA ADA A结果结果:(A)= 97H:(A)= 97H (CY)= 0 (CY)= 0 3 9 0011 10013 9 0011 1001 5 8 0101 1000 5 8 0101 1000 + +0 07 723239 9 6 0110 6 01

59、10指令指令 “DA ADA A” 完成的操作:完成的操作:5 5带借位的减法指令带借位的减法指令 4 4条指令条指令: SUBB A,Rn ; SUBB A,Rn ; (A A)- -(RnRn)- CyA- CyA,n=0n=07 7 SUBB A,direct ; SUBB A,direct ; (A A)- -(directdirect)- CyA- CyA SUBB A,Ri; SUBB A,Ri;(A A)- -((Ri)(Ri))- CyA, i=0,1- CyA, i=0,1 SUBB A,#data ; SUBB A,#data ;(A A)-#data - CyA-#dat

60、a - CyA从累加器从累加器A A中的内容减去指定的变量和进位标志中的内容减去指定的变量和进位标志CyCy的值,结的值,结果存在累加器果存在累加器A A中。中。如果如果位位7 7需借位需借位则置则置“1 1” Cy Cy,否则清,否则清“0 0”CyCy; 如果如果位位3 3需借位需借位则置则置“1 1”AcAc,否则清,否则清“0 0”AcAc;如果如果位位6 6需借位需借位而而位位7 7不需要借位不需要借位,或者或者位位7 7需借位,需借位,位位6 6不不需借位需借位,则置,则置“1 1”溢出标志位溢出标志位OVOV,否则清,否则清“0 0”OVOV。例例3-53-5 (A A)=C9H

温馨提示

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

评论

0/150

提交评论