3.数据交换指令 数据交换指令是在内部RAM的某一个单元和累加器A之间进行的,并且累加器A总是作为目标操作数。数据交换指令分为两种;整字节交换和半字节交换。 XCH A,源操作数 XCH A,Rn ;(A) = (Rn) XCH A,direct ;(A) = (direct) XCH A,@Ri ;(A) = ((Ri)) 这组指令的功能是将累加器A的内容与源操作数(Rn、direct或@Ri)所指定单元相互交换内容 MOV A,30H ;A=(30H)=88H XCH A,40H ;(40H)=(30H)=88H A=(40H)=11H MOV 30H,A ;(30H)=11H 结果为(30H)=11H,(40H)=88H,而功能是将30H和40H单元内容互换。 例3-4 已知(30H)=88H,(40H)=11H ,指出下列程序段执行的结果和功能。 (1)半字节交换指令 XCHD A,@Ri ;(A)3~0 =((Ri))3~0 SWAP A ;(A)3~0=(A)7~4 第一条指令将Ri间接寻址的单元内容的低4位与累加器A内容的低4位互换,高四位内容不变,不影响标志位。例如,设(A)=0ABH,(R0)=30H,(30H)=12H,执行指令XCHD A,@R0后,(A)=A2H,(30H)=1BH。 第二条指令将累加器A的高4位与低4位内容互换,不影响标志位。 4.片外数据存储器传送指令 当把一个数据送到单片机外部扩展RAM的某个单元或外部扩展I/O口某个端口,或者从该单元、端口将数据取回到单片机内部的时候,就要用到这种指令。 MOVX A,@Ri ; (A)←((Ri))片外 MOVX A,@DPTR; (A)←((DPTR))片外 MOVX @Ri,A ; ((Ri))片外←(A) MOVX @DPTR,A; ((DPTR))片外←(A) 片外RAM读指令 片外RAM写指令。 5.ROM数据访问指令 MOVC A ,@A+DPTR ;(A)←((A)+(DPTR)) ;表格地址单元中的内容送到累加器A中 MOVC A,@A+PC;(PC)←(PC)+1,(A)←((A)+(PC)) ;表格地址单元中的内容送到累加器A中 功能:将ROM中的数据送到A中 6.栈操作指令 片内RAM中有一个先进后出的堆栈操作缓冲区域,大多数都用在保护和恢复CPU的工作现场,也可实现内部RAM单元之间的数据传送。 (1)入栈指令: PUSH direct ; (SP)←(SP)+1,((SP))←(direct) 先将堆栈指针寄存器的内容加1,指向堆栈顶的一个单元中,然后将指令指定的直接寻址单元内容传送到这个单元中。 (2)出栈指令: POP direct ; (direct)←((SP)),(SP)←(SP)-1 出栈指令是将当前堆栈指针寄存器SP所指示单元内容传送到该指令指定的直接寻址单元中去,然后SP内容减1指向新栈顶。 指令的操作数是direct直接地址,不能是间接地址、通用寄存器或其他。 例3-9 已知(SP)=30H,(40H)=88H,(50H)=11H,指出下列程序段的执行结果和功能。 PUSH 40H ;(SP)←(SP)+1=31H,((SP))←(40H),(31H)=88H PUSH 50H ;(SP)←(SP)+1=32H,((SP))←(50H),(32H)=11H POP 40H ;(40H)←((SP)),(SP)←(SP)-1=31H,(40H)=11H POP 50H ;(50H)←((SP)),(SP)←(SP)-1=30H,(50H)=88H 3.4 算术运算类指令 1.加法指令 加法指令包括带进位与不带进位加法指令、加1指令和十进制调整指令。 (1)不带进位加法指令 ADD A, Rn ;(A)←(A)+(Rn) ADD A, direct ;(A)←(A)+(direct) ADD A, @Ri ;(A)←(A)+(Ri) ADD A, #data ;(A)←(A)+data 1)对标志位的影响: Cy:若D7有进位,则置1; AC:若D3有进位,则置1; OV:位 6 无进位而位 7 有进位或者位 6 有进位而位 7 无进位,则置1。 2)溢出规律: 无符号数:若Cy=1,则溢出; 有符号数:若OV=1,则溢出。 0 1 1 1 1 0 0 0 120 0 1 1 0 0 1 0 0 100 1 1 0 1 1 1 0 0 220 + 符号位(最高位)由 0 变 1, 两个正数相加结果变负, 实际上它是和数的最高位, 符号位移入了进位标志, 此时位 6 有进位而位 7 无进位, 置位溢出标志OV, 结果溢出。 例如: 120 和 100 之和为 220, 显然大于 127, 相加时 同样, -120和-100 相加, 结果应为-220, 显然小于-128, 相加时 1 0 0 0 1 0 0 0 -120 1 0 0 1 1 1 0 0 -100 + 1 0 0 1 0 0 1 0 0 -220 符号位由1变为0, 两个负数相加结果变为正数, 是因为符号位移入进位标志, 位 6 无进位而位 7 有进位, 置位溢出标志OV, 由此可判断结果溢出。 ADDC A, Rn ;(A)←(Cy) + (A)+(Rn) ADDC A, direct ; (A)←(Cy) + (A)+(direct) ADDC A, @Ri ;(A)← (Cy) + (A)+((Ri)) ADDC A, #data ;(A)←(Cy) + (A)+data 这些指令是将源字节单元的内容与累加器A 的内容相加,并加上进位位Cy的内容,结果放入累加器A中。指令执行将影响标志AC、OV、Cy、P。其余功能和上面的ADD指令相同。带进位加法指令大多数都用在多字节加法的多字节求和,以考虑低字节求和向高字节的进位。 (2)带进位加法指令 例3-10设(A)=0C3H,(R0)=0AAH,(Cy)=1。执行指令:ADDC A,R0; (Cy): 1 (A): 1 1 0 0 0 0 1 1 + R0): 1 0 1 0 1 0 1 0 1 0 1 0 0 1 1 1 0 得到的和6EH存入A中,且Cy=1,OV=1,AC=0。 DA A ;若[(A)3~09]或[(AC)=1],则(A)3~0 ←(A)3~0+06H ;若[(A)7~49]或[(Cy)=1],则(A)7~4←(A)7~4+60H 4. 十进制调整指令 在指令系统中,没有专门的十进制(BCD码)的加法运算指令,只可以使用ADD、ADDC命令,但有时会产生错误,该指令就是用于对A 中BCD码加法运算结果做调整。即两个压缩型BCD码(两个BCD码存放在一个字节存储单元)按照二进制数相加之后,必须经本指令调整,才能得到压缩型BCD码和数。 执行该指令时, 判断A中的低4位是否大于9和辅助进位标志 AC是否为“1”, 若两者有一个条件满足, 则低4位加6操作; 同样, A中的高4位大于9或进位标志 Cy为“1”两者有一个条件满足时, 高 4 位加 6 操作。 MOV A, #56H ;(36)10的BCD码 ADD A, #67H ;(45) 10的BCD码 DA A 这段程序中, 第一条指令将立即数36H(BCD码36)送入累加器A; 第二条指令进行如下加法: 0 1 0 1 0 1 1 0 56 0 1 1 0 0 1 1 1 67 1 0 1 1 1 1 0 1 BD 0 1 1 0 0 1 1 0 66 + + 1 0 0 1 0 0 0 1 1 123 得结果 BDH;第三条指令对累加器 A进行十进制调整, 高4、低 4 位均大于 9, 因此要加 66H, 得调整的BCD码 123。 (4)? 加1指令 INC A ; (A) ←(A)+1 INC Rn ; (Rn) ←(Rn)+1 INC direct ; (direct) ←(direct)+1 INC @Ri ; ((Ri)) ←((Ri))+1 INC DPTR ; (DPTR) ←(DPTR)+1 将指令中所指出操作数的内容加1,结果仍存放于原单元中去。 若原来的内容为0FFH,则加1后将产生溢出,使操作数的内容变成00H,除“INC A”影响P外,不影响任何标志。 对16位的数据指针寄存器DPTR执行加1操作,指令执行时,先对低8位指针DPL的内容加1,当产生溢出时就对高8位指针DPH加1,但不影响任何标志。 2.减法指令 (1)带借位减法指令 SUBB A, Rn ; (A) ←(A)- (Cy) - (Rn) SUBB A,direct ; (A) ←(A) -(Cy)-(direct) SUBB A,@Ri ; (A) ←(A) -(Cy)-(Ri) SUBB A,#data ; (A) ← (A) -(Cy)- data 带借位减法指令的功能是将累加器A内容减去源地址单元内容,并减去进位位Cy的内容,结果放入累加器A中。 两个数相减时,若D7位有借位,则置Cy为1,否则Cy清0;若D3位有借位,则辅助进位AC=1,否则清AC。若D6、D7位不同时借位,则置OV=1,否则清OV。若A的结果有奇数个1,则置奇偶校验位P为1,否则清0。 (2)减1指令 DEC A ; (A) ←(A)-1 DEC Rn ; (Rn) ←(Rn)-1 DEC direct ; (direct) ←(direct)-1 DEC @Ri ; ((Ri)) ←((Ri))-1 这组指令的功能是将操作数所指的单元内容减1,其操作不影响标志位Cy。若单元原始值为00H,则经过减1操作后变为0FFH,除“DEC A”影响P外,不可能影响任何标志位。 3.乘、除法指令 MCS-51单片机指令系统中有乘法、除法指令各一条,它们是两条执行时间最长的指令,执行时间为4个机器周期。 (1)乘法指令 MUL AB ;(B)(A) ←(A)×(B) 乘法指令的功能是将累加器A和寄存器B的8位无符号整数相乘,16位积的低8位存于A中,高8位存于B中。如果积大于255(FFH),则溢出标志OV置1,否则清0。进位标志位Cy总是为0。 例3-16 设(A)=50H,(B)=0A0H,分析执行指令 MUL AB后,(A)、(B)、Cy、OV分别是多少? 解:(A)×(B)为3200H,则(A)=00H,(B)=32H,OV=1,Cy=0 (1)除法指令 DIV AB ; (A) ← (A) /(B)商 ;(B) ← (A) /(B) 余数 该指令的功能是将A中无符号整数除以B中无符号整数,所得到商整数部分存于A中,余数部分存于B 中。标志位Cy和OV 清0(当除数为0时OV 置1)。 3.5 逻辑运算类指令 1.A操作指令 (1)累加器A的“清零”与“取反”指令 CLR A ;(A) ←#00H CPL A ;(A) ←/(A) 例如:若A=5CH,执行 CPL A 后的结果是A=A3H 2)累加器A的内容带进位标志位循环左移指令: RLC A 3)累加器A循环右移指令: RR A Cy D7 D0 4)累加器A的内容带进位标志位循环右移指令 RRC A 1)累加器A 循环左移指令 RL A (1)移位指令 D7 D0 D7 D0 Cy D7 D0 1)移位操作都是对累加器A做相关操作。 2)移位指令常用做乘2或除2运算。 ANL A, Rn ANL A, direct ANL A, @Ri ANL A, #data ANL direct, A ANL direct, #data 这组指令的功能是: 将两个操作数的内容按位进行逻辑与操作, 并将结果送回目的操作数的单元中。 有0则0,全1则1 2. 逻辑与指令 例如: MOV 25H,#79H ANL 25H,#15H 0 1 1 1 1 0 0 1 79H + 0 0 0 1 0 1 0 1 15H 0 0 0 1 0 0 0 1 11H (25H)=11H 有0则0,全1则1 ORL A, Rn ORL A, direct ORL A, @Ri ORL A, #data ORL direct, A ORL direct, #data 这组指令的功能是: 将两个操作数的内容按位进行逻辑或操作, 并将结果送回目的操作数的单元中。 有1则1,全0则0 3. 逻辑或指令 4.逻辑异或运算指令 XPL A,Rn ; (A)←(A)⊕(Rn) XRL A,direct; (A)←(A)⊕(direct) XRL A,@Ri ; (A)←(A)⊕((Ri)) XRL A,#data ; (A)←(A)⊕data XRL direct,A; (direct)←(A)⊕(direct) XRL direct,#data;(direct)←(direct)⊕data 异则1,同则0 第3章 MCS-51 单片机指令系统 * * MCS-51 单片机指令系统 第3章 MCS-51 单片机指令系统 3.1 指令系统概述 3.2 寻址方式 3.3 数据传送指令 3.4 算术运算类指令 3.5 逻辑运算类指令 3.6 控制转移类指令 3.7 位操作类指令 3.1 指令系统概述 3.1.1 指令 指令是指挥计算机工作的命令,一种计算机所能执行的指令集合称之为计算机指令系统。 MCS-51单片机主要有两种指令形式: 机器语言指令 汇编语言指令。 1.机器指令 用二进制代码表示的指令称为机器语言指令,也称机器码。 例如:“累加器A加1”指令用二进制数表示时,是,在程序存储器中占用一个字节单元。 2.汇编语言指令 用容易记忆的缩写符号表示机器语言指令就是汇编语言指令。例如,“A加B”用英语写出来是“Add B to A”,缩写成“ADD A,B”。这个“ADD A,B”就是汇编语言指令。MCS-51单片机的开发商约定:“ADD A,B”与25F0H对应。我们将“ADD”缩写符号称为“助记符”。 编写机器语言程序实质上就是用汇编语言编写程序。 8051汇编语言指令 指令组成: 操作码助记符 操作数 括号内的部分是可选项。每个字段之间要用分隔符分隔,可以用作分隔符的符号有空格、冒号、逗号、分号等。 指令格式: [标号:]操作码[目的操作数][,源操作数];[注释] LOOP: MOV A, 3AH ; (A)←(3AH) 1.标号 标号是语句地址的标志符号,代表该语句指令代码第一个字节的地址。 (1)标号由1~8个ASCII字符组成,且第一个字符必须是字母,其余字符可以是字母、数字或其他特定字符。 (2)不可以使用该汇编语言已经定义了的符号作为标号。如指令助记符、寄存器符号名称等。 (3)标号后必须跟冒号。 2.操作码 操作码用于规定语句执行的操作。它是汇编语句中唯一不能空缺的部分,也是语句的核心,它用指令助记符表示。 3.操作数 操作数用于给指令的操作提供数据或地址。在一条汇编语句中操作数可能是空缺的,也可能包括一项,还可能包括两项或三项。当有多个操作数时,各操作数间以逗号分隔。 (1)工作寄存器名。 (2)特殊功能寄存器名。 (3)标号名。 (4)常数。 (5)符号“$”,表示程序计数器PC的当前值。 (6)表达式。 4.注释 注释不属于汇编语句的功能部分,它只是对语句的说明。注释字段能增加程序的可读性,有助于编程人员的阅读和维护。注释字段必须以分号“;”开头,长度不限可以换行接着书写,但换行时应注意在开头使用分号“;”。 指令的描述中经常用到一些特殊符号 Rn 工作寄存器R0~R7, 即n=0~7。 Ri 寄存器R0、 R1,即i=0、1。 direct 8 位内部RAM单元的地址 #data: 指令中的8 位常数。 #data16 指令中的16位常数。 addr16: 16位的目的地址 addr11 11位的目的地址 rel 8位带符号的偏移量字节 bit: 内部数据RAM或SFR的可直接寻址位。 / 位操作数的前缀,表示对该位取反。 (X) X中的内容。 ((X)) 由 X寻址的单元中的内容。 ← 表示数据的传送方向。 = 表示数据交换。 3.1.3 MCS-51单片机指令系统的分类 按指令所占存储器字节数分 (1) 单字节指令(49条) (2) 双字节指令(46条) (3) 三字节指令(16条) 按指令功能分: (1) 数据传送指令(29条) (2) 算术运算指令(24条) (3) 逻辑运算指令(24条) (4) 控制转移类指令(17条) (5) 位操作指令(17条) 按指令执行周期数分: (1) 单周期指令(64条) (2) 双周期指令(45条) (3) 四周期指令(2条) 我的信在她那!找信去! ② ① 注:找信是寻找信的“地址”! 寻址方式,就是指怎么样找到存放作数据的位置(地址)的方法。 3.2 寻址方式 1.? 寄存器寻址 寄存器寻址是指令中指定寄存器的内容作为操作数的寻址方式。 寄存器 目的地 R0~R7 A B DPTR MOV A,R1 2.直接寻址 直接寻址是指令直接给出操作数所在单元的地址的寻址方式。指令中操作数部分给出直接地址,用direct表示。 XXH 目的地 内部RAM SFR XXH MOV A,3AH XXH 目的地 R0、R1 DPTR MOV A,@R1 3.寄存器间接寻址 指令操作数的地址事先存放在某个寄存器中,由该寄存器的内容指定操作数地址的寻址方式,称为寄存器间接寻址,@为间接寻址指示符。 信在XXH中 寄存器 可寻址内部RAM128B、外部RAM 寻址DPTR 4.立即数寻址 立即数寻址是由指令直接给出操作数的寻址方式。#为立即数的标识符。 目的地 MOV A,#30H 速递快信 30H A 5.变址寻址(基址寄存器+变址寄存器间接寻址) 变址间接寻址是将指令中基地址(基址寄存器)和偏移量地址(变址寄存器)的内容相加形成真正的操作数地址。 基址寄存器 1000H 变址寄存器 PC DPTR A 程序存储器 65H …. …. 1000H+30H 1030H 30H 65H 6.相对寻址 以当前的PC值加上指令中给出的相对偏移量rel而形成转移目的地址的寻址方式。 2000H+2H+28H · · · · · · SJMP 28H 202AH 程序存储器 2000H 2002H 源地址 目的地址 rel 转移指令本身字节数 rel是有符号的8位二进制数,用补码表示。相对偏移在+127~-128字节单元之间。 7.位寻址 位寻址是指对片内RAM中20H~2FH中的128个位地址,以及SFR中的11个可进行位寻址的寄存器中的位地址寻址(可以位寻址的特殊功能寄存器有B,ACC,PSW,IP,IE,SCON,TCON,P0~P3)。例如: 位寻址指令 MOV C,20H 将RAM中的位寻址区20H位地址中的内容,送到位的累加器Cy中 字节地址寻址指令 MOV A,20H 将内部RAM中20H 单元(一字节)的内容送到累加器A中 3.2.2 寻址空间及举例 寻址方式 存储器空间 寄存器寻址 R0~R7、A、B、Cy(位)、DPTR 直接寻址 内部数据存储器00H~7FH字节单元 特殊功能寄存器 寄存器间接寻址 内部数据存储器(@R1、@R0) 外部数据存储器(@R1、@R0、@DPTR) 立即数寻址 程序存储器(操作常数) 变址间接寻址 程序存储器(@A+DPTR、@A+PC) 相对寻址 程序存储器(修改了PC值) 位寻址 内部数据存储器及特殊功能寄存器中某 些单元位 表3-1 每一种寻址方式可涉及的存储器空间 3.3 数据传送类指令 MCS-51单片指令系统中,数据传送指令共29条,分为内部数据传送指令、外部数据传送指令、堆栈指令和数据交换指令。 数据传送指令是MCS-51单片机指令系统中数目最多、使用最频繁的指令。除了用POP或MOV操作向PSW传送数据的指令外,其他传送指令均不影响标志位。“传送”操作的功能是将源地址单元的内容传送到目的地址单元中去,而源地址单元的内容不变。 1.内部数据传送指令 是指数据在内部RAM单元之间传送。内部数据传送指令的助记符为MOV,其汇编语言指令格式为: MOV [目的地址],[源地址] (1)以累加器A为目的的传送指令 功能 执行时间 (A)←(Rn) 1Tcy (A)←(direct) 1Tcy (A)←((Ri)) 1Tcy (A)←#data 1Tcy 汇编语言指令 MOV A,Rn MOV A,direct MOV A, @Ri MOV A,#data (2)以直接地址为目的的传送指令 MOV direct,A ;(direct) ←(A) MOV direct,Rn ;(direct) ←(Rn) MOV direct1,direct2;(direct1) ←(direct2) MOV direct,@Ri ;(direct1) ←( (Ri)) MOV direct,#data ;(direct1) ←data 这组指令的目的操作数都是直接寻址单位,源地址操作数采用寄存器寻址、直接寻址、寄存器间接寻址和立即数寻址。 (3)以通用寄存器Rn为目的的传送指令 MOV Rn, A ; (Rn) ←(A) MOV Rn, direct ; (Rn) ←(direct) MOV Rn, #data ; (Rn) ←data 这三条指令都是以工作寄存器为目的操作数,源操作数的寻址方式有寄存器寻址、直接寻址和立即数寻址。 (4)以寄存器间接地址为目的的传送指令 MOV @Ri,A ; ((Ri)) ←(A) MOV @Ri,direct ; ((Ri)) ←(direct) MOV @Ri,#data ; ((Ri)) ←data 这组指令的目的操作数都是间接寻址单元,源地址单元可采用寄存器寻址、直接寻址和立即数寻址方式。 2.16位数据传送指令 MOV DPTR, #data16 ;(DPTR)←data16 MSC-51单片机指令系统中仅此一条传送16位数据的指令,功能是将16位数据送入寄存器DPTR中,其中数据的高8位送入DPH中,低8位送入DPL中。 例如:MOV DPTR,#1234H 第3章 MCS-51 单片机指令系统 * *
2025重庆市永川区中医院第四季度招聘10人备考题库附答案解析.docx
2025重庆市铜梁区少云镇敬老院招聘出纳兼护理员1人备考题库带答案解析(夺冠).docx
2025重庆市属事业单位第四季度遴选工作人员43人备考题库附答案解析 (2).docx
2025重庆市璧山区人力资源和社会保障局招聘非在编人员1人备考题库附答案解析 (2).docx
2025重庆市永川区事业单位面向优秀村(社区)干部及在村挂职本土人才招聘工作人员2人备考题库带答案解.docx
2025重庆市永川区中医院第四季度招聘10人备考题库及答案解析(夺冠).docx
2025重庆市合川区卫生事业单位“绿色通道”引进高层次人才19人备考历年题库含答案解析(夺冠).docx
2025重庆市合川区卫生事业单位“绿色通道”引进高层次人才19人笔试历年题库带答案解析.docx
2025重庆工程职业技术学院考核招聘事业单位工作人员18人笔试历年题库带答案解析.docx
2025重庆大学土木工程学院智能建造团队劳务派遣科研助理招聘1人备考历年题库含答案解析(夺冠).docx
2025年信息系统安全专家无线网络嗅探与数据窃取防御专题试卷及解析.docx
【MOOC】倾听—音乐的形式与审美-武汉大学 中国大学慕课MOOC答案.docx
小学部编版道德与法治部编版二年级上册道德与法治期末考试卷(无答案).doc
原创力文档创建于2008年,本站为文档C2C交易模式,即用户上传的文档直接分享给其他用户(可下载、阅读),本站只是中间服务平台,本站所有文档下载所得的收益归上传人所有。原创力文档是网络服务平台方,若您的权利被侵害,请发链接和相关诉求至 电线) ,上传者
