单片机指令系统、汇编程序设计、C51程序设计_第1页
单片机指令系统、汇编程序设计、C51程序设计_第2页
单片机指令系统、汇编程序设计、C51程序设计_第3页
单片机指令系统、汇编程序设计、C51程序设计_第4页
单片机指令系统、汇编程序设计、C51程序设计_第5页
已阅读5页,还剩193页未读 继续免费阅读

下载本文档

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

文档简介

1、项目二 指令系统指令系统 学习目标学习目标 知识目标知识目标: n掌握汇编语言的寻址方式、基本指 令格式、熟悉常用指令功能;程序 流程图的绘制方法;常用程序的编 写方法和技巧。 n掌握C语言的编写方法和技巧。 n 技能目标技能目标: n能根据要求编写常用程序。 2.1 概述概述 一、指令 指令是指挥计算机工作的命令,一种计 算机所能执行的指令集合称之为计算机指令计算机指令 系统。系统。 MCS51单片机主要有两种指令形式: 机器语言指令 汇编语言指令。 1机器指令 用二进制代码表示的指令称为机器语言机器语言 指令指令,也称机器码。 例如:“累加器A加1”指令用二进制数表示 时,是“000001

2、00”,在程序存储器中占用一 个字节单元。 2汇编语言指令 用容易记忆的缩写符号表示机器语言指令就 是汇编语言指令。例如,“A加B”用英语写出来是 “Add B to A”,缩写成“ADD A,B”。这个“ADD A,B”就是汇编语言指令。MCS-51单片机的开发商 约定:“ADD A,B”与25F0H对应。我们将“ADD”缩 写符号称为“助记符”。 编写机器语言程序实质上就是用汇编语言编 写程序。 两种语言指令对照: n汇编语言指令 机器语言指令 nMOV A,#0AH 74H 0AH nADD A,#14H 24H 14H 2.2 8051汇编语言指令 n指令组成:指令组成: 操作码助记符

3、 操作数 括号内的部分是可选项。 每个字段之间要用分隔符 分隔,可以用作分隔符的 符号有空格、冒号、逗号、 分号等。 w指令格式:指令格式: 标号:操作码目的操作数,源操作数;注释 LOOP: MOV A, 3AH ; (A)(3AH) 1标号 标号是语句地址的标志符号,代表该语句指令代 码第一个字节的地址。 (1)标号由18个ASCII字符组成,且第一个字 符必须是字母,其余字符可以是字母、数字或其 他特定字符。 (2)不能使用该汇编语言已经定义了的符号作为 标号。如指令助记符、寄存器符号名称等。 (3)标号后必须跟冒号。 2操作码 操作码用于规定语句执行的操作。它 是汇编语句中唯一不能空缺

4、的部分,也是 语句的核心,它用指令助记符表示。 3操作数 操作数用于给指令的操作提供数据或地址。 在一条汇编语句中操作数可能是空缺的,也可能包 括一项,还可能包括两项或三项。当有多个操作数 时,各操作数间以逗号分隔。 (1)工作寄存器名。 (2)特殊功能寄存器名。 (3)标号名。 (4)常数。 (5)符号“$”,表示程序计数器PC的当前值。 (6)表达式。 4注释 注释不属于汇编语句的功能部分,它只 是对语句的说明。注释字段可以增加程序的 可读性,有助于编程人员的阅读和维护。注 释字段必须以分号“;”开头,长度不限可 以换行接着书写,但换行时应注意在开头使 用分号“;”。 指令的描述中经常用到

5、一些特殊符号 RnRn工作寄存器工作寄存器R0R0R7R7, 即即n=0n=07 7。 RiRi寄存器寄存器R0R0、 R1R1,即,即i=0i=0、1 1。 directdirect8 8 位内部位内部RAMRAM单元的地址单元的地址 datadata:指令中的指令中的8 8 位常数。位常数。 data16data16指令中的指令中的1616位常数。位常数。 addr16addr16:1616位的目的地址位的目的地址 addr11addr111111位的目的地址位的目的地址 relrel8 8位带符号的偏移量字节位带符号的偏移量字节 bitbit:内部数据内部数据RAMRAM或或SFRSFR

6、的可直接寻址位。的可直接寻址位。 / /位操作数的前缀,表示对该位取反。位操作数的前缀,表示对该位取反。 (X X)X X中的内容。中的内容。 (X)(X)由由 X X寻址的单元中的内容。寻址的单元中的内容。 表示数据的传送方向。表示数据的传送方向。 表示数据交换。表示数据交换。 MCS-51单片机指令系统的分类 n 按指令所占存储器字节数分按指令所占存储器字节数分 (1) 单字节指令(49条) (2) 双字节指令(46条) (3) 三字节指令(16条) w 按指令功能分:按指令功能分: (1) 数据传送指令(29条) (2) 算术运算指令(24条) (3) 逻辑运算指令(24条) (4) 控

