650 likes | 779 Views
第三章 MCS-51 单片机指令系统 §3-1 指令格式及其操作寻址方式 §3-2 指令系统. §3-1 指令格式及其操作寻址方式 一、基本概念 1 、指令及其格式 什么是指令? 计算机认识什么样的指令? 指令能干什么? 机器指令:用 2 进制数 0 、 1 表示的命令代码。常以 16 进制表示。 机器语言:由机器指令描述的程序语言。 助记符指令:用字母和 16 进制数代替机器指令形成的符号指令 。 助记符语言:由助记符指令形成的程序语言,又称汇编语言。 MCS-51 单片机汇编语言指令格式:
E N D
第三章 MCS-51单片机指令系统 • §3-1 指令格式及其操作寻址方式 • §3-2 指令系统
§3-1 指令格式及其操作寻址方式 • 一、基本概念 • 1、指令及其格式 • 什么是指令? • 计算机认识什么样的指令? • 指令能干什么? • 机器指令:用2进制数0、1表示的命令代码。常以16进制表示。 • 机器语言:由机器指令描述的程序语言。 • 助记符指令:用字母和16进制数代替机器指令形成的符号指令。 • 助记符语言:由助记符指令形成的程序语言,又称汇编语言。 • MCS-51单片机汇编语言指令格式: • [标号:] 操作码 操作数(目的操作数,源操作数)[ ;注释]
其中: • 标 号:称符号地址,代表该指令第1字节所在的地址。 • 操作码:规定了指令将要干什么,必不可少。 • 操作数:表示参与运算作的数或数的地址。 • 注 释:可有可无,必须以“;”开始。 • 2、指令中的符号标识 • Ri、Rn、#data、#data16、addr11、addr16、 Direct、rel、bit • A:寄存器寻址的累加器; • ACC:直接寻址的累加器; • @: 间接寻址符号 • (X): X中的内容 • ((X)): 由X的内容作为地址的单元中的内容 • ←: 箭头左边的内容被右边的内容代替 • $: 本条指令的起始地址 • / : 位操作数前缀,表示取反。
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;
例如: INC R3 ;(R3)←(R3)+1 • ↑操作码 ↑操作数 • 指令中的R3即为寄存器寻址,其执行过程如下图: • 本例中:R3的“门牌号”高3位为0,决定了寻址内部RAM中 • 00H~1FH空间。 • 对于Rn:具体寄存器由指令的低3位指定。 • 对于A、B、C、DPTR:则为隐含在指令代码中。
2、直接寻址 • 在指令中含有操作数的直接地址,该地址指出了参与运算的数所在的字节单元地址或位地址(位寻址)。直接寻址的寻址范围: • (1)内部数据存储器的低128字节,00H~7FH; • (2)特殊功能寄存器,注意除A、B、DPTR外,其他 • SFR只能采用直接寻址方式。 • (3)位寻址:所有可寻址位; • 例如:MOV A, 70H ;(A)←(70H) • MOV C, 70H ;(CY)←(70H) • 注意:对累加器直接寻址和位寻址时,要用符号“ACC”或直接地址“E0H”,以区别于寄存器寻址。
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)
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))
例如:设(A)=30H,(PC)=1000H, • 执行MOVC A,@A+PC的情况如下图所示。 • 取数地址为:1001+30=1031H。 • 显然: 当(A)=00H时,新(PC)=1001H; 当(A)=FFH时,新(PC)=1100H;
(2)相对寻址 • 指令中给定地址的相对偏移量rel,以PC当前值为基地址,加上rel所得结果为转移目标地址。 • rel:符号数,单字节补码,-128~+127。 • 例如:1000H:JC 80H ;判C转移指令,2字节 • 分析:当CY=1时,转移,过程如下图所示:
§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。
3.2.2 指令系统 • 一、数据传送指令 • 最基本、最主要的指令,共有29条,包括数据传送、 • 数据交换、栈操作三类。目的单元为A时影响P标志。 • 1、内部RAM间的数据传送(16条) • (1)指令格式 • 指令格式: MOV [目的字节],[源字节] • 功 能:把源字节指定的变量传送到目的字节指定 • 的存储单元中,源字节内容不变。 • (2)操作数 • 操作数:A,Rn,direct,@Ri,DPTR,#data
(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
例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 • 要求:掌握指令功能、查表求机器码、寻址方式、结果
例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
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口的输入/输出指令
例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中
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作为基寄存器
例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指令无必然的关系。
(2)用PC作为基寄存器 • 例3-5: ORG 1000H • 1000H MOV A,#30H; • 1002H MOVC A,@A+PC; • 结果是:A ←(1033H) • 优点:不改变PC的状态,根据A的内容取表格常数。 • 缺点: • (1)表格只能存放在查表指令以下的256个单元内。 • (2)当表格首地址与本指令间有其他指令时,须用 • 调整偏移量,调整量为下一条指令的起始地址 • 到表格首址之间的字节数。
例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,隐含。
例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
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
例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
例3-10:设内部RAM 40H、41H • 单元中连续存放有4个压缩的 • BCD码数据,试编程序将这4 • 个BCD码倒序排列。 • 分析:流程如右图 • 程序如下: • MOV A, 41H • SWAP A • XCH A, 40H • SWAP A • MOV 41H,A
二、算术运算指令 • 包括+、-、×、÷、加1、减1、十进制调整指 • 令,共有24条,一般影响PSW中的CY、AC、OV、P • 标志位。 • 1、加减法指令(12条) • (1)指令助记符: • ADD + • ADDC 带C+ • SUBB 带C- • (2)操作数:如右图, • 以A为目的操作数
(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,正确)
例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,正确)
例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 $
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)
例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
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
例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
例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 ;存结果
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
例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
例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 $
三、逻辑运算指令 • 逻辑运算类指令共24条,涉及A时,影响P标志。 • 1、基本与、或、异或运算指令 • (1)指令助记符:ANL、ORL、XRL • (2)操作数:如下图
(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指口锁存器的内容 • 而不是端口引脚电平。
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位不变。
例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)
例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
四、位操作指令 • 布尔处理器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
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
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)∨( )
例如:设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
例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
五、控制转移指令(22条) • 1、无条件转移指令
无条件转移应用举例: • 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 ;