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

下载本文档

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

文档简介

1、第三章 汇编语言程序设计3.1 3.1 汇编语言汇编语言3.1.1 3.1.1 指令和程序设计语言指令和程序设计语言3.1.2 3.1.2 指令格式指令格式3.1.1 3.1.1 指令和程序设计语言指令和程序设计语言指令:指令:是是CPU根据人的意图来执行某种操作的命令。根据人的意图来执行某种操作的命令。程序设计语言:程序设计语言:是实现人机交换信息的基本工具,是实现人机交换信息的基本工具,分为机器语言、汇编语言和高级语言。分为机器语言、汇编语言和高级语言。机器语言:机器语言:用二进制编码表示每条指令,是计算机用二进制编码表示每条指令,是计算机能直接识别和执行的语言。能直接识别和执行的语言。把

2、把10放到累加器放到累加器A中中01110100 00001010Mov A, #0AH汇编语言:汇编语言:是用助记符、符号和数字等来表示指令是用助记符、符号和数字等来表示指令的程序设计语言。它与机器语言指令是一一对应的。的程序设计语言。它与机器语言指令是一一对应的。把把10放到累加器放到累加器A中中01110100 000010103.1.2 3.1.2 指令格式指令格式MCS-51单片机汇编语言指令格式单片机汇编语言指令格式操作码操作码 目的操作数目的操作数,源操作数,源操作数;注释;注释汇编语言指令对应的二进制代码格式汇编语言指令对应的二进制代码格式单字节指令单字节指令双字节指令双字节指

3、令三字节指令三字节指令3.3 3.3 MCS-51 MCS-51 指令系统指令系统概述:概述:MCS-51MCS-51 指令系统由指令系统由 111111 条指令组成。条指令组成。其中,单字节指令其中,单字节指令 4949 条,双字节指令条,双字节指令 4545 条,条,三字节指令三字节指令 1717 条。条。从指令执行时间看,单周期指令从指令执行时间看,单周期指令 6464 条,双周期条,双周期4545 条,只有乘、除指令为条,只有乘、除指令为 4 4 个周期。个周期。MCS-51MCS-51指令系统可分为五大类指令系统可分为五大类1 1 数据传送指令:数据传送指令:2828条条2 2 算术

4、运算指令:算术运算指令:2424条条3 3 逻辑运算及移位指令:逻辑运算及移位指令:2525条条4 4 控制转移指令:控制转移指令:1717条条5 5 位操作指令(布尔操作):位操作指令(布尔操作):1717条条 3.3.1 3.3.1 数据传送指令数据传送指令 1.1.以累加器以累加器A A为目的操作数的指令为目的操作数的指令 (4(4条条, ,即即4 4种寻址方式种寻址方式) ) 2. 2.以寄存器以寄存器RnRn为目的操作数的指令(为目的操作数的指令(3 3条)条) 3.3.以直接地址为目的操作数的指令(以直接地址为目的操作数的指令(5 5条)条) 4.4.以间接地址为目的操作数的指令(

5、以间接地址为目的操作数的指令(3 3条)条) 5. 5.十六位数据传送指令十六位数据传送指令(1(1条条) ) 6. 6.查表指令(查表指令(2 2条)条) 7.7.累加器累加器A A与片外与片外RAMRAM传送指令传送指令(4(4条条) ) 8.栈操作指令(二条) 9.9.交换指令交换指令(4(4条条) )汇编指令格式机器码格式操作注释MOV A,Rn;1110 1rrr(Rn) 将工作寄存器 Rn(即R0R7)内容传送到累加器A 中MOV A,direct;1110 0101direct(direct) 将直接寻址所得的片内RAM 单元内容或特殊功能寄存器中的内容传送到累加器A 中1.1.

6、以累加器以累加器A A为目的操作数的指令为目的操作数的指令(4(4条条, ,即即4 4种寻址方式种寻址方式) )MOV A,Ri;1110 011i(Ri) 将间接寻址(Ri 为 R0或 R1)所得的片内 RAM单元内容或特殊功能积存器中的内容传送到累加器A中MOV A,#data;0111 0100data #data 将立即数传送到累加器A中例:30H数据为11H,R1为30HMOV AMOV A,#30H #30H MOV AMOV A, 30H 30H MOV AMOV A,R1R1MOV AMOV A,R1R1(A A)=30H=30H(A A)=11H=11H(A A)=11H=1

7、1H(A A)=30H=30H 2 2 、以寄存器、以寄存器RnRn为目的操作数的指令(为目的操作数的指令(3 3条)条)汇编指令格式 机器码格式操作注释MOV Rn,A;1111 1rrr Rn将累加器 A 中内容传送到工作寄存器 Rn(即R0-R7)中MOV Rn,direct;1010 1rrrdirect(direct) Rn将直接寻址所得的片内 RAM 单元内容或特殊功能寄存器中的内容传送到工作寄存器Rn(即R0-R7)中MOV Rn,#data;0111 1rrrdata#data Rn将立即数传送到工作寄存器Rn (即R0-R7)中 直接寻址和立这组指令的功直接寻址和立这组指令的