7、制转移类指令(17条) (5) 位操作指令(17条) w按指令执行周期数分:按指令执行周期数分: (1) 单周期指令(64条) (2) 双周期指令(45条) (3) 四周期指令(2条) 一、 寻址方式,就是指如 何找到存放被操作数 据的位置(地址)的 方法。 1寄存器寻址 寄存器寻址是指令中指定寄存器的内容作为操作 数的寻址方式。 寄存器寄存器 目的地目的地 R0R7 A B DPTR MOV A,R1 2.直接寻址 直接寻址是指令直接给出操作数所在单元的地址的寻址方 式。指令中操作数部分给出直接地址,用direct表示。 XXH 目的地目的地 内部RAM SFR XXH MOV A,3AH

8、例:MOV A,3AH 操作码 直接地址 1001111110011111 A PC 程序存储器 11100101 00111010 PC+1 内部RAM 3AH 39H 10011111 XXH 目的地目的地 R0、R1 DPTR MOV A,R1 3寄存器间接寻址 n指令操作数的地址事先存放在某个寄存器中,由该 寄存器的内容指定操作数地址的寻址方式,称为寄 存器间接寻址,为间接寻址指示符。 信在信在XXH中中 寄存器寄存器可寻址内部 RAM128B、外 部RAM 寻址DPTR MOV A,R0 PC 操作码 程序存储器 11100110 . . . 内部 47 65H 65H65H R0R

9、0 . 47 A 4立即数寻址 立即数寻址是由指令直接给出操作数的寻址方式。 #为立即数的标识符。 目的地目的地 MOV A,#30H 速递快信速递快信 30 A 这类指令大都是双字节指令,仅有指令:MOV DPTR, #DATA16是三字节指令,它提供两字节立即数,如:MOV DRTR,#1600H,它的机器指令格式下所示: 1 0 0 1 0 0 0 0 0 0 0 1 0 1 1 0 0 0 0 0 0 0 0 0 使用专用的汇编语言编译程序把编写的汇编语言源程序 编译成机器语言程序,对立即数的书写一般有要求:对于单 字节立即数,若数值大于等于A0H,则要在其前面加一个0, 如指令“MO

10、VA,0A0H”,该指令含义是把立即数A0H送累 计器;对于双字节立即数,若数值大于等于A000H,则要在 其前面加一个0。对于直接地址和偏移量也按相同方法书写。 第一位数字 是AF时请 在其前加0 5变址寻址(基址寄存器变址寄存器 间接寻址) 变址间接寻址是将指令中基地址(基址寄存 器)和偏移量地址(变址寄存器)的内容相加形 成真正的操作数地址。 变址寄存器变址寄存器 PC DPTR A 程序存储器程序存储器 65H65H . . 1030H 30 65H 6相对寻址 n以当前的PC值加上指令 中给出的相对偏移量 rel而形成转移目的地 址的寻址方式。 2000H+2H+28H SJMP 2

11、8H 202AH 程序存储器 2000H 2002H 源地源地 址址 目的 地址 rel转移指令本身字节数 rel是有符号的 8位二进制数, 用补码表示。 相对偏移在 127128字 节单元之间。 7.位寻址 位寻址适用于可以进行单独位操作的指令,指令中直 接给出位地址寻找位操作数。参与操作的数据是bit而不 是1B。位地址用bit表示,以区别字节地址direct。 PC PC PC+1PC+1 10100010 00110111 程序存储器 操 作 码 0 0 Cy AC FO RSI RS0 OV P PSW 内部RAM位地址空间 26H 37 36 35 34 33 32 31 30 M

12、OV C,37H 0 0 寻址空间及举例 寻址方式 存储器空间 寄存器寻址 R0R7、A、B、Cy(位)、DPTR 直接寻址 内部数据存储器00H7FH字节单元 特殊功能寄存器 寄存器间接寻址 内部数据存储器(R1、R0) 外部数据存储器(R1、R0、DPTR) 立即数寻址 程序存储器(操作常数) 变址间接寻址 程序存储器(A+DPTR、A+PC) 相对寻址 程序存储器(修改了PC值) 位寻址 内部数据存储器及特殊功能寄存器中某 些单元位 表3-1 每一种寻址方式可涉及的存储器空间 例1 将D5H位的内容送入Cy,可用几种 方式表达? (1) MOV C,0D5H (2) MOV C,0D0H

13、.5 (3) MOV C,F0 (4) MOV C,PSW.5 例2 判断下列指令各操作数的寻址方式 (1)MOV A , #65H (2)MOV R1,65H (3)MOV 30H,R2 (4)MOV C ,20H (5)DJNZ R2,LOOP (6)MOV 60H,R1 (7)MOVC A, A+PC 寄存器寻址变址寻址 直接寻址寄存器间接寻址 寄存器寻址相对寻址 位寻址位寻址 直接寻址寄存器寻址 寄存器间接寻址直接寻址 寄存器寻址立即数寻址 二、 数据传送类指令 MCS-51单片指令系统中,数据传送指令共29 条,分为内部数据传送指令、外部数据传送指令、 堆栈指令和数据交换指令。 数据

