1、第四章 MCS51单片机 指令系统,4.1 指令格式 4.2 MCS-51指令寻址方式 4.3 MCS51指令系统,汇编语言指令格式:标号: 操作码 操作数1,操作数2 ;注释(换行表示一条指令结束) 例: START: MOV A ,#40H ;取参数,标 号:指令的符号地址。 操作码:指明指令功能。 操作数:指令操作对象:数据、地址、寄存器名及约定符号。 注释行:说明指令在程序中的作用。,MOV_move 传送 XCH_exchange 交换 ANL_and logic 与逻辑运算 XRL_exclusive or 异或运算 MUL_Multiply 乘法 RR_rotate right
2、右循环 SJMP_short jump 短跳转 RET_return 子程序返回,4.1 指令格式,操作码和操作数是指令主体。,机器语言指令格式,操作码 操作数1 操作数2有单字节、双字节和三字节指令。,汇编语言指令中操作码和操作数是指令主体,称为指令可执行部分,指令表中可查出对应指令代码。(见课本269页指令表),举例: 汇编语言: 机器语言: MOV A,R0 E8H MOV R6,#32H 7E 32H MOV 40H,#100H 75 40 64H,11101000,4.2 MCS-51指令寻址方式,4.2.1 操作数类型 位 (b) 位寻址区和可位寻址寄存器中的一位二进制数据 字节(
3、B) 8位二进制数据 字 (W) 16位双字节数据,寄存器寻址直接寻址寄存器间接寻址立即寻址基址加变址寻址相对寻址位寻址,七种寻址方式,4.2.2 操作数寻址方式,例: MOV A,R0 ;AR0设指令执行前:A=02H,R0=40H, 执行指令后: A= ? ,R0= ?, 若访问工作寄存器(R0R7)将访问其映射的数据存储器; 访问特殊功能寄存器时,指令操作数为寄存器名,数据为寄存器中的值。,40H,40H,寄存器寻址方式,0100 0000,A,0000 0010,R0,0100 0000,例:设存储器两个单元的内容如图所示, 执行指令 MOV A,40H 后 A = ?,直接寻址方式,
4、56H,直接寻址:指令中操作数直接以单元地址的形式给出直接寻址可访问的空间:P46,注意:直接寻址指令中的 40H是操作数存放在存储器中的地址而不是操作数的值,寄存器间接寻址方式, 指令的操作数为寄存器名,寄存器中存放的是操作数的地址,例: MOV A,R0 ;A(R0)设指令执行前 A=20H,R0=40H,地址为40H存储器单元内容如图所示。执行指令后, A= ? ,R0 = ? , (40H)= ?,34H,40H,34H,R0,注意:寄存器前加符号表示是寄存器间接寻址,寄存器间接寻址的范围: (1)内部RAM低128字节,通用形式:MOV指令及 Ri(i1或0); (2)外部RAM的6
5、4K空间,使用间址寄存器:DPTR; 通用形式:MOVX指令,例:MOVX A, DPTR; (3)外部RAM的低256字节,除用上面的DPTR,还可用间址寄存器R0和R1去寻找片外RAM的低256字节;通用形式:MOVX 指令及Ri(i1或0); (4)堆栈操作指令(PUSH和POP), 以堆栈指针(SP)作间址寄存器的间接寻址方式。, 操作数直接出现在指令中,既操作数存放在程序存储器中,又称为“立即数”,一般用于为寄存器或数据存储器赋常数初值。,立即寻址方式,例:8 位立即数: MOV A ,# 40H ;A40H16位立即数: MOV DPTR,#2100H ;DPTR2100H,注意:
6、数值前加符号表示该数是立即数, 变址寻址方式是单片机中用于访问程序存储器的寻址方式。 数据在程序存储器中,指令给出的寄存器中为数据的基地址和偏移地址。(数据地址 = 基地址 + 偏移地址) 可充当变址寄存器的寄存器有 A ,可充当基址寄存器的寄存器有 PC、DPTR。,基址加变址寻址方式,例: MOVC A,A+DPTR ;A(A+DPTR)设指令执行前 A=09H,DPTR=2000H,存储器单元内容如图所示。执行指令后: A= ? DPTR= ?,12H,2000H, 单片机中的相对寻址方式是用于改变当前PC的值,新PC = 当前PC 相对偏移量 主要用于实现程序的相对跳转。,相对寻址方式
7、,例: 1000H: SJMP 02H;( 该指令为双字节指令 )设指令执行前 PC=1000H,执行指令后:PC = ?,1004H,注意:相对偏移量为8位补码,数值范围为128127,位寻址方式,位寻址方式是使用位地址访问位寻址区; 位地址和字节地址是通过指令来区分的: MOV A,20H ; 字节寻址 MOV C,20H ; 位寻址 可供位寻址的区域 片内RAM的20H2FH为位寻址空间(位地址:007FH) 某些SFR:其字节地址都能被8整除,共11个。,例: MOV C,40H ;设指令执行前 C = 1,位地址40H存储器单元如图,执行指令后,C = ?,位地址40H单元,0,专用
8、寄存器的寻址位在指令中的表达方式(4种):1、 直接使用位地址2、 使用位名称3、 使用单元地址加位数4、 使用专用寄存器符号加位数,指令中的常用符号 Rn: n=(07),表示当前工作寄存器R0R7中的一个 Ri: i=(0、1),代表R0和R1寄存器中的一个,用作间接寻址寄存器 dir : 8 位直接字节地址(片内 RAM 和 SFR ) #data: 8位立即数,即8位常数。可以为2进制(B)、10进制、 16进制(H)、字符( ) #data16: 表示16位立即数,即16位常数,取值范围为#0000H#0FFFFH addr16 : 表示16位地址 addr11 : 表示11位地址
9、rel : 相对偏移量(为一字节补码)用于相对转移指令中 bit :位地址,在位地址空间中。 $: 表示当前指令的地址。,课内作业,访问内部数据存储器02H单元的寻址方式有哪几种?写出访问指令。,4.3 MCS51指令系统,数据传送类指令:8种操作码 算术运算类指令:8种操作码 逻辑运算类指令:9种操作码 控制转移类指令:12种操作码 位操作类指令: 11种操作码,按功能分类,MCS51指令系统共有43条助记符,4.3.1 数据传送类指令(8条助记符),内部传送指令:片内数据存储器、寄存器数据传送( MOV )外部传送指令:片外数据存储器数据传送( MOVX )交换指令: 片内数据存储器、寄存
10、器数据传送( XCH,XCHD,SWAP )堆栈操作指令:片内数据存储器数据传送( PUSH,POP )查表指令: 程序存储器数据传送( MOVC ),传送类指令不影响PSW(除P位),指令格式: MOV 目的操作数,源操作数 寻址方式:立即寻址、直接寻址、寄存器寻址、寄存器间址。,内部传送指令:实现片内数据存储器中数据传送。,dir,Ri,Rn,#data,A,MOV A ,Rn#data dirRi,MOV dir ,A Rn Ri#data dir,MOV Rn ,MOV Ri,A dir #data,A dir #data,内部RAM、SFR之间的传送MOV指令,例 R1=20H,(2
11、0H)=55H, 指令MOV A,R1执行后,(A)=55H。 例 (40H)=30H,指令 MOV R7,40H 执行后,(R7)=30H。 例 MOV R7,40H 执行后,(R7)=40H。,例 判断下列指令的正误:MOV 29H,R7 MOV 25H,P1MOV 56H,#70H MOV 34H,28HMOV R3,R7 MOV R3,R7MOV R3,#D2H MOV #34H,28HMOV A,#280H MOV P3,P1,编程将R3的内容送R1。MOV A,R3MOV R1,A, , ,MOV指令使用注意:,1.一条指令中不能同时出现两个工作寄存器: 非法指令: MOV R1,
12、R2 MOV R2,R0MOV R0,R1,2. 间址寄存器只能使用 R0、R1。 非法指令:MOV A,R2,3. SFR区只能直接寻址或寄存器寻址,不能用寄存器间接寻址。 非法指令:MOV R0,#80H MOV A,R0,例:顺序执行下列指令序列,求每一步执行结果。,MOV A,#30H MOV 4FH,A MOV R0,#20H MOV R0,4FH MOV 21H,20H,例:用两种寻址方式实现,将片内RAM 60H单元的数据传送给累加器A。,;(A)= 30H ;(4FH)= 30H ;(R0)= 20H ;(20H)= 30H ;(21H)= 30H,MOV R0,#60H MO
13、V A,R0,解: MOV A,60H, 外部传送指令 实现片外数据存储器和A累加器之间的数据传送。,指令格式: MOVX 目的操作数,源操作数寻址方式:访问片外数据存储器只能用寄存器间址方式。,1. DPTR作16位数据指针,寻址64KB片外RAM空间 MOVX A,DPTR ;A(DPTR) MOVX DPTR,A ;(DPTR)A 2. Ri作8位数据指针,寻址256B片外RAM空间 MOVX A,Ri ;A(Ri) MOVX Ri,A ;(Ri)A,目的操作数和源操作数中必须有一个是A,MOVX指令举例 例: 实现片外数据存储器数据传送 (2000H)(2100H)。,MOV DPTR
14、,#2000HMOVX A,DPTRMOV DPTR,#2100HMOVX DPTR,A,; DPTR= 2000H,; DPTR= 2100H,; A X,;(2100H) X,x,片外数据存储器不能直接寻址。下列为非法指令:MOVX A,2000H MOVX 2100H,2000H ,使用P2口和8位寄存器Ri间址: MOV P2,#20H ;高位地址 MOV R0,#00 ;低位地址 MOVX A,R0 ;读片外RAM MOV P2,#21H ;改变高位地址MOVX R0,A ;写片外RAM, 交换指令(XCH、XCHD、SWAP) 实现片内RAM区的数据双向传送。,1.字节交换指令XC
15、H A,Rn ;A Rn XCH A,Ri ;A (Ri) XCH A,direct ;A (n),习题:将片内RAM60H单元与61H单元的数据交换。 指令 XCH 60H,61H 是否正确?,例:设A= 29H,2AH=38H,执行指令 XCH A,2AH后,(A)= ? (2AH)= ?,38H,29H,都是和A寄存器发生交换,2. 半字节交换指令,XCHD A,Ri ;A03 (Ri)03 SWAP A ;A47 A03,习题:交换片内RAM 40H单元和 41H单元的低半字节。,MOV R0, #40H MOV R1, #41H MOV A, 41H XCHD A, R0 XCHD
16、A, R1,唯一的XCHD指令,唯一的SWAP指令, 堆栈操作指令 ( PUSH、POP ) 入栈指令:PUSH direct ;SPSP+1,(SP)(n) 出栈指令:POP direct ;(n)(SP),SPSP-1,例:设 A=02,B=56H,执行下列指令后,SP= ?,A= ? ,B= ?,SBR: MOV SP,#30HPUSH A PUSH BMOV A,#06 MOV B,#08 POP B POP A,56H,02H,30H,操作数只能是直接寻址,;设栈底,;保护现场, SP 02, SP 5602,56 SP 02,5602 SP , SP ,;恢复现场, 程序存储器读取
17、指令(查表指令) 实现从程序存储器读取数据到A累加器,只能使用变址间接寻址方式。多用于查常数表程序,可直接求取常数表中的函数值。,1DPTR为基址寄存器MOVC A,A+DPTR ;A(A+DPTR) 查表范围为 64KB 程序存储器任意空间,称为远程查表指令 。 2PC为基址寄存器MOVC A,A+PC ;A(A+PC)常数表只能在查表指令后 256B 范围内。,当前PC应是下一条指令的地址,例: 查表法求Y=X2。设X(0X15)在片内RAM的20H单元中,要求将查表求Y,存入片内RAM 21H单元。,1) 用DPTR作基址寄存器ORG 1000H SQU: MOV DPTR,#TAB ;
18、确定表首地址(基地址)MOV A,20H ;取X(偏移量)MOVC A,A+DPTR ;查表求Y=X2MOV 21H,A ;保存YRET ;子程序结束 ;其它程序段ORG 3000H ;常数表格首地址 TAB: DB 00,01,04,09,225 ;平方表,2)用PC作基址寄存器指令地址 源程序ORG 1000H ;程序起始地址1000H SQU: MOV A,20H ;取X1002H ADD A,#3 ;修正偏移量1004H MOVC A,A+PC ;查表求Y=X21005H MOV 21H,A ;存结果1007H RET ;子程序结束1008H TAB: DB 00,01,04 ;平方表
19、 100BH DB 09,225,例:查表法求Y=X2。设X(0X15)在片内RAM的20H单元中,要求将查表求Y,存入片内RAM 21H单元。,思考题 当0X255时,如何用查表法编程求Y=X2,习题:找出下列指令错误并改正,1MOV A,#1000H ;A1000H 2MOVX A,1000H ;A片外RAM(1000H) 3MOVC A,1000H ;A片外ROM(1000H) 4MOVX 60H,A ;片外RAM(60H)A 5MOV R0,60H ;片内RAM:(61H)(60H) MOV 61H,R0 6. XCH R1,R2 ;R1R2 7. MOVX DPTR,#2000H;D
20、PTR2000H 8. MOVX 60H,DPTR ;片内RAM片外RAM,4.3.2 算术运算类指令(8条助记符),加法指令:ADD, ADDC, INC调整指令:DA减法指令:SUBB,DEC乘法指令:MUL 除法指令:DIV,算术运算类指令会影响PSW即执行算术运算指令后,CPU会根据数据操作情况自动设置标志位,例: (A)=3BH,(PSW)=0,执行指令: ADD A,#3BH求: (A)= ,Cy= ,OV= , AC= ,P= ,(PSW)= ?, 加法指令,0011 1011 + 0011 1011 0111 0110,01000001B= 41H,1)不带进位加法:格式: A
21、DD A,源操作数功能: AA源操作数,寄存器寻址Rn 直接寻址direct 寄存器间址Ri 立即数 data,影响Cy、AC、OV、P标志,76H,0,0,1,1,1001 10101110 0011 + 0 1 0111 1101,例:A= 9AH,R2= 0E3H,PSW= 0,执行指令 ADDC A,R2 后 求:A= ? ,Cy= ? ,OV= ?AC= ? ,P= ? ,PSW= ?,10000100B= 84H,2)带进位加法:格式: ADDC A,源操作数功能: AA源操作数C标志,寄存器寻址 Rn 直接寻址 direct 寄存器间址 Ri 立即数 data,影响Cy、AC、O
22、V、P标志,7DH,1,1,0,0,注意C标志位要参与运算,带进位加法指令ADDC用于多字节运算,例:设双字节数 X 存在片内RAM 41H、40H单元,Y存在42H、43H单元,编程求 Z=X+Y,并存入片内RAM单元44H、45H、46H。,MOV A, 40HADD A, 42HMOV 44H,AMOV A, 41HADDC A, 43HMOV 45H,AMOV A, #0ADDC A, #0MOV 46H,ARET,;取X低字节 ;加上Y低字节 ;保存Z的低字节 ;取X高字节 ;加上Y高字节 ;保存Z的高字节;求高字节进位 :存Z的最高字节 ;子程序结束,3) 增量指令,格式:INC
23、单操作数 操作:操作数操作数1,寄存器 A 寄存器 Rn 直接寻址 direct 寄存器间址 Ri 寄存器 DPTR (16位),注意该指令不影响标志位,例: INC R2 ;R2R2+1INC DPTR ;DPTRDPTR+1, BCD调整指令(二十进制加法调整):格式: DA A 操作:对 A 中的压缩BCD码加法结果进行调整,得出BCD码结果,例: ADDC A,BDA A,只有这一条调整指令,且只影响C标志,若A 30 9 或AC1,则A 30A 3006H 若A 74 9 或 C1,则A 74A 7460H,调整规则,课内作业 设4位压缩BCD数 X 存在片内RAM 41H、40H单
24、元,4位压缩BCD码数Y存在42H、43H单元,编程求 Z=X+Y,要求Z也为压缩BCD码,并存入片内RAM单元44H、45H、46H。,例:A= 5AH,R2= 6AH,Cy= 0,执行下列指令SUBB A,R2求: A= ;Cy= ;OV= ;P= ;AC=, 减法指令 1)带借位减法指令 格式: SUBB A,源操作数 操作:AAC源操作数,F0H 1 0 0 0,寄存器寻址 Rn 直接寻址 direct 寄存器间址 Ri 立即数 data,注意C标志位要参与运算,影响Cy、AC、OV、P标志,注意:指令 DEC DPTR 是非法的,可用指令 DEC DPL 代替,2) 减量指令,格式:
25、DEC 单操作数 操作:操作数操作数-1,寄存器 A 寄存器 Rn 直接寻址 direct 寄存器间址 Ri,注意该指令不影响标志位,例: DEC R2 ;R2R2-1, 乘法指令,格式: MUL AB 操 作:B,AAB 标志位:Cy0; 高字节B0时,OV0;高字节B0时,OV1,例:(A)= 96(60H), (B)= 192(C0H), 执行指令 MUL AB 后, 求:(A)= ,(B)= ,Cy= ,OV= ,P=,00H 48H 0 1 0,解: 96 192 = 18432(4800H),操作数只能是AB,中间不用逗号隔开, 除法指令,格式: DIV AB 操 作:AB,A商,
26、B余数 标志位: 除数B0时,执行结果不定,OV1,CY0 ;正常情况 OV0 ,CY0,操作数只能是AB,中间不用逗号隔开,例:A= 156(F6H),B= 13(0DH), 执行指令 DIV AB 后求: (A)= ,(B)= ,Cy= ,OV= ,P=,解: 156 13 = 18(12H),余数= 12(0CH)。,12H 0CH 0 0 0,4.3.3 逻辑运算指令,1.单操作数指令(只以A累加器为操作数) A清0指令: CLR A ;A0 A取反指令: CPL A ;A/A, 循环左移指令: RL A ; 连同进位循环左移:RLC A ;, 循环右移指令: RR A ; 连同进位循
27、环右移:RRC A ;,均不影响标志位,2.双操作数逻辑运算指令, 逻辑与指令 ANL 格式: ANL A,源操作数 格式: ANL Direct,源操作数操作:目的操作数目的操作数 & 源操作数,寄存器寻址 Rn 直接寻址 direct 寄存器间址 Ri 立即数 data,寄存器 A 立即数 data, 逻辑或指令 ORL 格式: ORL A,源操作数 格式: ORL Direct,源操作数操作:目的操作数目的操作数 or 源操作数,寄存器寻址 Rn 直接寻址 direct 寄存器间址 Ri 立即数 data,寄存器 A 立即数 data, 逻辑异或指令 XRL 格式: XRL A,源操作数
28、 格式: XRL Direct,源操作数操作:目的操作数目的操作数 源操作数,寄存器寻址 Rn 直接寻址 direct 寄存器间址 Ri 立即数 data,寄存器 A 立即数 data,例:设 A= 11000101B ,Cy= 1,分别执行下列指令: A CCPL A RL ARLC A 求:A,Cy,11000101,00111010,01110100,11101001,1,1,1,0,例:编程将寄存器 R6R5 中的双字节数X左移一位。,CLR C MOV A,R5 RLC A MOV R5,A MOV A,R6 RLC A MOV R6,A,;Cy=0, 设 R6= 55H ,R5=
29、AAH,;R6=01010101,R5=10101010,Cy=0,;R6=01010101,R5=01010100,Cy=1,;R6=10101011,R5=01010100,Cy=0,CLR C ;(MOV PSW,#00H) MOV A,R0 RLC A MOV R0,A MOV A,R1 RLC A MOV R1,A MOV A,R0 ADDC A,#0 MOV R0,A,实现:,例: A=01B,表示随机状态,为1或0,执行下述一组指令执行后A的值如何? XRL A,#0C0H ORL A,#03HANL A,#0E7H,;将累加器A的内容D7、D6取反 ;将累加器A的内容D1、D0
30、置1 ;将累加器A的内容D4、D3清0,解 :执行上述指令后,A=100011B。,4.3.4 转移指令(12条助记符),1) 绝对转移:指令给出转移目的的绝对地址 nn,执行指令后,PCnn。,2) 相对转移:指令给出转移目的与转移指令的相对偏移量e,执行指令后,PCPC + e 。,例: 地址 源程序1000H LJMP 2000H 1003H 2000H ;转移目的指令,例: 地址 源程序1000H SJMP 02 1004H ;转移目的指令,按转移方式分类,无条件转移: AJMP,SJMP,LJMP,JMP条件转移: JZ,JNZ,CJNE循环转移: DJNZ调用及返回指令:ACALL
31、,LCALL,RET,RETI,按转移条件和指令分类,1 无条件转移指令 长转移指令: LJMP Address16 ;PC nn 指令转移范围:64KB, 绝对转移指令:AJMP Address11 ;PCPC+2 ;PC100pn100;PC1511不变 指令转移范围:2KB,且要求转移时保持 PC1511不变。, 短转移指令: SJMP Rel8 ;PCPC+2,PCPC+Rel8相对偏移量 Rel8 为8位补码。 指令转移范围:前128后127字节相对偏移量 Rel8 的计算式:Rel8 =目的地址 -当前PC值=目的指令地址 -(SJMP指令地址+2),编程时,用标号代替转移目的地址
32、,转移指令的操作数交给汇编程序计算。 LJMP NEXT; AJMP NEXT; SJMP NEXT,例:计算转移指令的相对偏移量 Rel ,并判断是否超出转移范围。,例:求原地踏步指令的指令代码中的相对偏移量HERE: SJMP HERE,解:相对偏移量 = 2150H -(2130H+2)= 001EH, 只取低8位:Rel = 1EH,指令地址 源程序 2130H SJMP NEXT 2150H NEXT:MOV A,R2,相对偏移量为:0FEH,习 题:计算程序中转移指令的相对偏移量 Rel8,并判断是否超出转移范围。 地址 源程序 2130H LOOP:MOV A , B 21B0H
33、 SJMP LOOP,解:21B0H (2130H+2) = 82H = 130 128 故超出转移范围。, 间接转移指令(多分支转移指令) JMP A+DPTR ;PCA+DPTR指令转移范围:64KB。,KEY: MOV DPTR,#KTABMOV A,40HADD A,40HJMP A+DPTR KTAB: AJMP FUNC0 AJMP FUNC1 FUNC0: FUNC1: ,应 用:处理转移变量,要求根据转移变量的值执行不同的程序段。设转移变量 X(0X0FH)。设X已存入片内RAM的40H单元中。 若X=0,则执行程序段FUNC0 若X=1,则执行程序段FUNC1。,AJMP是双
34、字节指令,2 条件转移指令, 判零转移指令 JZ Rel ;PCPC+2,;若A= 00H,PCPC+e(转移) ;若A00H,PC不变(不转移),条件转移指令形成程序的分支,赋予计算机判断决策能力。,JNZ Rel ;PCPC+2,;若A00H, PCPC+Rel(转移);若A= 00H,PC不变(不转移), 比较不相等转移指令: 格式: CJNE 操作数1,操作数2,Rel,操作数来源: CJNE A, Direct, Rel CJNE A, #Data, Rel CJNE Rn, #Data, ReL CJNE Ri, #Data, Rel,3 循环转移指令格式: DJNZ 操作数,Re
35、l 操作:PCPC+2,操作数操作数-1若操作数0,PCPC+Rel,若操作数 =0,PC不变。,例:用于循环结构程序。设要求程序循环执行100次MOV R2,#100 ;设循环计数器初值 LOOP: ;多次循环程序段DJNZ R2,LOOP ;循环控制 ;循环结束,思 考:当循环计数器初值为0,循环次数有多少?,寄存器 Rn 直接寻址 direct,例:内部数据存储器从DATA变量开始的数据传递到外部数据存储器从BUFFER变量开始的地址,直到发现“$”字符的ASCII码为止,且传递数据最多不超过32个字节,MOV R0 , #DATAMOV DPTR , #BUFFERMOV R1 , #
36、20H NEXT: MOV A , R0MOVX DPTR , ACLR CSUBB A , #24H;$符的ASCII码JZ OVERINC DPTRINC R0DJNZ R1 , NEXT OVER: RET,4 子程序调用和返回指令,子程序调用和返回指令都使程序发生转移。子程序调用过程与转移指令不同,转移时,先用堆栈保存当前地址便于以后返回到转移前的地方。, 绝对调用指令 格式: ACALL Adress11操作: PCPC+2SPSP+1,(SP)PCL,SPSP+1,(SP)PCH PC100Address100 ,PC1511不变 Address11为子程序首地址指令调用范围 2K
37、B。,子程序返回指令 格式: RET 操作:PCH(SP),SPSP-1,PCL(SP),SPSP-1RET指令出现在子程序的最末尾,从堆栈中弹出LCALL或ACALL指令保存的PC地址,实现子程序的返回。,注意:1.子程序起始指令要使用标号,用作子程序名。 2. 执行返回指令RET之前,保证栈顶内容为主程序返回地址,以便正确返回主程序。,常用格式: MAIN: ;主程序LCALL SUBR ;调用SUBR SUBR: ;子程序首地址RET ;子程序返回,MAIN:MOV SP,#30H;设置栈底 LCALL SUB ;调用子程序 SUB: MOV A,#02H ;子程序段 LCALL PAR
38、TRET ;返回主程序 PART: CLR CRET,例:子程序嵌套,20H 92H ,21H 53H,4.3.5 位操作指令(11条助记符),位寻址方式是使用位地址访问位寻址区; 位地址和字节地址是通过指令来区分的: MOV A,20H ; 字节寻址 MOV C,20H ; 位寻址 可供位寻址的区域 片内RAM的20H2FH为位寻址空间(位地址:007FH) 某些SFR:其字节地址都能被8整除,共11个。,MOV C,ACC.7 MOV 20H ,C MOV 24H.0 ,C MOV EA ,C,位地址的表示方法(4种), 位寻址方式复习 ,PSW的进位标志位Cy充当位运算的累加器。 位操作
39、数除了Cy标志以外都采用直接寻址方式获得,但有4种表示方法。(寻址方式中已讲)位操作指令分类,位操作指令特点:,位传送指令 位逻辑运算指令 位条件跳转指令,1 位传送指令 (MOV)格式: MOV C,Bit ;Cy(Bit)MOV Bit,C ;(Bit)Cy,例:将位地址20H的一位数传送到位地址30H中:MOV C,20H MOV 30H,C,0,2 位逻辑运算指令(CLR,SETB,CPL,ANL,ORL) 位清零指令: CLR C ;Cy0CLR Bit ;Bit0 位置1指令: SETB C ;Cy1SETB Bit ;Bit1 位取反指令: CPL C ;Cy/BitCPL Bi
40、t ;Bit/Bit, 位与运算指令: ANL C,Bit ;CC(Bit) ANL C,/Bit ;CC/(Bit) 位或运算指令: ORL C,Bit ;CC(Bit) ORL C,/Bit ;CC/(Bit),例:设 Cy=1,(位地址40H)=1,执行指令 ANL C,/40H 后, Cy= ? , (位地址40H)= ?,0,1,MOV C, P1.1 ORL C, P1.2 ANL C, P1.0 MOV 30H, C MOV C, P1.3 ORL C, /P1.4 ANL C, 30H ANL C, /P1.5,例:,3位条件转移指令(JC,JNC,JB,JNB,JBC), 判Cy转移指令JC Rel ;Cy=1则转移,Cy=0不转移JNC Rel ;Cy=0则转移,Cy=1不转移, 判一般位y转移指令JB bit,Rel ;Bit=1则转移,Bit=0不转移JNB bit,Rel;Bit=0则转移,Bit=1不转移, 判位清0转移指令格式: JBC Bit,Rel 操作:(Bit)=1则转移,且(Bit)0,否则不转移,