8、功能是把源操作数所指定的内容送能是把源操作数所指定的内容送到当前工作寄存器组到当前工作寄存器组R0R7R0R7中的某中的某个寄存器。源操作数有寄存器寻个寄存器。源操作数有寄存器寻址,即数寻址三种方式。址,即数寻址三种方式。如:(如:(A A)=78H=78H,(,(R5R5)=47H=47H,(,(70H70H)=F2H=F2H,执行指令:执行指令:MOV R5MOV R5,A AMOV R5MOV R5,70H 70H MOV R5MOV R5,#A3H#A3H;(;(R5R5)=78H=78H;(;(R5R5)=F2H=F2H; (R5R5)=A3H=A3H 3 3 、以直接地址为目的操作

9、数的指令(、以直接地址为目的操作数的指令(5 5条)条) 这组指令的功能是把源操作数所指 定的 内 容 送 入由 直接 地 址direct 所指出的片内存储单元中。源操作数有寄存器寻址,直接寻址,寄存器间接寻址和立即寻址等方式。4 4 、以间接地址为目的操作数的指令(、以间接地址为目的操作数的指令(3 3条)条)汇编指令格式 机器码格式操作注释MOV Ri, A ;1111 011i(A) (Ri)将累加器A 中内容传送到间接寻址(Ri 为 R0或R1)所得的片内RAM单元中。MOV Ri, direct;0101 011i direct(direct) (Ri)将直接寻址所得的片内RAM 单

10、元内容或特殊功能寄存器中的内容传送到间接寻址(Ri 为 R0或R1)所得的片内RAM单元中MOV Ri, #data ;0111 011Idata#data (Ri)将立即数传送到间接寻址(Ri为R0或R1)所得的片内RAM单元中5 5、 十六位数据传送指令十六位数据传送指令(1(1条条) ) 这条指令的功能是把这条指令的功能是把1616位常数送入位常数送入DPTRDPTR。DPTRDPTR由由DPHDPH和和DPLDPL组成。组成。汇编指令格式机器码格式操作注释MOV DPTR, #data16;1000 0000高位字节低位字节dataH DPHdataL DPL将高 8 位立即数data

11、H 送入 DPH,低 8 位立即数dataL 送入 DPL。Back例例:M MO OV V D DP PT TR R # #1 10 00 00 0H H;(D DP PT TR R)= =1 10 00 00 0H H, (D DP PH H)= =1 10 0H H,(D DP PL L)= =0 00 0H H Back6 6 、查表指令(、查表指令(2 2条)条)汇编指令格式机器码格式操作注释MOVC A,A+DPTR;1001 0011先(PC)+1 PC,后(A)+(DPTR) A(远程查表)MOVC A, A+PC;1000 0011先(PC)+1 PC,后(A)+(PC) A

12、(近程查表)Back基地址寄存器+变址寄存器间接寻址PC+A(程序存储器0-64K)基地址寄存器+变址寄存 器间接寻址DPTR+A(程序存储器0-64K)A寄存器图图3-7 3-7 程序存贮器传送(查表)程序存贮器传送(查表)例:若:初始MOV DPTR,#2000HMOV DPTR,#2000H;MOV A, #0AH MOV A, #0AH ;MOVC A,A+DPTRMOVC A,A+DPTR;执行下面程序段后结执行下面程序段后结果如何?果如何?MOV DPTR,#2000HMOV DPTR,#2000H;MOV A, #0AH MOV A, #0AH ;MOVC A,A+DPTRMOV

13、C A,A+DPTR;(DPTRDPTR)=2000H=2000H(A A)=0AH=0AH(A A)= =(A A)+ +(DPTRDPTR)= =(200AH200AH)则:则:(A)=(200AH)=11H 所以,最后结果为:所以,最后结果为:(A)=02 (R0)=02 (A)=02 (R0)=02 (PC)=1004(PC)=1004Back7 7、 累加器累加器A A与片外与片外RAMRAM传送指令传送指令(4(4条条) ) 在 8051 指令系统中,CPU 对片外 RAM 的访问只能用寄存器间接寻址的方式,且仅有四条指令:Back汇编指令格式机器码格式操作注释MOVX A,Ri

14、;1110 001i(Ri) AMOVX A, DPTR ;1110 0000(DPTR) AMOVX Ri, A;1111 001i(A) (Ri)MOVX DPTR, A;1111 0000(A) (DPTR) 第第2 2,4 4两条指令以两条指令以DPTRDPTR为片外数据存储器为片外数据存储器1616位地址指针,寻址范围达位地址指针,寻址范围达64KB64KB。其功能是。其功能是DPTRDPTR所指定的片外数据存储器与累加器所指定的片外数据存储器与累加器A A之间之间传送数据。传送数据。第第1 1,3 3两条指令是用两条指令是用R0R0或或R1R1作低作低8 8位地址指位地址指针,由针

15、,由P0P0口送出,寻址范围是口送出,寻址范围是256256字节。这两字节。这两条指令完成以条指令完成以R0R0或或R1R1为地址指针的片外数据存为地址指针的片外数据存储器与累加器储器与累加器A A之间的传送数据。之间的传送数据。例例: : 若:片内若:片内RAM (30H)=01HRAM (30H)=01H,片外,片外RAM RAM (30H)=02H(30H)=02H,执行下面程序段后的结果如何,执行下面程序段后的结果如何。BackMOV R1, #30H;MOVX A, R1 ;MOV R0, A ;MOV A,R1 ;MOV R2, A ;(R1)=30H(A)=02H(R0)=(A)

16、=02H(A)=(R1)=01H(R2)=(A)=01H 8 、栈操作指令(二条)Back 例:例: MOV SP, #18H; MOV A, #30H; MOV DPTR, #1000H; PUSH ACC; PUSH DPH; PUSH DPL; POP DPL; POP DPH; POP ACC ; (SP)=18H(A)=30H(DPTR)=1000H(SP)=19H(19H)=30H(SP)=1AH(1AH)=10H(SP)=1BH(1BH)=00H(DPL)=00H (SP)=1AH(DPH)=10H (SP)=19H(A)=30H (SP)=18HBack 9 9、 交换指令交换

17、指令(4(4条条) )汇编指令格式机器码格式操作注释XCH A,Rn;1100 1rrr(A) (Rn)XCH A, direct;1100 0101direct(A) (direct)XCH A, Ri;1100 011i(A) ( (Ri) )Back(1)字节变换指令 将第二操作数所指定的工作寄存器 Rn(R0R7),直接寻址和间接寻址的单元内容与累加器 A 中内容互换。其操作可表示为:A 一字节 源操作数 一字节初始时:初始时:(A)=34H,(30H)=11HXCH A, 30H ;MOV R1, #30H ;XCH A, R1 ;(A)=11H,(30H)=34H(R1)=30H(

18、A)=34H,(30H)=11H(2) (2) 半字节交换指令半字节交换指令汇编指令格式机器码格式操作注释XCHD A, Ri; 1101 011i(A03) (Ri)03) 这条指令为低半字节交换指令。该指令将累加器 A 的低 4 位与 R0 或 R1 所指出的片内 RAM 单元的低 4 位数据相互交换,各自的高 4 位不变,其操作表示为:继续上例: XCHD A, R1 ; (A)=31H ; (30H)=14H3.3.2 3.3.2 算术运算指令算术运算指令 1 .1 .不带进位加法指令不带进位加法指令( (四条四条) ) 2 . 2 .带进位加法指令(四条)带进位加法指令(四条) 3

19、.3 .带借位减法指令(四条)带借位减法指令(四条) 4 .4 .乘法指令(乘法指令(1 1条)条)Back 5 5、 除法指令(除法指令(1 1条)条) 6 6、 加加1 1指令(指令(5 5条)条) 7 7、 减减1 1指令指令(4(4条条) ) 8 8、 十进制调整指令十进制调整指令(1(1条条) )Back1 1 、 不带进位加法指令不带进位加法指令( (四条四条) )BackADD A,Ri ;0010 011i(A)+(Ri) A将间接寻址(Ri为 R0 或 R1)所得的片内 RAM 单元中内容和累加器 A 中的数相加, “和”存放于累加器A中ADD A, #data;0010 0

20、100data(A)+#data A将立即数的 8 位无符号二进制数和累加器 A 中的数相加, “和”存放于累加器A中2 2 、带进位加法指令(四条)、带进位加法指令(四条)Back汇编指令格式机器码格式操作注释ADDC A, Rn ;0011 1rrr(A)+CY+(Rn) A将工作寄存器内容、CY 位和累加器 A 中的数相加, “和”存放于累加器A 中ADDC A,direct; 0011 0101direct(A)+(direct)+CY A将内部 RAM 单元内容、CY 位和累加器 A 中的 数 相 加 ,“和”存放于累加器 A 中ADDC A,Ri;0011 011i(A)+(Ri)

21、+CY A将间接寻址 (Ri为 R0 或 R1)所得的片内RAM单元中内容、 CY位和累加器 A中的数相加,“和”存放于累加器A中ADDC A, #data;0011 0100data(A)+#data+CY A将立即数的 8位无符号二进制数、CY 位和累加器 A 中的数相加, “和”存放于累加器A中 本组指令的功能是同时把源操作数所指出的内容和进位标志未 CY 都加到累加器 A 中,结果存放到 A 中,其余的功能和上面的 ADD 指令相同。本组指令常用于多字节加法。例:编程,将(30H),(31H)单元中的数与 (40H),(41H)单元中的数相加,结 果存于(30H),(31H)单元中。B

22、ackMOV A, 30HADD A, 40HMOV 30H, AMOV A, 31HADDC A, 41HMOV 31H, A3 3 、带借位减法指令(四条)、带借位减法指令(四条)Back 这组指令的功能是从累加器这组指令的功能是从累加器A A中减去中减去源操作数所指出的数及进位位源操作数所指出的数及进位位CYCY的值的值, ,差保留在累加器差保留在累加器A A中。中。由于由于80518051指令系统中没有不带借位指令系统中没有不带借位的减法指令,如需要的话,可以在的减法指令,如需要的话,可以在“SUBBSUBB”指令前用指令前用“CLR CCLR C”指令将指令将CyCy清清0 0,这一

23、点必须注意。,这一点必须注意。 4 4、 乘法指令(乘法指令(1 1条)条)汇编指令格式机器码格式操作注释MUL AB ; 1010 0100(A)(B) B15-8 A7-0将累加器 A 和寄存器 B 中两个无符号数相乘,所得 16位积的低字节存放在 A 中,高字节存放中B 中。该指令若乘积大于该指令若乘积大于0FFH0FFH,则,则OVOV置置1 1,否则,否则OVOV清清0 0。CyCy位总是被清位总是被清0 0。Back5 5、 除法指令(除法指令(1 1条)条)汇编指令格式机器码格式操作注释DIV AB ;1000 0100(A)/(B)的商 A(A)/(B)的余数 BA 中内容除以

24、 B中内容,整数商存于 A 中,余数存于B中。Back该该指指令令执执行行后后,C CY Y 和和 O OV V 均均被被清清 0 0。若若 原原(B B)= =0 00 0H H,则则结结果果无无法法确确定定,用用 O OV V= =1 1 表表示示,C CY Y 仍仍为为 0 0。 例例: (A A)= =B BF FH H, (B B)= =3 32 2H H。 执执行行指指令令“D DI IV V A AB B” 结结果果为为(A A)= =0 03 3H H, (B B)= =2 29 9H H; 标标志志位位 C CY Y= =0 0,O OV V= =0 0。 Back 6 6、

25、 加加1 1指令(指令(5 5条)条)汇编指令格式机器码格式操作注释INC A ;0000 0100(A)+1 AA 中内容加1。INC Rn;0000 1rrr(Rn)+1 RnRn 中内容加1。INC direct;0000 0101direct(direct)+1directDirect 单元中内容加1。INC Ri;0000 011I(Ri)+1 (Ri)Ri 间接寻址所得的片内 RAM 单元中内容加1。INC DPTR;1010 0011(DPTR)+1 DPTRDPTR中内容加1Back该组指令的操作不影响 PSW。若原单元内容为 FFH,加 1 后溢出为 00H,也不影响 PSW

26、标志。例:比较指令“INC A”和“ADD A,#01H”的结果。解: “INC A”指令只将 A 的内容加 1,标志位没有变化。而“ADD A,#01H”指令不仅将 A 的内容加 1,还影响标志位变化。7 7、 减减1 1指令指令(4(4条条) )汇编指令格式机器码格式操作注释DEC A ;0001 0100(A)-1 AA 中内容减1。DEC Rn;0001 1rrr(Rn)-1 RnRn 中内容减 1。DEC direct;0001 0101direct(direct)-1directDirect 单元中内容减 1。DEC Ri;0001 011I(Ri)-1 (Ri)Ri 间接寻址所得

27、的片内 RAM 单元中内容减 1。Back8 8、 十进制调整指令十进制调整指令(1(1条条) )汇编指令格式机器码格式操作注释DA A;1101 0100若(A0-3)9或AC=1,则(A0-3)+6 A0-3同时,若(A4-7)9 或 CY=1,则(A4-7)+6 A4-7调整累加器内容为BCD码。Back 这条指令跟在 ADD 或 ADDC 指令后,将相加后存放在累加器中的结果进行十进制调整,完成十进制加法运算功能。 必须注意,本指令不能简单地把累加器 A的 16 进制数变换成 BCD 码,也不能用于十进制减法的调整。例例: : 设累加器设累加器A A内容为:内容为:01010110B0

28、1010110B(即为(即为5656的的BCDBCD码),寄存器码),寄存器R3R3的内容为的内容为01100111B01100111B(即(即6767的的BCDBCD码),码),CYCY内容为内容为1 1。求执行下列指令后的结果。求执行下列指令后的结果。 ADDC AADDC A,R3R3;DA ADA A;解:先执行 ADDC A,R3; (A) :0101 0110 BCD:56 (R3) :0110 0111 BCD:67 (+) (CY) :0000 0001 BCD:01 和:1011 1110即(A)=1011 1110 且影响标志位 CY=0,AC=0; 再执行 DA A;因为

29、 A 中的高四位值为 11,大于 9,低四位值为 14,也大于 9,所以内部调整自动进行加 66H的操作: 1011 1110 调整+) 0110 0110 1 0010 0100 BCD:124即(A)=0010 0100=24BCD,CY=1;AC=1。Back 逻辑操作指令包括:与、或、异或、清除、求反、移位等操作。该指令组全部操作数都是8位25条指令。3.3.3 3.3.3 逻辑操作指令逻辑操作指令Back 1 .1 .简单操作指令(简单操作指令(2 2条)条) 2 .2 .移位指令(移位指令(4 4条)条) 3 .3 .累加器半字节交换指令累加器半字节交换指令 4. 4. 逻辑逻辑“