14、传送指令是MCS-51单片机指令系统中数 目最多、使用最频繁的指令。除了用POP或MOV操 作向PSW传送数据的指令外,其他传送指令均不影 响标志位。“传送”操作的功能是将源地址单元 的内容传送到目的地址单元中去,而源地址单元 的内容不变。 累加器A 直接地址 direct 立即数 #data 寄存器 R0R7 寄存器间接 R0、R1 数据指针 DPTR 16位 入、出栈 SP 入出 位累加器 C 1 1 数据传送类指令示意图 1内部数据传送指令 是指数据在内部RAM单元之间传送。内部数据 传送指令的助记符为MOV,其汇编语言指令格式为: MOV 目的地址,源地址 (1)以累加器A为目的的传送

15、指令 功能 执行时间 (A)(Rn) 1Tcy (A)(direct) 1Tcy (A)(Ri) 1Tcy (A)#data 1Tcy 1110 1rrr 汇编语言指令 MOV A,Rn MOV A,direct MOV A, Ri MOV A,#data 机器语言指令 1110 0101 direct 1110 011i 0111 0100 data 指令中Rn表示工作寄存器R0R7,用机器码指令中的低3位指 代工作寄存器的地址,其中:rrr=000111,对应的工作寄存器 R0R7。而MOV A,30H的机器吗是11100101 00110000,即E530H, 它是双字节指令。 (2)以

16、直接地址为目的的传送指令 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

17、) MOV Rn, #data ; (Rn) data 这三条指令都是以工作寄存器为目的操 作数,源操作数的寻址方式有寄存器寻址、 直接寻址和立即数寻址。 (4)以寄存器间接地址为目 的的传送指令 MOV Ri,A ; (Ri) (A) MOV Ri,direct ; (Ri) (direct) MOV Ri,#data ; (Ri) data 这组指令的目的操作数都是间接寻址单元, 源地址单元可采用寄存器寻址、直接寻址和 立即数寻址方式。 例例3 3 设内部设内部RAMRAM中的中的30H30H单元的内容为单元的内容为50H50H,试分,试分 析执行下面程序后各有关单元的内容。析执行下面程序

18、后各有关单元的内容。 MOV 60HMOV 60H,#30H#30H MOV R0 MOV R0,#60H#60H MOV A MOV A,R0R0 MOV R1 MOV R1,A A MOV 40H MOV 40H,R1R1 MOV 60H MOV 60H,30H30H 216位数据传送指令 MOV DPTR, #data16 ;(DPTR)data16 MSC-51单片机指令系统中仅此一条传送 16位数据的指令,功能是将16位数据送入寄 存器DPTR中,其中数据的高8位送入DPH中, 低8位送入DPL中。 3.数据交换指令 数据交换指令是在内部RAM的某一个单元和累 加器A之间进行的,并且

19、累加器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 XCH A,40H MOV 30H,A 88H A 结果为(30H)=11H,(40H)=88H,而功能是将 30H和40H单元内容互换。 88H 30H 40H 11H 88H 11H 11H 例3-4 已知(30H)=88H,(40H)=11H ,

20、指出下列 程序段执行的结果和功能。 (1)半字节交换指令 XCHD A,Ri ;(A)30 (Ri)30 SWAP A ;(A)30(A)74 第一条指令将Ri间接寻址的单元内容的低4位与 累加器A内容的低4位互换,高四位内容不变,不影 响标志位。例如,设(A)=0ABH,(R0)=30H, (30H)=12H,执行指令XCHD A,R0后,(A)=A2H, (30H)=1BH。 第二条指令将累加器A的高4位与低4位内容互换, 不影响标志位。 例例5 5 设内部数据存储器的设内部数据存储器的60H60H、61H61H单元中连续存放着单元中连续存放着 4 4位位BCDBCD码,试编写一段程序将这

21、码,试编写一段程序将这4 4位位BCDBCD码倒序排列。码倒序排列。 MOV R0,#60H ; (R0)=60H MOV R1,61H ; (R1)=61H MOV A, R0 ; (A) =(R0)=(60H)=a3a2 SWAP A ;A中的内容、低4位互换(A)=a2a3 XCH A,R1 ;(A)(R1) SWAP A ;(A)=a0a1 MOV R0,A ;(R0)=(A),(60H)=a0a1 60H 61H 60H 61H a3 a2a0 a1a1 a0 A2 a3 4片外数据存储器传送指令 当把一个数据送到单片机外部扩展RAM的某 个单元或外部扩展I/O口某个端口,或者从该单

