1 / 65

第三章 MCS-51 单片机指令系统 §3-1 指令格式及其操作寻址方式 §3-2 指令系统

第三章 MCS-51 单片机指令系统 §3-1 指令格式及其操作寻址方式 §3-2 指令系统. §3-1 指令格式及其操作寻址方式 一、基本概念 1 、指令及其格式 什么是指令? 计算机认识什么样的指令? 指令能干什么? 机器指令:用 2 进制数 0 、 1 表示的命令代码。常以 16 进制表示。 机器语言:由机器指令描述的程序语言。 助记符指令:用字母和 16 进制数代替机器指令形成的符号指令 。 助记符语言:由助记符指令形成的程序语言,又称汇编语言。 MCS-51 单片机汇编语言指令格式:

plato-diaz
Download Presentation

第三章 MCS-51 单片机指令系统 §3-1 指令格式及其操作寻址方式 §3-2 指令系统

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第三章 MCS-51单片机指令系统 • §3-1 指令格式及其操作寻址方式 • §3-2 指令系统

  2. §3-1 指令格式及其操作寻址方式 • 一、基本概念 • 1、指令及其格式 • 什么是指令? • 计算机认识什么样的指令? • 指令能干什么? • 机器指令:用2进制数0、1表示的命令代码。常以16进制表示。 • 机器语言:由机器指令描述的程序语言。 • 助记符指令:用字母和16进制数代替机器指令形成的符号指令。 • 助记符语言:由助记符指令形成的程序语言,又称汇编语言。 • MCS-51单片机汇编语言指令格式: • [标号:] 操作码 操作数(目的操作数,源操作数)[ ;注释]

  3. 其中: • 标 号:称符号地址,代表该指令第1字节所在的地址。 • 操作码:规定了指令将要干什么,必不可少。 • 操作数:表示参与运算作的数或数的地址。 • 注 释:可有可无,必须以“;”开始。 • 2、指令中的符号标识 • Ri、Rn、#data、#data16、addr11、addr16、 Direct、rel、bit • A:寄存器寻址的累加器; • ACC:直接寻址的累加器; • @: 间接寻址符号 • (X): X中的内容 • ((X)): 由X的内容作为地址的单元中的内容 • ←: 箭头左边的内容被右边的内容代替 • $: 本条指令的起始地址 • / : 位操作数前缀,表示取反。

  4. 3、汇编语言的数据形式 • 二进制( B):0,1 • 十进制( D):0,1,~9 • 十六进制( H):0,1,~9,A,B,C,D,E,F • 二、寻址方式 • 寻址方式:指令给出参与运算的数据的方式,即确定操作数 • 地址的方法。 • MCS-51指令寻址方式主要有5种:存器寻址、直接寻址、寄存 • 器间接寻址、立即寻址和基址寄存器+变址寄存器间接寻址 • 1、寄存器寻址 • 由指令指出以某寄存器的内容为操作数。寄存器寻址方式使 • 用范围: • (1)内部RAM中的32个工作寄存器R0~R7; • (2)A、B、C、DPTR;

  5. 例如: INC R3 ;(R3)←(R3)+1 • ↑操作码 ↑操作数 • 指令中的R3即为寄存器寻址,其执行过程如下图: • 本例中:R3的“门牌号”高3位为0,决定了寻址内部RAM中 • 00H~1FH空间。 • 对于Rn:具体寄存器由指令的低3位指定。 • 对于A、B、C、DPTR:则为隐含在指令代码中。

  6. 2、直接寻址 • 在指令中含有操作数的直接地址,该地址指出了参与运算的数所在的字节单元地址或位地址(位寻址)。直接寻址的寻址范围: • (1)内部数据存储器的低128字节,00H~7FH; • (2)特殊功能寄存器,注意除A、B、DPTR外,其他 • SFR只能采用直接寻址方式。 • (3)位寻址:所有可寻址位; • 例如:MOV A, 70H ;(A)←(70H) • MOV C, 70H ;(CY)←(70H) • 注意:对累加器直接寻址和位寻址时,要用符号“ACC”或直接地址“E0H”,以区别于寄存器寻址。

  7. 3、寄存器间接寻址 • 指令中指出某一个寄存器的内容为操作数的地址,以符号“@”表示。其寻址范围: • (1)以R0,R1为地址指针,寻址内部RAM 00~7FH • 和外RAM的低256B; • (2)以堆栈SP为地址指针,寻址栈区单元; • (3)以DPTR,或R0、R1(须用P2指定高8位地址) 为地址指针,寻址外部RAM的64KB空间和扩展 • I/O口。 • 例:MOV A,@R0 ;(A)←((R0)) • PUSH ACC ;((SP)) ←(A) • MOVX A,@DPTR ;(A)←((DPTR)

  8. 4、立即寻址 • 操作数以常数的形式出现,直接跟在操作码后面, • 以指令字节的形式存放在ROM中。 • 例如: MOV A, #40H • MOV DPTR, #TABLE ;TABLE为标号地址 • MOV P1, #00000111B • MOV R3, #18 • 5、基址寄存器+变址寄存器间接寻址 • (1)变址寻址 • 以基址寄存器(PC、 DPTR)和变址寄存器(A)的内容 • 作为无符号数相加,形成16位地址,访问程序存储器(表格)。 • MOVC A,@A+PC ;(A)←((A)+(PC)) • MOVC A,@A+DPTR ;(A)←((A)+(DPTR))

  9. 例如:设(A)=30H,(PC)=1000H, • 执行MOVC A,@A+PC的情况如下图所示。 • 取数地址为:1001+30=1031H。 • 显然: 当(A)=00H时,新(PC)=1001H; 当(A)=FFH时,新(PC)=1100H;

  10. (2)相对寻址 • 指令中给定地址的相对偏移量rel,以PC当前值为基地址,加上rel所得结果为转移目标地址。 • rel:符号数,单字节补码,-128~+127。 • 例如:1000H:JC 80H ;判C转移指令,2字节 • 分析:当CY=1时,转移,过程如下图所示:

  11. §3-2 指令系统 • 3.2.1 程序状态字PSW • 即标志寄存器,字节地址为:D0H,可字节寻址、位寻址。 • 作用:存放指令执行时有关信息、状态,供程序查询和判别。 • PSW字格式: • D7 D6 D5 D4 D3 D2 D1 D0 • CY AC F0 RS1 RS0 OV — P • PSW.7:CY,进位标志,布尔处理器的累加器C。 • PSW.6:AC,半进位标志。 • PSW.5:F0,用户标志,可置位和复位。 • PSW.4-PSW.3:RS1、RS0,指出当前工作寄存器区Rn。 • PSW.2:OV,溢出标志。CY⊕CS=1时溢出,OV=1。 • PSW.1:保留位,可单独使用,表示方法为D1H、PSW.1。 • PSW.0:P,奇偶标志,指A中“1”的个数,为奇时置1。

  12. 3.2.2 指令系统 • 一、数据传送指令 • 最基本、最主要的指令,共有29条,包括数据传送、 • 数据交换、栈操作三类。目的单元为A时影响P标志。 • 1、内部RAM间的数据传送(16条) • (1)指令格式 • 指令格式: MOV [目的字节],[源字节] • 功 能:把源字节指定的变量传送到目的字节指定 • 的存储单元中,源字节内容不变。 • (2)操作数 • 操作数:A,Rn,direct,@Ri,DPTR,#data

  13. 传送关系如下图所示:

  14. (3)指令描述举例: • 以A目的操作数 • MOV A,Rn ;(A)←(Rn) • 以Rn为目的操作数 • MOV Rn,direct ;(Rn)←(direct) • 以direct为目的操作数 • MOV direct1,direct2 ;(direct1)←(direct2) MOV direct, @Ri ;(direct)←((Ri)) • 以@Ri为目的操作数 • MOV @Ri, A ;((Ri))←(A) • MOV @Ri, #data ;((Ri))← data • 16位数据传送指令 • MOV DPTR, #data16;高8位送DPH,低8位送DPL

  15. 例3-1:设(70H)= 60H,(60H)=20H,P1为输入口,状态为0B7H,执行如下程序: • MOV R0, #70H ;(78H 70H) • MOV A, @R0 ;(E6H) • MOV R1, A ;(F9H) • MOV B, @R1 ;(87H F0H) • MOV @R0, P1 ;(A6 90H) • 结果: (70H)= 0B7H • (B) = 20H • (R1) = 60H • (R0) = 70H • 要求:掌握指令功能、查表求机器码、寻址方式、结果

  16. 例3-2:给出下列指令的执行结果,指出源操作数的寻址方式。例3-2:给出下列指令的执行结果,指出源操作数的寻址方式。 • MOV 20H, #25H • MOV 25H, #10H • MOV P1, #0CAH • MOV R0, #20H • MOV A, @R0 • MOV R1, A • MOV B, @R1 • MOV @R1,P1 • MOV P3, R1 • 结果: • (20H)=25H, (25H)=10H, (P1)=0CAH, • (R0)=20H, (A)=25H, (R1)=25H, • (B)=10H, (25H)=0CAH,(P3)=25H

  17. 2、ACC与外部数据存储器(或扩展I/O口)传递数据MOVX2、ACC与外部数据存储器(或扩展I/O口)传递数据MOVX • MOVX A, @DPTR • MOVX A, @Ri ;均为单字节指令 MOVX @DPTR, A • MOVX @Ri, A • 功能:A与外部RAM或扩展I/O口数据的相互传送。 • 说明: • (1)用Ri进行间接时只能寻址256个单元(0000H~00FF), • 当访问超过256个字节的外RAM空间时,需利用P2口确定 • 高8位地址(也称页地址),而用DPTR进行间址可访问 • 整个64KB空间。 • (2)在执行上述读、写外RAM指令时,P3.7(RD)、P3.6 • (WR)会相应自动有效。 • (3)可用作为扩展I/O口的输入/输出指令

  18. 例3-3:将外RAM 2010H中内容送 • 外RAM 2020单元中。 • 分析:读2010H中内容→A→写数据 • →2020H中 • 流程如右图: • 程序如下: • MOV P2,#20H ;输出高8位地址 • MOV R0,#10H ;置读低8位间接地址 • MOVX A,@R0 ;读2010H中数据 • MOV R1,#20H ;置写低8位间接地址 • MOVX @R1,A ;将A中数据写入2020H中

  19. 3、查表指令MOVC • 表格:程序存储器除存放程序外,还可存放一些常数,这种数 • 据的结构称为表格。 • 访问:通过两条程序存储器取数指令,即查表指令来访问, • 完成从ROM中读数,并只能送累加器A。 • 指令格式: • MOVC A,@A+DPTR ;(A)←((A)+(DPTR)) • MOVC A,@A+PC ;(PC)←(PC)+1,(A)←((A)+(PC)) • 特点:单字节指令,源操作数为变址寻址,执行时, PSEN会 • 自动有效。 • 功能:以DPTR、PC为基地址,与A中的8位无符号数相加,得 • 到一个新16位地址,将其内容送A。 • (1)用DPTR作为基寄存器

  20. 例3-4:设外部ROM的2000H单元开始的连续10个字 • 节中已存放有0~9的平方数,要求根据A中的 • 内容(0~9)来查找对应的平方值。 • START: MOV A, #3 • MOV DPTR, #TABLE MOVC A, @A+DPTR ;查表 • … • ORG 2000H ↙2003单元内容 • TABLE:DB 0,1,4,9,16,25,36,49,64,81 • 结果:A ←(2003H),(A)=09H • 特点:可访问整个ROM的64KB空间,表格可放在 • ROM的任何位置,与MOVC指令无必然的关系。

  21. (2)用PC作为基寄存器 • 例3-5: ORG 1000H • 1000H MOV A,#30H; • 1002H MOVC A,@A+PC; • 结果是:A ←(1033H) • 优点:不改变PC的状态,根据A的内容取表格常数。 • 缺点: • (1)表格只能存放在查表指令以下的256个单元内。 • (2)当表格首地址与本指令间有其他指令时,须用 • 调整偏移量,调整量为下一条指令的起始地址 • 到表格首址之间的字节数。

  22. 例3-6:阅读下列程序,给出运行结果 ,设(A)=3。 • 1000H ADD A,#02H ;加调整量 • 1002H MOVC A,@A+PC ;查表 • 1003H NOP • 1004H NOP • 1005H TAB: DB 66,77,88H,99H,‘W’,‘10’ • 结果:(A)=99H,显然,2条NOP指令没有时,不需调整。 • 4、堆栈操作 • 堆栈,由特殊功能寄存器SP(81H)管理,始终指向其栈顶 • 位置,栈底视需要设在内部RAM低128B内。 • (1)进栈操作: PUSH direct • 功能:先(SP) ←(SP)+ 1,再((SP))←(direct); • 其中:direct为源操作数;目的操作数为@SP,隐含。

  23. 例3-7:已知:(A)=30H,(B)=70H • 执行: MOV SP, #60H ;设栈底 • PUSH ACC ; • PUSH B • 结果:(61H)=30H,(62H)=70H,(SP)=62H • (2)出栈操作: POP direct • 功能:先(direct)←((SP)),再SP ←(SP)-1 • 其中:direct为目的操作数,源操作数为@SP,隐含。 • 例3-8:已知:(SP)=62H,(62H)=70H,(61H)=30H • 执行: POP DPH • POP DPL • 结果:(DPTR)=7030H,(SP)=60H

  24. 5、与A的数据交换指令 • 数据交换指令共5条,完成累加器和内部RAM单 • 元之间的字节或半字节交换。 • (1)整字节交换: • XCH A,Rn ;(A)←→(Rn) • XCH A,direct ;(A)←→(direct) • XCH A,@Ri ;(A)←→((Ri)) • (2)半字节交换: • XCHD A,@Ri ;(A)0~3←→((Ri))0~3 • (3)累加器自身高低4位交换 • SWAP A ;(A)7~4←→(A)3~0

  25. 例3-9设(A)=57H,(20H)=68H,(R0)=30H,(30H)=39H,求下列指令的执行结果例3-9设(A)=57H,(20H)=68H,(R0)=30H,(30H)=39H,求下列指令的执行结果 • (1)XCH A,20H ; • 结果:(A)=68H,(20H)=57H • (2)XCH A,@R0 ; • 结果: (A)=39H,(30H)=57H • (3)XCH A,R0 ; • 结果: (A)=30H,(R0)=57H • (4)XCHD A,@R0 ; • 结果: (A)=59H,(30H)=37H) • (5)SWAP A ; • 结果: (A)=75H

  26. 例3-10:设内部RAM 40H、41H • 单元中连续存放有4个压缩的 • BCD码数据,试编程序将这4 • 个BCD码倒序排列。 • 分析:流程如右图 • 程序如下: • MOV A, 41H • SWAP A • XCH A, 40H • SWAP A • MOV 41H,A

  27. 二、算术运算指令 • 包括+、-、×、÷、加1、减1、十进制调整指 • 令,共有24条,一般影响PSW中的CY、AC、OV、P • 标志位。 • 1、加减法指令(12条) • (1)指令助记符: • ADD + • ADDC 带C+ • SUBB 带C- • (2)操作数:如右图, • 以A为目的操作数

  28. (3)指令描述举例: • 不带进位加法 ADD 4条 • ADD A, Rn ;(A) ←(A)+(Rn) • 带进位加法指令 ADDC 4条 • ADDC A,direct ;(A) ←(A)+(direct)+(CY) • 带进位减法指令 SUBB 4条 • SUBB A,@Ri ;(A)←(A)-((Ri))-(CY) • SUBB A,#data ;(A)←(A)- #data -(CY) • 例3-11:设(A)=D3H,(30H)=E8H • 执行: ADD A,30H • 1101 0011 (D3) (—45)补 无符号数 211 • +) 1110 1000 (E8) (—24)补 232 • 1 1011 1011 • 结果:CY=1,AC=0,P=0,OV=0,(A)=BBH (补码真值-69,正确)

  29. 例3-12:设(A)=88H,(30H)=99H,CY=1 • 执行: ADDC A, 30H • 1000 1000 (88H) (-78)补 • 1001 1001 (99H) (-67)补 • +) 1 • 1 0010 0010 • 结果:CY=1,AC=1,P=0,OV=1,(A)=22H(真值34,不正确) • 例3-13:设(A)=49H,CY=1, • 执行: SUBB A, #54H • 0100 1001 (49H) • 0101 0100 (54H) • -) 1 • 1111 0100 (借位1) • 结果:CY=1,AC=0,P=0,OV=0,(A)=F4H(真值-12,正确)

  30. 例3-14:试编制4位十六进制数加法程序,假定和数超过双字节例3-14:试编制4位十六进制数加法程序,假定和数超过双字节 • (21H20H)+(31H30H)→ 42H41H40H • 分析:先低字节作不带进位求和,再作带进位高字节求和。 • 流程图(略),程序如下: • MAIN: MOV A, 20H • ADD A, 30H • MOV 40H, A • MOV A, 21H • ADDC A, 31H ;带低字节进位加法 • MOV 41H, A • MOV A, #00H ;准备处理最高位 • MOV ACC.0,C • MOV 42H, A • SJMP $

  31. 2、加1减1指令 • 助记符:INC,DEC • 操作数:A,direct,@Ri,Rn,DPTR • 指令描述:(不影响PSW,即使有进位或借位,CY也不变,除A影响P标志) • (1)INC:加1 5条 • INC A ;(A) ←(A)+1 • INC Rn ;(Rn) ←(Rn)+1 • INC @Ri ;((Ri)) ←((Ri))+1 • INC direct ;(direct) ←(direct)+1 • INC DPTR ;(DPTR) ←(DPTR)+1 • (2)DEC:减1 4条 • DEC A ;(A) ←(A)—1 • DEC Rn ;(Rn) ←(Rn)—1 • DEC @Ri ;((Ri)) ←((Ri))—1 • DEC direct ;(direct) ←(direct)

  32. 例3-15:编制下列减法程序,要求: • (31H30H)—(41H40H)→ 31H30H • 分析:流程图(略),程序如下: • MAIN:CLR C ;CY清零 • MOV R0, #30H • MOV R1, #40H • MOV A, @R0 • SUBB A, @R1 • MOV @R0,A ;存低字节 • INC R0 ;指向31H • INC R1 ;指向41H • MOV A, @R0 • SUBB A, @R1 • MOV @R0, A ;存高字节 • HERE: SJMP HERE

  33. 3、十进制调整指令 • 格式:DA A • 指令用于两个BCD码加法运算的加6修正,只影 • 响CY位。指令的使用条件: • (1)只能紧跟在加法指令(ADD/ADDC)后进行 • (2)两个加数必须已经是BCD码 • (3)只能对累加器A中结果进行调整 • 加6修正的依据:由CPU判CY、AC是否=1?A中 • 的高、低4位是否大于9? • 例如:(A)=56H,(R5)=67H,(BCD码)执行: • ADD A,R5 • DA A • 结果:(A)=23H,(CY)=1

  34. 例3-16:试编制十进制数加法程序(单字节BCD加法),假定和数为单字节,要求:例3-16:试编制十进制数加法程序(单字节BCD加法),假定和数为单字节,要求: • (20H)+(21H)→ 22H • 分析:流程如右图 • 程序如下: • MOV R0, #20H • MOV A, @R0 • INC R0 • ADD A, @R0 • DA A • INC R0 • MOV @R0,A

  35. 例3-17:十进制减法程序(单字节BCD数减法) • 要求:(20H)—(21H) → 22H • 分析:主要要考虑到,DA A只能对加法调整,故必须先化 • BCD减法为加法做,关键为求两位十进制减数的补码 • (9AH-减数) • 流程如右图,程序如下: • CLR C • MOV R0, #20H • MOV R1, #21H • MOV A, #9AH • SUBB A, @R1 ;求补 • ADD A, @R0 ;求差 • DA A • INC R1 • MOV @R1, A ;存结果

  36. 4、乘除法指令 • 唯一两条单字节4机器周期的指令。 • (1)8位无符号数乘法指令 • MUL AB;(B 15~8 )( A7~0)←(A)×(B) • PSW: 1)若乘积大于256,OV=1;否则OV=0; • 2)CY总是清“0”。 • 例如:(A)=50H,(B)=A0H,执行MUL AB后 • 结果:(B)=32H,(A)=00H,(OV)=1 • (2)8位无符号除法指令 • DIV AB; (A)←(A/B)的(商) • ; (B)←(A/B)的(余数) • PSW: 1)CY、OV,清“0” • 2)若(B)=0,OV=1。 • 例如:(A)=2AH,(B)=05H,执行DIV AB后 • 结果:(A)=08H,(B)=02H,(OV)=0

  37. 例3-18:双字节乘法程序,要求: • (R0R1)×(R2)→R3R4R5 • 分析:设(R0)=J,(R1)=K,(R2)=L,则: MOV A, R1 J K • MOV B, R2 ×) L • MUL AB KL高 KL低 • MOV R5, A +)JL高 JL低 • MOV R4, B R3 R4 R5 • MOV A, R0 • MOV B, R2 • MUL AB • ADD A, R4 • MOV R4, A • MOV A, B • ADDC A, #00H • MOV R3, A

  38. 例3-19:编制将A中的数转换成三位BCD码程序,百位放在例3-19:编制将A中的数转换成三位BCD码程序,百位放在 • 20H,十位、个位放在21H中。 • 分析:(A)/100→商(百位) →(20H); • 余数/10 →商(十位)→(21H)7~4; • 余数 (个位)→(21H)3~0; • 流程如右图,程序如下: • MOV B, #100 • DIV AB • MOV 20H, A • MOV A, B • MOV B, #10 • DIV AB • SWAP A • ADD A, B • MOV 21H, A • SJMP $

  39. 三、逻辑运算指令 • 逻辑运算类指令共24条,涉及A时,影响P标志。 • 1、基本与、或、异或运算指令 • (1)指令助记符:ANL、ORL、XRL • (2)操作数:如下图

  40. (3)指令描述举例: • 逻辑“与”指令 6条 • ANL A, Rn ;(A)←(A)∧(Rn) • ANL A, direct ;(A)←(A)∧(direct) • 逻辑“或”指令 6条 • ORL A, @Ri ;(A)←(A)∨((Ri)) • ORL A, #data ;(A)←(A)∨ data • 逻辑“异或”指令 6条 • XRL direct,A ;(direct)←(direct)⊕(A) • XRL direct,#data ;(direct)←(direct)⊕ data • 当用于修改输出口(P0~P3)时,direct指口锁存器的内容 • 而不是端口引脚电平。

  41. 2、对A简单逻辑指令 • 1)清零与取反 • CLR A ;清0 • CPL A ;求反 • 2)循环移位指令 • RL A ; • RLC A ; • RR A ; • RRC A ; • 例3-20:按要求编程,完成下列各题: • 1)选通工作寄存器组中0区为工作区。 • 2)利用移位指令实现累加器A的内容乘6。 • 3)将ACC的低4位送P1口的低4位,P1口的高4位不变。

  42. 例3-20解: • 1) ANL PSW,#11100111B ;PSW的D4、D3位为00 • 2) CLR C • RLC A ;左移一位,相当于乘2 • MOV R0, A • CLR C • RLC A ;再乘2,即乘4 • ADD A, R0 ;乘2 + 乘4 = 乘6 • 3) ANL A, #0FH ;高4位屏蔽(清0) • ANL P1, #F0H ;P1低4位清0 • ORL P1, A ;(P1.3~1.0)←(A3~0)

  43. 例3-21:设在外RAM 2000H中放有两个BCD数,编程,使这 • 两个BCD码分别存到2000H和2001H的低4位中。 • 分析:流程如图 • 程序如下: • MOV DPTR,#2000H • MOVX A, @DPTR • MOV R0, A • ANL A, #0FH • MOVX @DPTR,A • MOV A, R0 • ANL A, #0F0H • SWAP A • INC DPTR • MOVX @DPTR,A

  44. 四、位操作指令 • 布尔处理器C,可寻址内部RAM中的可寻址位: • bit = 00~FFH,和SFR中的可寻址位。 • 位地址的描述形式: • (1)直接位地址,如MOC C, 70H • (2)字节地址+位地址,如20H.1,ACC.4,PSW.4等 • (3)位寄存器名称,如F0,C,RS1,RS0等 • (4)伪指令定义过的位名称 • 注意: • CY----直接地址,是位寻址; • C ----位寄存器,为寄存器寻址。 • 例如: CLR CY ;机器码C2 D7H • CLR C ;机器码C3H

  45. 1、位传送指令 • MOV C, bit • MOV bit, C • 例如: MOV C, 06H • MOV P1.0, C •  2、位变量修改指令 • CLR C ;(C) ←0 • CLR bit ;(bit) ←0 • CPL C ;(C) ←( ) • CPL bit ;(bit) ←( ) • SETB C ;(C) ←1 • SETB bit ;(bit) ←1 • 例如: SETB P1.0

  46. 3、位变量逻缉“与”指令 • ANL C, bit ;(C)←(C)∧(bit) • ANL C, / bit ;(C)←(C)∧( ) • 例如:设P1为输入口,P3为输出口,执行程序 • MOV C, P1.0 • ANL C, P1.1 • ANL C, /P1.2 • MOV P3.0,C • 结果:P3.0 = P1.0 ∧ P1.1 ∧ /P1.2。 • 4、位变量逻缉“或”指令 • ORL C, bit ;(C)←(C)∨(bit) • ORL C, / bit ;(C)←(C)∨( )

  47. 例如:设P1为输出口,执行下列程序,指出功能:例如:设P1为输出口,执行下列程序,指出功能: • (1) MOV C, 00H • ORL C, 01H • MOV P1.7, C • (2) MOV P1, #00H • LOOP: SETB P1.0 • LCALL DELAY • CLR P1.0 • LCALL DELAY • AJMP LOOP • (3) • LOOP: SETB C • RLC A • MOV P1, A • LCALL DELAY • JNB ACC.7, LOOP

  48. 例3-22 将位地址40H、41H中的内容进行异或,结果 • 存入42H中。 • 分析:运算公式:Y= A⊕B= • 程序如下: • MOV C, 41H • ANL C, /40H • MOV 42H,C • MOV C, 40H • ANL C, /41H • ORL C, 42H • MOV 42H,C

  49. 五、控制转移指令(22条) • 1、无条件转移指令

  50. 无条件转移应用举例: • 1)1030H:AJMP 100H ;机器码为2100H • 目的地址:PC=1032H的高5位+ 100H的低11位 • = 00010 + 001 0000 0000 = 1100H • 2)0000H:AJMP 40H ;程序转移到0040H • 3)1100H:SJMP 21H ;目标地址为1123H • 4)1000H:SJMP NEXT;目的地址NEXT=1020H • 则:相对地址rel =1EH(补码数) • 5)0060H:SJMP FEH ;踏步指令 • 目的地址:PC =(PC)+ 2 + FEH • = 0060H +2 +FFFEH = 0060H • 6)0000H:LJMP 0030H ;

More Related