30、与与”指令(指令(6 6条)条) 5. 逻辑逻辑“或或”指令(指令(6条)条) 6 .6 .逻辑逻辑“异或异或”指令(指令(6 6条)条)Back1 .1 .简单操作指令(简单操作指令(2 2条)条)汇编指令格式机器码格式操作注释CLR A ;1110 01000 A清累加器 A 为 0,只影响标志位P。Back(1) (1) 累加器累加器A A清清0 0指令指令(2)(2)累加器累加器A A取反指令取反指令汇编指令格式机器码格式操作注释CPL A ;1111 0100(A) A 对累加器A 内容逐位取反,不影响标志位Back2 .2 .移位指令(移位指令(4 4条)条)汇 编 指 令 格 式

31、机 器 码 格 式操 作注 释RL A ;0010 0011 a7 a0累加器 A 的内容循环左移 一 位Back(1)(1)累加器累加器A A循环左移指令循环左移指令(2) (2) 累加器累加器A A循环右移指令循环右移指令 汇编指令格式机器码格式操作注释RR A ;0000 0011 a7 a0将累加器 A的内容循环右移一位(3) (3) 累加器累加器A A连同进位位循环左移指令连同进位位循环左移指令 RLCRLCA A ;汇编指令格式机器码格式操作注释RLC A ;0011 0011 CY a7 a0将累加器 A 的内容连同进位位CY一起循环左移一位。 我我们们通通常常用用 R RL L