22、元、 端口将数据取回到单片机内部的时候,就要用到 这种指令。 MOVX A,Ri ; (A)(Ri)片外 MOVX A,DPTR; (A)(DPTR)片外 MOVX Ri,A ; (Ri)片外(A) MOVX DPTR,A; (DPTR)片外(A) 片外RAM 读指令 片外RAM 写指令。 例6将累加器A中的内容送入外部数据 存储器的0060H单元。 MOV R0,#60H ;地址送间址寄存器 MOVX R0,A ;A中内容送外部数据存储器 的0060H单元 MOV P2,#00 ;输出地址高8位输出00H 例7将外部存储器的2000H单元的内容送 入2100H单元。 MOV DPTR, #2

23、000H ; (DPTR)=2000H MOVX A, DPTR ; (A)=(DPTR) MOV DPTR, #2100H ;(DPTR)=2100H MOVX DPTR, A ;(DPTR)=(A) 5ROM数据访问指令 MOVC A ,A+DPTR ; (A)(A)+(DPTR)ROM MOVC A,A+PC;(PC)(PC)+1,(A)(A)+(PC)ROM 10651065 ALUALU 1060H+05H=1065H 程序存储器程序存储器 PCPC MOVC A,A+DPTR 34H 05H DPL DPH A 10H 60H 指令执行后,A中的内容则为34H, 而不再是5H 34

24、H 两个指令的比较 v MOVC A,A+DPTR:这条指令的执行结果只与指针DPTR及 累加器A的内容有关, 与该指令存放的地址无关, 因此, 表格的大小 和位置可以在 64 KB程序存储器中任意安排, 并且一个表格可以为 各个程序块所共用各个程序块所共用。 vMOVC A, A+PC:这条指令的优点是不改变特殊功能寄存器和 PC的状态, 只要根据A的内容就可以取出表格中的常数。缺点是表 格只能放在该条查表指令后面的 256 个单元之内, 表格的大小受到 限制, 而且表格只能被一段程序所利用。 例例8 8:设:设A A的内容为的内容为BCDBCD码(高码(高4 4位为全位为全0 0),试用查

25、),试用查 表法来求得相应的表法来求得相应的ASCIIASCII码码。 方法(一): BCD_ASC:MOV DPTR,#TAB MOVC A,A+DPTR RET TAB: DB 30H,31H, 32H,33H,34H DB 35H,36H,37H,38H ,39H 6栈操作指令 片内RAM中有一个先进后出的堆栈操作缓冲区域,主要用于保护 和恢复CPU的工作现场,也可实现内部RAM单元之间的数据传送。 (1)入栈指令: PUSH direct ; (SP)(SP)+1,(SP)(direct) 先将堆栈指针寄存器的内容加1,指向堆栈顶的一个单元中,然 后将指令指定的直接寻址单元内容传送到这

26、个单元中。 (2)出栈指令: POP direct ; (direct)(SP),(SP)(SP)-1 出栈指令是将当前堆栈指针寄存器SP所指示单元内容传送到该指 令指定的直接寻址单元中去,然后SP内容减1指向新栈顶。 指令的操作数是 direct直接地址, 不能是间接地址、 通用寄存器或其他。 例例9 9 已知(已知(SPSP)=30H=30H,(,(40H40H)=88H=88H,(,(50H50H) =11H=11H,指出下列程序段的执行结果和功能。,指出下列程序段的执行结果和功能。 PUSH 40HPUSH 40H ;(SP)(SP)+1=31H,(SP)(40H),(31H)=88H

27、 PUSH 50HPUSH 50H ;(SP)(SP)+1=32H,(SP)(50H),(32H)=11H POP 40HPOP 40H ;(40H)(SP),(SP)(SP)-1=31H,(40H)=11H POP 50HPOP 50H ;(50H)(SP),(SP)(SP)-1=30H,(50H)=88H 三、 算术运算类指令 1 1加法指令加法指令 加法指令包括带进位与不带进位加法 指令、加1指令和十进制调整指令。 (1 1)不带进位加法指令)不带进位加法指令 ADD A, Rn ;(A)(A)+(Rn) ADD A, direct ;(A)(A)+(direct) ADD A, Ri

28、;(A)(A)+(Ri) ADD A, #data ;(A)(A)+data 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指令相同。 带进位加法指令主要用于多字节加法的多字节求和,以考虑 低字节求和向高字节的进

29、位。 (2)带进位加法指令 例例11 11 计算计算6655H+11FFH6655H+11FFH的程序,结果放入的程序,结果放入 50H50H、51H51H中。中。 MOV AMOV A,#55H#55H ADD AADD A,#0FFH#0FFH MOV 50HMOV 50H,A A MOV AMOV A,#66H#66H ADDC AADDC A,#11H#11H MOV 51HMOV 51H,A A DA A ;若(A)309或(AC)=1,则(A)30 (A)30+06H ;若(A)749或(Cy)=1,则(A)74(A)74+60H (3). 十进制调整指令 在指令系统中,没有专门的

30、十进制(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 ADD A, 67H DA A 这段程序中, 第一条指令将立即数送入累加器A; 第

31、二 条指令进行如下加法: 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。 例例13 13 设有设有4 4个压缩个压缩BCDBCD码,分别放在内部数据存储码,分别放在内部数据存储 器器50H50H51H51H单元和单元和60H60H61H61H单元中,试编写求出两单元中,试编写求出两 个数的和的程序,结果存放到

32、个数的和的程序,结果存放到40H40H41H41H单元中单元中。 MOV A,50H ;(A)(50H) ADD A,60H ;(A)(A)+(60H) DA A, ; BCD码调整 MOV 40H,A MOV A,51H ADDC A,61H DA A MOV 41H,A (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,结果仍存放于原单元 中去。 若原来

33、的内容为0FFH,则加1后将产生溢出,使操作 数的内容变成00H,除“INC A”影响P外,不影响任何标志。 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位有借

34、位,则辅助进位AC=1,否则清AC。若D6、D7位不 同时借位,则置OV=1,否则清OV。若A的结果有奇数个1,则 置奇偶校验位P为1,否则清0。 例例15 15 计算计算0EE33H-A0E0H0EE33H-A0E0H的程序的程序 CLR C CLR C ;(;(CyCy)0 0 MOV A MOV A,#33H #33H ;(;(A A)33H33H SUBB A SUBB A,#0E0H #0E0H ;(;(A A)(A A)-E0H-E0H MOV 50H MOV 50H,A A ;(;(50H50H)(A A) MOV AMOV A,#0EEH#0EEH SUBB A SUBB A,

35、#0A0H#0A0H MOV 51H MOV 51H,A A (2 2)减)减1指令指令 DEC A DEC A ; (A) (A)-1(A) (A)-1 DEC Rn DEC Rn ; (Rn) (Rn)-1(Rn) (Rn)-1 DEC direct DEC direct ; (direct) (direct)-1(direct) (direct)-1 DEC Ri DEC Ri ; (Ri) (Ri)-1(Ri) (Ri)-1 这组指令的功能是将操作数所指的单元内容减这组指令的功能是将操作数所指的单元内容减1 1, 其操作不影响标志位其操作不影响标志位CyCy。若单元原始值为。若单元原始

36、值为00H00H, 则经过减则经过减1 1操作后变为操作后变为0FFH0FFH,除,除“DEC ADEC A”影响影响P P 外,不会影响任何标志位。外,不会影响任何标志位。 3 3乘、除法指令乘、除法指令 MCS-51 MCS-51单片机指令系统中有乘法、除法指令各单片机指令系统中有乘法、除法指令各 一条,它们是两条执行时间最长的指令,执行时一条,它们是两条执行时间最长的指令,执行时 间为间为4 4个机器周期。个机器周期。 ()乘法指令()乘法指令 MUL AB MUL AB ;(B)(A) (A)(B)(A) (A)(B)(B) 乘法指令的功能是将累加器乘法指令的功能是将累加器A A和寄存

37、器和寄存器B B的的8 8位无位无 符号整数相乘,符号整数相乘,1616位积的低位积的低8 8位存于位存于A A中,高中,高8 8位存位存 于于B B中。如果积大于中。如果积大于255255(FFHFFH),则溢出标志),则溢出标志OVOV置置 1 1,否则清,否则清0 0。进位标志位。进位标志位CyCy总是为总是为0 0。 (2 2)除法指令)除法指令 DIV AB DIV AB ; (A) (A) /(B)(A) (A) /(B)商 商 ; ;(B) (A) /(B)(B) (A) /(B) 余数 余数 该指令的功能是将该指令的功能是将A A中无符号整数除以中无符号整数除以B B 中无符号

38、整数,所得到商整数部分存于中无符号整数,所得到商整数部分存于A A中,中, 余数部分存于余数部分存于B B 中。标志位中。标志位CyCy和和OV OV 清清0 0(当(当 除数为除数为0 0时时OV OV 置置1 1)。)。 四四. 逻辑运算类指令逻辑运算类指令 1 1A A操作指令操作指令 (1 1)累加器)累加器A A的的“清零清零”与与“取反取反”指令指令 CLRCLR A A ;(A) #00H(A) #00H CPL A CPL A ;(A) /(A)(A) /(A) CPL A CPL A指令对累加器的内容逐位取反,指令对累加器的内容逐位取反, 不影响标志位。不影响标志位。 2 2

39、)累加器)累加器A A的内容带进位标志位循环左移指令:的内容带进位标志位循环左移指令: RLC ARLC A 3)累加器)累加器A循环右移指令:循环右移指令: RR ARR A Cy D7 D0 Cy D7 D0 4 4)累加器)累加器A A的内容带进位标志位循环右移指的内容带进位标志位循环右移指 令令 RRC A RRC A 1 1)累加器)累加器A A 循环左移指令循环左移指令 RLRL A A (1 1)移位指令)移位指令 D7 D7 D0D0 D7 D7 D0D0 Cy D7 D0Cy D7 D0 1 1)移位操作都是对)移位操作都是对 累加器累加器A A进行操作。进行操作。 2 2)