32、C C A A 指指令令将将累累加加器器 A A 的的内内容容做做乘乘 2 2运运算算。 (4) (4) 累加器累加器A A连同进位位循环右移指令连同进位位循环右移指令 RRCRRCA A ;汇编指令格式机器码格式操作注释RRC A ;0001 0011 CY a7 a0将累加器 A 的内容连同进位位CY一起循环右移一位。例如:无符号例如:无符号 8 8 位二进制数位二进制数 (A A)=10111101B=BDH=10111101B=BDH, (, (CYCY)=0=0。 将(将(A A)乘)乘 2 2,执行指令,执行指令 “RLC ARLC A”后”后 结果: (结果: (A A)=011

33、1=0111 1010B=7AH1010B=7AH, (, (CYCY)=1=1, 而而 17AH17AH 正是正是 BDHBDH 的的 2 2 倍。倍。 Back3 . 3 . 累加器半字节交换指令累加器半字节交换指令 汇编指令格式机器码格式操作注释SWAP A ;1100 0100(A0-3) (A4-7)将累加器 A 的高低两半字节交换。如如:A=FAH,执执行行指指令令 “SW AP A”后后, 结结果果为为: (A)=AFH Back4. 4. 逻辑逻辑“与与”指令(指令(6 6条)条)汇编指令格式机器码格式操作注释ANL A, Rn;0101 1rrr(A)(Rn) AANL A,

34、direct;0101 0101direct(A)(direct) AANL A, Ri;0101 011i(A)(Ri) AANL A, #data;0101 0100#data(A)#data AANL direct, A;0101 0010direct(direct)(A) directANL direct,#data;0101 0011direct#data(direct)#data directBack5. 逻辑逻辑“或或”指令(指令(6条)条)汇编指令格式机器码格式操作注释ORL A, Rn;0100 1rrr(A)(Rn) AORL A,direct;0100 0101direc

35、t(A)(direct) AORL A, Ri;0100 011i(A)(Ri) AORL A, #data;0100 0100#data(A)#data AORL direct, A;0100 0010direct(direct)(A) directORL direct,#data;0100 0011direct#data(direct)#data directBack 这组指令的功能是将两个指定的操作数这组指令的功能是将两个指定的操作数按位进行逻辑按位进行逻辑“或或”,前四条指令的操,前四条指令的操作结果存放在累加器作结果存放在累加器A A中,后两条指令的中,后两条指令的操作结果存放在直接

36、地址单元中。操作结果存放在直接地址单元中。Back6 .6 .逻辑逻辑“异或异或”指令(指令(6 6条)条)Back 这组指令的功能是将两个指定的操作数这组指令的功能是将两个指定的操作数按位进行按位进行“异或异或”,前四条指令的结果,前四条指令的结果存放在累加器存放在累加器A A中,后两条指令的操作结中,后两条指令的操作结果存放在直接地址单元中果存放在直接地址单元中。上述逻辑操作类指令归纳如图。这类指上述逻辑操作类指令归纳如图。这类指令的操作均只影响标志位令的操作均只影响标志位P P。Back3.3.4 控制程序转移类指令控制程序转移类指令 1 . 无条件转移指令(无条件转移指令(4条条) 2

37、 . 空操作指令(空操作指令(1条)条) 3 . 条件转移指令(条件转移指令(8条)条) 4 . 调用和返回指令调用和返回指令Back 一个计算机“智商”的高低,取决于它的转移类指令的多少,特别是条件转移指令的多少。计算机运行过程中,有时因为操作的需要,程序不能按顺序逐条执行指令,需要改变程序的运行方向,即将程序跳转到某个指定的地址再顺序执行下去。某些指令具有修改程序计数器 PC 内容的功能,因为 PC 内容是将要执行的下一条指令的地址,所以计算机执行这类指令就能够控制程序转移到新的地址上去执行。 8051 单片机有丰富的转移类指令(17 条) ,包括无条件转移、条件转移和调用指令及返回指令等

38、。所有这些指令的目标地址都是在 64K 字节程序存储器地址空间范围内。Back1、无条件转移指令(、无条件转移指令(4条)条) 无条件转移指令是当程序执行到该指令时,程序无条件的转移到指令所提供的地址处执行。无条件转移指令有长转移、短转移、相对转移和间接转移 4 条指令。Back(1)绝对转移指令绝对转移指令 汇编指令格式机器码格式操作注释AJMP addr11 ;a10a9a8 0 0001a7 a0先(PC)+2 PC,addr11 PC100,(PC1511)不变Back 这条指令提供了11位地址,可在2K范围内无条件转移到由a10-a0所指出的地址单元中。因为指令只提供低11位地址,高

39、5位为原PC11-15位值,因此,转移的目标地址必须在AJMP指令后面指令的第一个字节开始的同一2K字节范围内。Back (2) 长转移指令长转移指令 LJMP add16 ; ,add16 PC00000010a15-a8a7-a0Back 指令提供 16 位目标地址,将指令的第二、第三字节地址码分别装入 PC 的高 8 位和低 8 位中,程序无条件转向指定的目标地址去执行。由于直接提供 16 位目标地址,所以程序可转向 64K 程序存储器地址空间的任何单元。Back(3) 短转移(相对转移)指令短转移(相对转移)指令BackSJMP rel ;先(PC)+2 PC 后(PC)+rel PC

40、 例如, 在 (PC) =0100H 地址单元有条 “SJMPrel”指令,若 rel=55H(正数) ,则正向转移到0102H+0055H=0157H 地址上;若 rel=F6H(负数)则反向转移到 0102H+FFF6H=00F8H 地址上。在用汇编语言程序是,rel 可以是一个转移目的地址的标号,由汇编程序在汇编过程中自动计算偏移地址,并且填入指令代码中;在手工汇编时,我们可用转移目的地址减转移指令所在源地址,再减转移指令字节数 2 得到偏移字节数 rel。Back(4) 间接转移指令间接转移指令01110011JMP A+DPTR;, (A)+(DPTR) PCBack 该指令的转移地

41、址由数据指针DPTR 的 16 位数和累加器 A 的 8 位数作无符号数相加形成,并直接送入。指令执行过程对 DPTR、A 和标志位均无影响。这条指令可代替众多的判别跳转指令,具有散转功能。2 空操作指令(空操作指令(1条)条) 这是一条单字节指令,除 PC 加 1 外,不影响其它寄存器和标志位。 “NOP”指令常用于产生一个机器周期的延迟。NOP ;00000000(PC)+1 PCBack3 条件转移指令(条件转移指令(8条)条)BackJZ rel ;01100000相对地址(rel)(PC)+2 PC当A= 全 “ 0 ”, 则 ( PC ) = ( PC ) +rel当 A=/全“0

42、” ,程序顺序执行(1) (1) 判零转移指令判零转移指令 JZ 和 JNZ 指令分别对累加器 A 的内容为全零和不为零进行检测并转移,当不满足各自的条件时,程序继续往下执行,当各自的条件满足时,则程序转向指定的目标地址。其目标地址是以下一条指令第一个字节的地址为基础加上指令的第二各字节中的相对偏移量。相对偏移量为一个带符号的 8 位数, 偏移范围为-128+127 字节,在指令汇编和手工汇编时被确定,它是目标地址于下条指令地址之差。本指令不改变累加器 A 内容和影响任何标志位。BackBack(2)比较转移指令(比较转移指令(4条)条)BackCJNE(目的字节) , (源字节) ,rel

43、;三字节指令CJNE A,direct, rel ;10110101directrel(PC)+3 PC 若(direct)(A) , 则(PC)+rel PC 且 1 Cy 若(direct)=(A) ,则顺序执行CJNE A, #data, rel ;10110100#datarel(PC)+3 PC 若#data (A) , 则(PC)+rel PC 且 0 Cy 若#data (A) , 则(PC)+rel PC 且 1 Cy 若#data =(A) , 则顺序执行。CJNE Rn, #data,rel ;10111rrr#datarel(PC)+3 PC 若#data (Ri), 则

44、(PC)+rel PC 且 1 Cy 若#data = (Ri),则顺序执行1011011i#datarelBack 由于这是条三字节指令由于这是条三字节指令,取出第取出第三字节三字节(rel),(PC)=3指向下条指令的第指向下条指令的第一字节地址一字节地址,然后对源字节数和目的然后对源字节数和目的字节数进行比较字节数进行比较,判比较结果判比较结果.由于这由于这时的当前值已是时的当前值已是(PC)+3,因此因此,程序的程序的转移范围应从转移范围应从(PC)+3为起始地址的为起始地址的+127-128字节单元地址。字节单元地址。(3)循环转移指令(循环转移指令(2条)条)DJNZ Rn,REL

45、 ;11011rrrrel(PC)+2 PC (Rn)-1 Rn当(Rn)=/0,则(PC)+rel PC当(Rn)=0,则顺序执行BackDJNZ direct,rel ;11010101directrel(PC)+3 PC (direct)-1 direct 当(direct)=/0,则(PC)+rel PC 当(direct)=0,则结束循环,程序往下执行 程序每执行一次本指令,将第一操作数的字节程序每执行一次本指令,将第一操作数的字节变量减变量减1,并判字节变量是否为零,若不为,并判字节变量是否为零,若不为0,则转移到目标地址,继续执行循环程序段;若则转移到目标地址,继续执行循环程序段

46、;若为为0,则结束循环程序段的执行,程序往下执,则结束循环程序段的执行,程序往下执行。行。其中,其中,rel为相对于为相对于DJNZ指令的下一条指令的指令的下一条指令的第一个字节相对偏移量,用一个带符号的第一个字节相对偏移量,用一个带符号的8位位数表示。所以,循环转移的目标地址应为数表示。所以,循环转移的目标地址应为DJNZ指令的下条指令地址和偏移量之和。指令的下条指令地址和偏移量之和。Back4 调用和返回指令调用和返回指令 在程序设计中,有时因操作要求,需反复执行某段程序,是这段程序能被公用。这样可减少程序编写和调试的工作量,于是引进了主程序和子程序的概念。指令系统中一般都有主程序调用子程

47、序的指令和从子程序返回主程序的指令。通常把具有一定功能的公用程序段作为子程序,子程序的最后一条指令为返回主程序指令(RET) 。主程序转子程序以及子程序返回主程序的过程入图所是。Back(1)长调用指令长调用指令LCALL addr16 ;00010010addr8-15addr0-7(PC)+3 PC 断点值(SP)+1 SP(PC0-7) (SP)(SP)+1 SP 压入断点(PC8-15) (SP) addr0-15 PCBack例如:设(SP)=07H,符号地址“SUBRTUN” 指向程序存储器的5678H(PC)=0123H。从0123H处执行指令 LCALL SUBRTUN执行结果

48、: (PC)+3=0123H+3=0126H,先后压入堆栈: (SP) +1=08H 压入 26H, (SP) +1=09H压入 01H, (SP)=09H。SUBRTUN=5678H 送入 PC,即(PC)=5678H,程序转向目标地址以 5678H 为首的子程序执行。Back(2)绝对调用指令绝对调用指令Back 绝对调用指令提供了绝对调用指令提供了11位目位目标地址,限定在标地址,限定在2K地址空间内地址空间内调用。调用。 (PC)+2 PC, 断点值 (SP)+1 SP (PC07) (SP) 压入断点 (SP)+1 SP (PC815) (SP) addr110 PC010(2KB

49、区内地址) (PC1115)不变ACALL addr11 ;a10a9a810001addr07例如:设符号地址“SUBRTN”所对应的程 序存储器实际地址为0345H,在 (PC)=0123H处 执行指令ACALL SUBRTN执行结果: (PC)+2=0123H,压入堆栈, (SP)+1=07H+1=08H 单元压入 25H, (SP)+1=08H+1=09H 压入 01H。 (SP)=09H,SUBRTN=0345H 送PC, (PC)=0345H,程序转向子程序首地址 0345H 单元开始执行。这里 PC值得高 5 为内容不变,仅把 123H 变成 345H。寻址在 0125H 为起始

50、地址的同一个 2K 字节范围内。Back(3)返回指令(返回指令(2条)条)RET;00100010(SP) PC8-15, 弹出断点高 8 位(SP)-1 SP(SP) PC0-7, 弹出断点低 8 位(SP)-1 SPBack RET 指令是从子程序返回。当程序执行到本指令时,表示结束子程序的执行,返回调用指令(ACALL 或 LCALL)的下一条指令处(断电)继续往下执行。因此,它的主要操作是将栈顶的断点地址送 PC,即 (SP) PC8-15 , (SP)-1 SP ;(SP) PC0-7 , (SP)-1 SP。于是,子程序返回主程序继续执行。00110010RETI ;(SP) P

51、C8-15,(SP)-1 SP(SP) PC0-7, (SP)-1 SP RETI 指令是中断返回指令,除具有“RET”指令的功能外,还将开放中断逻辑。Back3.3.5 3.3.5 位操作位操作( (布尔处理布尔处理) )类指令类指令(17(17条条) ) 1 1、位数据传送指令(、位数据传送指令(2 2条)条) 2、位修正指令(位修正指令(6 6条)条) 3 3、逻辑运算指令(、逻辑运算指令(4 4条)条) 4 4、位条件转移类指令(、位条件转移类指令(5 5条)条)Back在进行位操作时,进位标志位CY布尔累加器(位累加器),简写成C。位寻址区: 片内RAM字节地址20H2FH单元中连续

52、的128位(位地址00H7FH)和部分特殊功能寄存器SFR。 位地址的表达方式:位地址的表达方式:接写位地址:接写位地址: 如如D4H;D4H;点操作符号:点操作符号: 如如PSW.4(D0H).4;PSW.4(D0H).4;位名称方式:位名称方式: 如如RS1RS1;用户定义名方式:如用伪指令用户定义名方式:如用伪指令bitbit例:SUB.REG bit RS1 经定义后,允许指令中用SUB.REG 代替 RS1。Back1 1、 位数据传送指令(位数据传送指令(2 2条)条)汇编指令格式机器码格式操作注释MOV C,bit ; 1010 0010位地址(bit)(bit) CMOV bi

53、t,C ; 1001 0010位地址(bit)(C) bit 位地址(bit)Back2、位修正指令(位修正指令(6 6条)条)汇编指令格式机器码格式操作注释CLR C ;1100 00110 CCLR bit ;1100 0010位地址(bit)0 bitBack(1)(1)位清0指令(2)位置位置1 1指令(指令(2 2条)条)汇编指令格式机器码格式操作注释SETB C ;1101 00111 CSETB bit ;1101 0010位地址(bit)1 bitBack(3)位取反指令(位取反指令(2 2条)条)汇编指令格式机器码格式操作注释CPL C ;1011 0011(C) CCPL

54、bit ;1011 0010位地址(bit)(bit) bitBack3 3、 逻辑运算指令(逻辑运算指令(4 4条)条)汇编指令格式机器码格式操作注释ANL C,bit ;1000 0010位地址(bit)(C) (bit) CANL C,/bit ; 1011 0000位地址(bit)(C)(bit) CBack(1 1)位逻辑)位逻辑“与与”指令(指令(2 2条)条)例:若位地址(20H)=1, 位累加器(C)=0 执行指令:ANL C,/20H ; 后的结果: (C)=0, (20H)=1。 而执行指令: CPL 20H ; ANL C,20H; 后的结果: (C)=0, (20H)=

55、0。Back(2 2)位逻辑)位逻辑“或或”指令(指令(2 2条)条)汇编指令格式机器码格式操作注释ORL C,bit ;0111 0010位地址(bit)(C) (bit) CORL C,/bit ; 0101 0000位地址(bit)(C)(bit) CBack4 4、位条件转移类指令(、位条件转移类指令(5 5条)条)(1) 判布尔累加器 C 转移指令(2 条)Back汇编指令格式机器码格式操作注释JC rel ;0100 0000相对地址(rel)先 PC+2 PC若(C)=1,则(PC)+rel PC若(C)=0,则顺序往下执行JNC rel ;0101 0000相对地址(rel)先

56、 PC+2 PC若(C)=0,则(PC)+rel PC若(C)=1,则顺序往下执行Back(2 2)判位变量转移指令()判位变量转移指令(2 2条)条)汇编指令格式机器码格式操作JB bit, rel ; 0010 0000位地址(bit)相对地址(rel)先 PC+3 PC ,若(bit)=1,则(PC)+rel PC若(bit)=0,则顺序往下执行JNB bit,rel;0011 0000位地址(bit)相对地址(rel)先 PC+3 PC ,若(bit)=0,则(PC)+rel PC若(bit)=1,则顺序往下执行(3)判位变量并清判位变量并清0 0转移指令(转移指令(1 1条)条)汇编

57、指令格式机器码格式操作JBC bit,rel;0001 0000位地址(bit)相对地址(rel)先 PC+3 PC ,若(bit)=1,则(PC)+rel PC,0 bit若(bit)=0,则顺序往下执行3.4.1汇编语言的构成用用MCS-51汇编语言编写的源程序行(一条汇编语言编写的源程序行(一条语句)包括四个部分,也叫四个字段:语句)包括四个部分,也叫四个字段:标号:标号:操作码操作码操作数操作数;注释注释 每个字段之间要用分隔符分隔,而每个字段内部不能使用分每个字段之间要用分隔符分隔,而每个字段内部不能使用分隔符。可以用作分隔符的符号:空格隔符。可以用作分隔符的符号:空格“ ”、冒号、

58、冒号“:”、逗号逗号“,”、分号、分号“;”等。等。例:例:SAVE:MOV A,#00H;立即数;立即数00HA标号标号是用户定义的符号地址。标号是用户定义的符号地址。一条指令的标号是该条指令的符号名字,标号的值是汇编这一条指令的标号是该条指令的符号名字,标号的值是汇编这条指令时指令的地址。条指令时指令的地址。标号由以英文字母开始的标号由以英文字母开始的18个字母或数字组成,以冒号个字母或数字组成,以冒号“:”结尾。结尾。标号可以由赋值伪指令赋值,如果没有赋值,汇编程序把存标号可以由赋值伪指令赋值,如果没有赋值,汇编程序把存放该指令目标码第一字节的存储单元的地址赋给该标号,所放该指令目标码第

59、一字节的存储单元的地址赋给该标号,所以,标号又叫指令标号。以,标号又叫指令标号。操作码操作码是必不可少的。操作码是必不可少的。它用一组字母符号表示指令的操作码。在它用一组字母符号表示指令的操作码。在MCS-51中,由中,由MCS-51的指令助记符组成。的指令助记符组成。操作数汇编语言指令可能要求或不要求操作数,所以这一字段可能有也可能没汇编语言指令可能要求或不要求操作数,所以这一字段可能有也可能没有。有。若有两个操作数,操作数之间用逗号若有两个操作数,操作数之间用逗号“,”分开。分开。操作数包括的内容有:操作数包括的内容有:(1)工作寄存器:由)工作寄存器:由PSW.3和和PSW.4规定的当前

60、工作寄存器区中的规定的当前工作寄存器区中的R0R7。(2)特殊功能寄存器:)特殊功能寄存器:21个个SFR的名字。的名字。(3)标号名:赋值标号)标号名:赋值标号由汇编指令由汇编指令EQU等赋值的标号;指令标号等赋值的标号;指令标号指指令标号指示的指令的第一字节地址是该标号的值。令标号指示的指令的第一字节地址是该标号的值。(4)常数:可用二进制()常数:可用二进制(B)、十进制、十六进制()、十进制、十六进制(H),若常数以字),若常数以字符开头,前面加符开头,前面加0。(5)$:用来表示程序计数器的当前值。:用来表示程序计数器的当前值。(6)表达式:汇编时,计算出表达式的值填入目标码。)表达

温馨提示

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

评论

0/150

提交评论