40、移位指令常用做)移位指令常用做 乘乘2 2或除或除2 2运算。运算。 例例3-17 3-17 若(若(A A)=10111101B=0BDH=10111101B=0BDH,Cy=0Cy=0,分析,分析 执行执行RLC ARLC A后,(后,(A A)和)和CyCy的结果。的结果。 解:执行解:执行RLC ARLC A后,(后,(A A)=01111010B=7AH=01111010B=7AH, Cy=1Cy=1。 ANL A, Rn ANL A, direct ANL A, Ri ANL A, data ANL direct, A ANL direct, data 这组指令的功能是: 将两个操

41、作数的内容按位进行逻 辑与操作, 并将结果送回目的操作数的单元中。 与0相与,使被修改数相应 位清零,与1相与,使被修 改数相应位保持原值不变 2. 逻辑与指令 例例3-18 3-18 将累加器将累加器A A中压缩中压缩BCDBCD码分为两个字码分为两个字 节,形成非压缩节,形成非压缩BCDBCD码,放入码,放入30H30H和和31H31H单元中。单元中。 MOV 40H,A ;保存A 中的内容 ANL A,#00001111B ;清高4位,保留低4位 MOV 30H,A MOV A,40H ;取原数据 ANL A,#11110000B ;保留高4位,清低4位 SWAP A MOV 31H,A

42、 ORL A, Rn ORL A, direct ORL A, Ri ORL A, data ORL direct, A ORL direct, data 这组指令的功能是: 将两个操作数的内容按位进行逻辑或 操作, 并将结果送回目的操作数的单元中。 与1相或,使被修改数相应 位置1,与0相或,使被修 改数相应位保持原值不变 3. 逻辑或指令 例例3-19 3-19 将累加器将累加器A A中的低中的低4 4位由位由P1P1口的口的 低低4 4位输出,位输出,P1P1口的高口的高4 4位不变。位不变。 解:ANL A,#00001111B MOV 30H,A ;保留A中的低4位 MOV A,P1

43、 ANL A,#11110000B ;P1的高4位不变 ORL A,30H MOV P1,A 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相异或,使被修改相异或,使被修改 数相应位保持原值不变;数相应位保持原值不

44、变;本指令可判断两个数是否相等,若相等,本指令可判断两个数是否相等,若相等, 则异或结果为全则异或结果为全“0 0”;否则不相等。;否则不相等。 练习:P88,17题 五、 控制转移类指令 1 1无条件转移指令无条件转移指令 是指当程序执行到该指令 时,无条件转移到指令所提供地址处执行。无条件 转移指令共有4条,包括长转移指令、短转移指令、 绝对转移指令和散转指令。 (1)长转移指令 LJMP addr16 ;(PC)addr16 该指令执行后将16位地址(addr16)传送给PC, 从而实现程序转移到新的地址开始运行,该指令可 实现64KB的范围内任意转移。该指令不影响标志位。 (2)绝对转

45、移指令 AJMP addr11;(PC)(PC)+2,(PC100) addr11 由PC1511信息和指令提供低11位地址组成16位转 移目标地址,使程序无条件转向同一2KB存储空间目 的地址执行。本指令不影响标志位。 (3)相对转移指令 SJMP rel;(PC)(PC)+2,(PC)(PC) +rel 指令中rel是一个有符号数偏移量,其范围为-128+127,以 补码形式给出。若rel是正数,则向前转移;若rel是负数,则 向后转移。 1)一条带有FEH偏移量的 SJMP指令,将实现无限循环。 这是因为FEH是-2的补码,目 的地址=PC+2-2=PC,结果转向 自己,无限循环,一般在

46、程序 用SJMP $来表示SJMP 0FEH。 2)该指令中寻址方式称相对 寻址方式。 存储器 80H 128 rel +127 PC PC+1 PC+2 (4)散转指令 JMP A+DPTR;(PC)(A)+(DPTR) PC DPTR (A)+(DPTR)PC 256B JMP A+DPTR 该指令执行时,把累加器A中 的8位无符号数与DPTR中16位数 相加,其中装入程序计数器PC, 控制程序转到目的地址执行程序。 整个指令的执行过程中,不改变 累加器A和DPTR的内容。 例3-20 某单片机应用系统有16个键,对应的键码值(00H 0FH)存放在R7中,16个键处理程序的入口地址分别为

47、KEY0, KEY1, ,KEY15。要求按下某键,程序即转移到该键的相 应处理程序执行。 解:预先在ROM中建立一张起始地址为KEYG的转移表:AJMP KEY0,AJMP KEY15,利用散转指令即可实现多路分支转 移处理。 MOV AMOV A,R7R7 RL A RL A ;由于;由于AJMPAJMP指令为双字节指令,键值乘指令为双字节指令,键值乘2 2倍倍 MOV DPTRMOV DPTR,#KEYG #KEYG ;转移入口基地址送;转移入口基地址送DPTRDPTR JMP A+DPTR JMP A+DPTR KEYGKEYG:AJMP KEY0AJMP KEY0 AJMP KEY1

48、 AJMP KEY1 AJMP KEY15 AJMP KEY15 2条件转移指令 条件转移指令是当满足给定的条件时,程序转移到目的地址去 执行;条件不满足则顺序执行下一条指令。条件转移指令分 为累加器A判零转移指令、比较转移指令和循环指令。 (1)累加器A判零转移指令 JZ rel ;(PC) (PC) +2 当 (A) = 0, (PC) = (PC) + rel,即转移 当 (A) 0, 则程序顺序执行 JNZ rel ;(PC) (PC) +2 当 (A) 0, (PC) = (PC) + rel,即转移 当 (A) = 0, 则程序顺序执行 P102程序阅读 在MCS - 51 中没有

49、专门的比较指令, 但提供了下面 4 条比较 不相等转移指令: CJNE A, direct, rel CJNE A, data, rel CJNE Rn, data, rel CJNE Ri, data, rel 这组指令的功能是: 比较前面两个操作数的大小, 如果它 们的值不相等则转移。转移地址的计算方法与上述两条指令 相同。如果第一个操作数(无符号整数)小于第二个操作数, 则进位标志Cy置“1”, 否则清“0”, 但不影响任何操作数的内 容。 (2) 比较转移指令 P104程序阅读 (3) 循环控制转移指令 DJNZ Rn, rel ;(PC) (PC)+2, (Rn)(Rn)-1 当(R

50、n)0时, (PC) (PC) +rel; 当(Rn)=0时, 程序顺序执行。 DJNZ direct,rel;(PC)(PC)+3,(direct)(direct)-1 当(direct)0时, (PC) (PC) +rel; 当(direct)=0时, 程序顺序执行。 执行本指令时,将第一个操作数减1后判断结果是否为0,若 为0,则终止循环程序段的执行,程序往下顺序执行;若不为0, 则转移到目的地址继续执行循环程序段。用两条指令可以构成循 环程序,循环次数就是第一个操作数的值。rel为相对偏移量。 P95程序阅读 3.子程序调用 为简化程序设计,经常把功能完全相同或反复使用的程序段 单独编

51、写成子程序,供主程序调用。主程序需要时通过调用指令, 无条件转移到子程序处执行,子程序结束时执行返回指令,再返 回到主程序继续执行。 (1)长调用指令 LCALL addr16 ;(PC) (PC) + 3, (SP) (SP)+1,(SP) (PC70); (SP) (SP)+1,(SP) (PC158); (PC) addr16 (2)短调用指令 ACALL addr11;(PC) (PC) + 2 (SP) (SP)+1,(SP) (PC70); (SP) (SP)+1,(SP) (PC158); (PC150) addr16 该指令的目的地址形成与11位的无条件转移指令类 似,只是增加

52、了断点压栈过程。指令的执行不影响标志 位。 4返回指令 返回指令应能自动恢复断点,将原压入栈的PC值 弹回到PC中,保证回到断点处继续执行主程序。返 回指令必须用在子程序或中断服务程序的末尾。 (1)子程序返回指令 RET ;(PC158)(SP) ,(SP)(SP)-1; (PC70)(SP),(SP)(SP)-1; 这条指令将堆栈顶的2字节单元内容送到PC中, 使程序返回到调用处。 (2)中断返回指令 RETI ;(PC158)(SP) ,(SP)(SP)-1; (PC70)(SP),(SP)(SP)-1; 该指令用于中断服务于程序的末尾,将堆栈 顶的2字节的内容送到PC中,它与RET指令

53、不同之 处是它同释放中断逻辑,使同级中断可以被接受。 5空操作指令 NOP ;(PC)(PC)+1 该指令不作任何操作,仅仅将程序计数器 PC加1,使程序继续向下执行。该指令为单 周期指令,所以在时间上占用一个机器周期, 常用于延时。 P116程序阅读 六、位操作类指令 数据存储器: q片内RAM20H2FH单元共128位,位地址为00H7FH qA、B两个寄存器中的各8位,位地址为E0HE7H、F0HF7H 位累加器:由C兼任 I/O口:在SRF中共有44个布尔I/O口 q通用I/O口:共32个(P0.0P0.7、P1.0P1.7、P2.0P2.7、P3.0P3.7) q用于定时器和串行口进

54、行控制和测试的:16个(TCON0TCON7、 SCON0SCON7) q用于中断系统的:11个(IE1IE4、IE7、IP0IP4) q用于PSW中的:7个(PSW .0、PSW.2PSW.7) 位操作指令:17条 位地址的表示形式 (1)直接(位)地址表示方式,如0D4H。 (2)点表示方式,如PSW.4。 (3)位名称表示方式,如RS1。 (4)标号表示方式,如用伪指令BIT定义: WBZD0 BIT EX0 经定义后, 允许指令中使用WBZD0代替EX0。 位数据传送指令 位数据传送指令的两个操作数,一个是指定的位 单元,另一个必须是位累加器Cy(进位位标志Cy)。 MOV C,bit

55、 ; (Cy) (bit) MOV bit,C ; (bit) (Cy) bit为内部RAM中的20H2FH单元中128个可寻址位 和特殊功能寄存器中的可位寻址位。此指令不影响 其他寄存器或标志位。 1 1位逻辑运算指令位逻辑运算指令 (1 1)置)置“1 1”指令指令 SETB C SETB C ;(;(CyCy)1 1 SETB bit SETB bit ; (bit) 1(bit) 1 (2 2)位清)位清“0 0”指令指令 CLR C CLR C ;(Cy) 0(Cy) 0 CLR bit CLR bit ;(bit) 0(bit) 0 (3 3)位取反指令)位取反指令 CPL C C

56、PL C ;(Cy) /(Cy) /(CyCy) CPL bit CPL bit ;(bit) /(bit) /(bitbit) (4 4)位逻辑)位逻辑“与与”指令指令 ANL CANL C,bit bit ;(Cy) (Cy) (CyCy)(bitbit) ANL CANL C,/bit /bit ;(Cy) (Cy) (CyCy)/ /(bitbit) (5 5)位逻辑)位逻辑“或或”指令指令 ORL CORL C,bit bit ;(Cy) (Cy) (CyCy)(bitbit) ORL CORL C,/bit /bit ;(Cy) (Cy) (CyCy)/ /(bitbit) 2 2

57、位控制转移指令位控制转移指令 位控制转移指令按照不同的条件分为以位控制转移指令按照不同的条件分为以CyCy内容为条件的转移内容为条件的转移 指令和以位地址指令和以位地址bitbit内容为条件的转移指令两类。内容为条件的转移指令两类。 ()判布尔累加器()判布尔累加器CyCy的转移指令的转移指令 JC rel;JC rel;若(若(CyCy)=1=1,则(,则(PCPC)(PCPC)+2+ rel+2+ rel,即转移,即转移 若(若(CyCy)=0=0,则(,则(PCPC)(PCPC)+2+2,即顺序执行,即顺序执行 JNC relJNC rel;若(;若(CyCy)=0=0,则(,则(PCP

58、C)(PCPC)+2+ rel+2+ rel,即转移,即转移 若(若(CyCy)=1=1,则(,则(PCPC)(PCPC)+2+2,即顺序执行,即顺序执行 注:执行该指令时,不改变进位位注:执行该指令时,不改变进位位CyCy的值。的值。 (2)判位变量转移指令 JB bitJB bit,relrel ;若(bit)=1,则(PC)(PC)+3+ rel,即转移 若(bit)=0,则(PC)(PC)+3,即顺序执行 JNB bitJNB bit,relrel ;若(bit)=0,则(PC)(PC)+3+ rel,即转 移 若(bit)=1,则(PC)(PC)+3,即顺序执行 两条指令不改变bit

59、值,不影响标志位。 (3)判位变量为1转移并清零指令 JBC bit,rel ;若(bit)=0,则(PC)(PC) +3; 若(bit)=1,则(PC)(PC)+3+ rel,且(bit) 0 注意:不管bit位为何值,执行该指令后,bit 位值为0。 例例22 22 编写一程序完成下图的逻辑电路编写一程序完成下图的逻辑电路 运算处理。运算处理。 Z START:MOV A,21H ;取十位取十位ASCIIASCII码码 ANL A,#0FH ;ANL A,#0FH ;保留低半字节保留低半字节 SWAP A ;SWAP A ;移至高半字节移至高半字节 MOV 20H,A ;MOV 20H,A

60、 ;存于存于20H20H单元单元 MOV A,22H ;MOV A,22H ;取个位取个位ASCIIASCII码码 ANL A,#0FH ;ANL A,#0FH ;保留低半字节保留低半字节 ORL 20H,A ;ORL 20H,A ;合并到结果单元合并到结果单元 SJMP $SJMP $ END END 4.3.2 分支程序 【例例4-24-2】设变量设变量x x以补码以补码 的形式存放在片内的形式存放在片内RAMRAM的的 30H30H单元,变量单元,变量y y与与x x的关的关 系是系是: :当当x x大于大于0 0时时,y=x;,y=x;当当 x=0 x=0时时,y=20H;,y=20H

温馨提示

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

评论

0/150

提交评论