40H操作码什么意思?

当前位置: >>
第3章 指令系统(单片机)
单片机原理及应用第3章 指令系统3.1 指令格式和寻址方式3.2 指令分类介绍3.3 51指令系统汇总1 3.1 指令格式和寻址方式一、汇编语言指令格式: [标号:]操作码 操作数1,操作数2 [;注释] 换行表示一条指令结束。 例: LOOP: MOV A,#40H ;取参数1.标号:指令的符号地址。 2.操作码:指明指令功能。 3.操作数:指令操作对象。 数据、地址、寄存器名及约定符号。 4.注释行:说明指令在程序中的作用。 操作码和操作数是指令主体。MOV―move 传送 XCH―exchange 交换 ANL―and logic 与逻辑运算 XRL―exclusive or 异或运算 MUL―multiply 乘法 RR―rotate right 右循环 SJMP―short jump 短跳转 RET―return 子程序返回 二、机器语言指令格式:操作码 [操作数1] [操作数2] 有单字节、双字节和三字节指令。 汇编语言指令中操作码和操作数是指令主体,称 为指令可执行部分,指令表中可查出对应指令代码。举例: 汇编语言: MOV A,R0 MOV R6,#32H MOV 40H,#64H机器语言: E8H 7E 32H 75 40 64H01 003 三、指令寻址方式(一)操作数类型:位 (bit) ─ 位寻址区中的一位二进制数据 字节(Byte)─ 8位二进制数据 字 (Word) ─ 16位双字节数据(二)寻址方式:1.立即寻址方式:指令中给出实际操作数据(立即数),一般用于为 寄存器或存储器赋常数初值。 举例: 8位立即数: MOV A,#40H ;A?40H 16位立即数: MOV DPTR,#2100H ;DPTR?2100H 2.直接寻址方式:指令操作数是存储器单元地址,数据放在存储器单元中。MOV A,40H;A?(40H)78H 56H例:设存储器两个单元的内容如图所示, 41H 执行指令 MOV A,40H 后 A = 56H ? 40H 直接寻址方式对数据操作时,地址是固定 值,而地址所指定的单元内容为变量形式。思考题:直接寻址方式指令和立即寻址方式指令的形式有什么不同?5 3.寄存器寻址方式:指令操作数为寄存器名,数据在寄存器中。例:MOV A,R0 ;A?(R0)
A 设指令执行前 A=20H,R0=40H, 执行指令后,A= 40H ,R0 = 40H ? ?R04.寄存器间接寻址方式:指令的操作数为寄存器名,寄存器中为数据地址。 存放地址的寄存器称为间址寄存器或数据指针。例:MOV A,@R0 ;A?((R0)) 设指令执行前 A=20H,R0=40H,地址为40H20HA 41HR0→ 40H40HR0存储器单元内容如图所示。执行指令后, A= 34H ,R0 = 40H , (40H)= ? ? ? 34H67H 34H 5.变址间接寻址方式:数据在存储器中,指令给出的寄存器中为数据 的基地址和偏移量。 数据地址 = 基地址 + 偏移量。 说明:1、只对程序存储器; 2、指令形式:MOVC A,@A+DPTR MOVC A,@A+PC @A+DPTR 例: MOVC A,@A+DPTR JMP ;A?((A+DPTR)) 设指令执行前 A=09H,DPTR=2000H,存储器 单元内容如图所示。执行指令后, A= 12H ? DPTR= 2000H ?H 89H 12H 6.位寻址方式:指令给出位地址。一位数据在存储器位寻址区。 (1)内部RAM中的位寻址区:字节地址为20H~2FH; (2)专用寄存器的可寻址位:11个(83位) 表示方法:1)直接使用位地址;如:PSW的位6可表示为0D6H2)位名称表示; 3)字节地址加位数表示; 4)专用寄存器符号加位数表示。 或AC 或0D0H.6 或PSW.6例: MOV C,40H ;Cy?(位地址40H) 设指令执行前 Cy=1,位地址40H存储器单元如图, 执行指令后,Cy= ? 0 位寻址区 29H 28H101108 7. 相对寻址方式:目的地址=转移指令地址+转移指令字节数+rel (rel为偏移量) 当前PC值加上指令中规定的偏移量 rel,构 成实际的操作数地址 例: SJMP rel 操作:跳转到的目的地址 = 当前16位PC值 + rel 注意: 1)“当前PC值”指程序中下一条指令所在的首地址, 是一个16位数; 2)符号“rel”表示“偏移量”,是一个带符号的单字节 数,范围是:-128~+127(80H~7FH)。在实际编程中,“rel” 通常用标号代替。 3.2 指令分类介绍指令功能分类: 数据传送、数据操作、布尔处理、程序控制。3.2.1数据传送指令实现寄存器、存储器之间的数据传送。 一、内部传送指令: 片内数据存储器数据传送。 二、外部传送指令: 片外数据存储器数据传送。 三、交换指令: 片内数据存储器数据传送。 四、堆栈操作指令: 片内数据存储器数据传送。 五、查表指令: 程序存储器数据传送。10 (一)内部传送指令:实现片内数据存储器中数据传送。 指令格式: MOV 目的操作数,源操作数 寻址方式:立即寻址、直接寻址、寄存器寻址、寄存器间址。 指令机器码: MOV A,Rn ;A←(Rn),Rn=R0~R7 11101rrr E8~EF MOV A,direct ;A←(direct)
n E5 n MOV A,@Ri ;A←((Ri)),Ri=R0、R1 1110011i E6、E7 MOV A,#data ;A←data
d 74 d MOV Rn, direct ;Rn←(direct) 10101rrr n MOV @Ri, direct ;(Ri)←(direct) 1010011i n MOV direct1,direct2 85 n1 n2 ;(direct1)←(direct2) MOV DPTR,#d1d2 ;DPTR←d1d2 90 d1 d2习题:找出配对指令,实现反向传送。 例: 顺序执行下列指令序列,求每一步执行结果。MOV MOV MOV MOV MOV A,#30H 4FH,A R0,#20H @R0,4FH 21H,20H ;A= 30H ;(4FH)= 30H ;R0= 20H ;(20H)= 30H ;(21H)= 30H习题:用两种寻址方式实现,将片内RAM 60H单元的数据传送给累加器A。地址 内容 (×) ? 60H 32H 解: MOV A,60H (√) MOV R0,#60H (√) ? 结果A=32H MOV A,@R0 32H 58H解: MOVA,#60H(×) MOV R0,60H MOV A,@R0 说 明:1. 一条指令中不能同时出现两个工作寄存器: 非法指令: MOV R1,R2 MOV R2,@R0 2. 间址寄存器只能使用 R0、R1。 非法指令: MOV A,@R2 3. SFR区只能直接寻址,不能用寄存器间接寻址。 非法指令: MOV R0,#80H MOV A,@R0 4. 指令表(P70): B:指令字节数,M:机器周期数 只有指令表中的指令才有对应指令代码,计算机才能 执行。编程时,不能随意创造发明指令。13 (二) 外部RAM传送指令:指令格式:MOVX(MOVX)实现片外数据存储器和A累加器之间的数据传送。 目的操作数,源操作数 寻址方式:片外数据存储器用寄存器间址方式。 1. DPTR作16位数据指针,寻址64KB片外RAM空间: MOVX A,@DPTR ;A←((DPTR)) (读)MOVX@DPTR,A ;(DPTR)←A(写)2. Ri作8位数据指针,寻址256B片外RAM空间(页内寻址):MOVX A,@Ri MOVX @Ri,A;A←((P2Ri)) ;(P2Ri)←A(读) (写)14 例:实现片外数据存储器数据传送(2000H)?(2100H)。MOV MOVX MOV MOVX DPTR,#2000H A,@DPTR DPTR,#2100H @DPTR,A片外 RAM 地址 内容 2000H X ? 2100H X; ; ; ;DPTR= 2000H A= X DPTR= 2100H (2100H)= XDPTR→DPTR→片外数据存储器不能直接寻址。 下列为非法指令: MOVX A,2000H MOVX 2100H,2000H思考题:为什么对DPTR的数据传送使用内部传送指令? 习题:将片外RAM 0000H单元的数据传送到片内RAM的60H单元。 (三) ROM传送指令(查表指令):(MOVC)实现从程序存储器读取数据到A累加器,只能使 用变址间接寻址方式。 多用于查常数表程序,可直接求取常数表中的 函数值。 1.DPTR为基址寄存器: MOVC A,@A+DPTR ;A?((A+DPTR)) (读) 查表范围为 64KB 程序存储器任意空间, 称为远程查表指令。 2.PC为基址寄存器: MOVC A,@A+PC ;A?((A+PC)) (读) 常数表只能在查表指令后256B范围内, 称为近程查表指令。16 P49:例1:以查表方法把累加器中的十六进制数转换为ASCII码,并送回累加器中。 程序如下: 指令地址 02 05 ……
DB DB 45H 46H 源程序 ORG 2000H HBA:INC A MOVC A,@A+PC RET DB DB DB 30H 31H 32H十六进制与ASCII码对应 十六进制 ASCII码 30H 0 1 31H ... ... E F 45H 46H外部ROM...H 46H...32H 31H 03H 2002H RET 2001H MOVC 2000H INC APCPC 例2: 查表法求Y=X2。设X(0≤X≤15)在片内RAM的20H 单元中,要求查表求Y,存入片内RAM 21H单元。内部RAM... ...方法1:21H Y(结果) 20H X(变量)Y A X A外部ROM程序: ORG 1000H SQU: MOV DPTR,#3000H ;确定表首地址(基地址) MOV A,20H ;取 X(变量:偏移量) MOVC A,@A+DPTR ;查表求Y=X2 3001H MOV 21H,A ;保存Y(结果) 3000H RET ;子程序结束 … ;其它程序段 ORG 3000H ;常数表格首地址 1000H TAB: DB 00,01,04,09,… ,225 ;平方表 END...225...01 00 DPTR...30H 00H 90HPC 例2: 查表法求Y=X2。设X(0≤X≤15)在片内RAM的20H 单元中,要求查表求Y,存入片内RAM 21H单元。内部RAM外部ROM方法2:... ......21H Y(结果) 20H X(变量)Y A X AH225... ...01 00 PC指令地址 H H H 100BH SQU:TAB:源程序 ORG 1000H MOV A,20H ADD A,#3 MOVC A,@A+PC MOV 21H,A RET DB 00,01,04 … DB 09,… ,225;程序起始地址 20H ;取X 1000H E5H PC ;修正偏移量 ;查表求Y=X2 (PC=1005H) ;存结果 ;子程序结束 ;平方表思考题:当0≤X≤255时,如何用查表法编程求Y=X2。 (四) 交换指令:实现片内RAM区的数据双向传送。 1. 字节交换指令 XCH A,Rn ;A ?(Rn) XCH A,@Ri ;A ?((Ri)) XCH A,direct ;A ?(direct)片内 RAM 地址 内容 2BH 35H 2AH 38H 29H ? 20H例:设A=29H,执行指令 XCH A,2AH后, A= 38H , (2AH)= 29H ? ?习题:将片内RAM60H单元与61H单元的数据交换。 XCH 60H,61H; ←对吗?不对!!20 2. 半字节交换指令:例:将片内RAM 2AH和2BH单元中的ASCII码转换成 压缩式BCD码存入20H单元。单字节 BCD 0000 千位 0000 百位 0000 十位 0000 个位XCHD A,@Ri ;A0~3 ?((Ri))0~3 SWAP A ;A4~7 ? A0~3压缩式 BCD 码 千位 百位 十位 个位A片内 RAM 地址 内容 2BH 35H 2AH 38H ? 20H 58HMOV A,#0MOV R0,#2AH MOV R1,#2BH XCHD A,@R1 SWAP A XCHD A,@R0 XCH A,20H00H R0 R1 H 30H 30HAA A 20H00 05H 50H 58H 58HR1R0习题:交换片内RAM 40H单元和 41H单元的低半字节。 (五)堆栈操作指令:入栈指令:PUSH direct ;SP←SP+1,(SP)←(direct) 出栈指令:POP direct ;(direct)←(SP),SP←SP-1 “先加后压” “先弹后减”例:设 A=02H,B=56H,执行下列指令后, SP= 30H ,A= 02H ,B= 56H ? ? ?SBR: MOV SP,#30H ;设栈底 PUSH A PUSH B MOV A,#00H MOV B,#01H … POP B POP AA 02H A 00H A 00H01H B 56H B 56H片内 RAM × 34H × × 33H × SP→ 56H SP→ 32H 56H × × 02H SP→ 31H 02H × × SP→ 30H ×22 练习:说明程序执行过程中,SP的内容及堆栈中内 容的改变过程。程序如下:MOV SP,#30H MOV A,#20H ;SP=30H ;A=20HMOV B,#30HPUSH A PUSH B …… POP A POP B;B=30H;SP=31H (31H)=20H ;SP=32H (32H)=30H ……;A=30H;B=20HSP=31HSP=30H23 习题:找出指令错误并改正:1.MOV2.MOVXA,#1000H ;A←1000H(A装1个字节数)A,1000H ;A←(1000H)片外RAM(DPTR、Ri)3.MOVC4.MOVX 5.MOVA,1000H60H,A R0,60H;A←(1000H)片外ROM(DPTR、PC);片外RAM(60H)←A(应为MOV) ;片内RAM:(61H)←(60H)MOV6. XCH61H,@R0R1,R2(片内RAM可直接寻址);R1?R2(必须有A参加)7. MOVX8. MOVXDPTR,#2000H60H,@DPTR;DPTR←2000H(应为MOV);片内RAM←片外RAM (必须有A参加) 3.2.2 算术运算指令与数据传送指令不同,多数算术运算指令会影响标志位的状态,即CPU执行算术运算指令后,根据数据操作情况自动设置标志位的状态。MCS-51 的程序状态字寄存器 PSW 为标志寄存器。其格式如下:字节地址为D0H位序 B7 B6 B5 B4 B3 B2 B1 B0 P位符号 CYAC F0RS1 RS0 OV F125 1.标志位(自动设置状态):1)Cy:进位标志位保存运算后最高位的进位/借位状态,当有进位/借 位,Cy=1,否则Cy=0。2)AC:辅助进位标志位保存低半字节的进位/借位状态,当D3产生进位/借 位,AC=1,否则AC=0。用于十进制调整。3)OV:溢出标志位OV=Cy7?Cy6,补码运算产生溢出OV=1,否则OV=0。4)P:奇偶标志位 反映累加器A中数据的奇偶性。当1的个数为奇数, P=1,否则P=0。26 2.用户选择位(编程设置状态)1)F0、F1 :用户自定义标志位。2)RS1、RS0 :RS1 0 RS0 0 工作寄存器 0区工作寄存器区选择位。复位时,PSW=00H01 110 11区2区 3区例:复位后,设置使用工作寄存器3区, 其余标志位不变。解: MOV位序PSW,# 18HB7 B6 B5 B4 B3 B2 B1 B0 P27位符号 CYAC F0RS1 RS0 OV F1 算术运算指令:完成片内RAM和A中数据的加减乘除运算。加减指令(读-修改-写): 1. 加法指令:1)不带进位加法:ADD A,源操作数 如:ADD A,R2 ;A←A+R2,影响Cy、OV、AC、P 例1:已知A=3BH,PSW=0,执行指令 ADD A,#3BH 后 求:A= 76H ?Cy= 0 ?OV= 0 ?AC= 1 ?P= 1 ? PSW= H ?位序 B7 B6 B5 B4 B3 B2 B1 B0 PBH + BH 位符号 CYAC F0RS1 RS0 OV F128 2)带进位加法:ADDCA,源操作数如:ADDC A,R2 ;A←A+R2+Cy,影响Cy、OV、AC、P例:A= 9AH,R2= E3H,PSW= 0,执行指令 ADDC A,R2 后求: A= 7DH ?Cy= 1 ?OV= 1 ?AC= 0 ?P= 0 ? PSW=
= 84H ?AH H + 0 1 DHB3 B2 B1 B0P29位序B7B6B5B4位符号 CYAC F0RS1 RS0 OV F1 带进位加法指令ADDC用于多字节运算:例:设双字节数 X 存在片内RAM 41H、40H单元,Y 存在42H、43H单元,编程求 Z=X+Y,并存入片内 RAM单元44H、45H、46H。(比较P52例3.3) MOV A,40H ;取被加数低字节 片内 RAM ADD A,42H ;加上加数低字节 地址 内容 MOV 44H,A ;保存和的低字节 ;低字节相加 46H ZH MOV A,41H ;取被加数高字节 45H ZM ADDC A,43H ;加上加数高字节 ;高字节相加 44H ZL 43H YH MOV 45H,A ;保存和的高字节 YL MOV A,#00H ;求高字节进位 ;计算高字节进位 42H 41H XH ADDC A,#00H 40H XL MOV 46H,ARET;子程序结束 ;子程序结束 BCD调整指令:BCD:Binary-Coded-Decimal (二进制编码的十进制) DA A ;把A中按二进制相加后的结果 调整成按BCD数相加的结果 调整原因:1、相加结果大于9,进入无效编码区; 2、相加结果有进位,跳过无效编码区。 调整方法:进行加“6”修正。 十进制加法指令:仅对加法结果进行调整 ADD A,源操作数 DA A 带进位十进制加1法指令: ADDC A,源操作数 DA A 作业:BCD码加法编程。 设X、Y为4位压缩BCD码,求 Z=X+Y。31 2.减法指令:SUBB A,源操作数 ;带借位减法指令A,R2 ;A←A-R2-Cy, ;影响Cy、OV、AC、P 如:SUBB例:A= 5AH,R2= 5AH,Cy= 0,执行下列指令 SUBB A,R2 求: A= 00 ?Cy= 0 ?OV= 0 ?P= 0 ?AC= 0 ?习题:编程求双字节减法。设X、Y存在片内 AH AH RAM60H起始单元,计算 Z=X-Y。-0 H思考:有不带借位的减法指令吗?32 3. 增量、减量指令:INC 如: INC DEC 如: DEC 单操作数 R2 ;R2←R2+1 单操作数 R2 ;R2←R2-1INC DPTR ;DPTR←DPTR+1 不影响标志位状态。注意:没有指令可用指令DEC DPTR DEC DPL 代替33 4.乘除指令:MUL AB ;BA←A×B,Cy←0,;当积高字节B=0,OV←0;B≠0,则OV←1DIVAB ;A÷B,A←商,B←余数,Cy←0,;当除数B=0,OV←1;B≠0,则OV←0例:A= 96(60H), B= 192(C0H),执行指令 MUL AB 后, 求:A= 00H ?B= 48H ?Cy= 0 ?OV= 1 ?P= 0 ? 解: 96 ×192 = H) 例:A= 156(F6H),B= 13(0DH),执行指令 DIV AB 后 求:A= 12H ?B= 0CH ?Cy= 0 ?OV= 0 ?P= 0 ? 解: 156 ÷ 13 = 18(12H),余数= 12(0CH)。思考题:如何实现多字节数据的乘除运算。34 3.2.3逻辑运算指令一、单操作数指令(A累加器为操作数): 1. A清0指令: CLR A ;A←0 2. A取反指令:CPL A ;A←A3、循环移位指令:1)8位循环指令: RL A ;A循环左移一位 RR A ;A循环右移一位2)9位循环指令: RLC A ;带Cy循环左移一位 RRCA;带Cy循环右移一位35 例:设 A=
B,Cy= 0,分别执行下列单条指令: CPL A 求:A=
?Cy= 0 ? RL A 求:A=
?Cy= 0 ? RLC A 求:A=
?Cy= 1 ?用9位循环指令实现多字节移位: 例:编程将寄存器 R6R5中的双字节数X左移一位。CLR MOV RLC MOV MOV RLC MOV C A,R5 A R5,A A,R6 A R6,A;Cy=0, 设 R6= 55H ,R5= AAH ;R6=B,R5=B,Cy=0 ;R6=B,R5=B,Cy=1Cy R6 R5 Cy 0;R6=B,R5=B,Cy=0思考题:如何将寄存器R6R5中的双字节数X右移一位。 二、双操作数逻辑运算指令(对位逻辑运算): ANL、ORL、XRL例:A=01××××××B,×表示随机状态,为1或0,下述一组指令执行后,A的值如何? XRL A,#0C0H ORL A,#03H ANL A,#0E7H ;将累加器A的内容D7、D6取反 ;将累加器A的内容D1、D0置1 ;将累加器A的内容D4、D3清0解 :执行上述指令后,A=10×00×11B。 习题1:如何将累加器A中的数据高4位清0,低位不变? 习题2:如何将寄存器R2中的数据奇数位取反,偶数位不变?37 3.2.4布尔变量操作指令对片内RAM中位寻址区操作。位累加器Cy和位地址bit。 一.位传送: MOV C,bit MOV bit,C ;Cy?(bit) ;(bit)?Cy例:将位地址20H的一位数传送到位地址30H中: MOV C,20H 26H 1 0 1 1 0 1 0 1 MOV 30H,C 25H 1 0 0 0 0 1 1 024H 0 1 1 1 0 0 0 0二.位清0、置1、取反(CLR、SETB、CPL): CLR C ;Cy?0 CLR 40H ;(位地址40H)?038 三.逻辑运算(ANL、ORL):ANL ANL C,40H C,40H ;C←C∧(40H) ;C←C∧(40H)例:设 Cy=1,(位地址40H)=1,执行指令 ANL C,40H 后, Cy= ? ,(位地址40H)= ? 1 0位地址表示法: 位地址 40H,位寄存器 F0 ,字节加位 ACC.0习题:设累加器A中数据为 29H=B,Cy=0, 执行指令 ORL C,0E3H 后, Cy= ? 139 3.2.5 转移指令转移指令通过改写PC的当前值,从而改变CPU 执行程序的顺序,使程序发生跳转。 按转移条件分类: 1)无条件转移:(LJMP、AJMP、SJMP、JMP) 执行无条件转移指令,程序无条件转移到 指定处。 2)条件转移: 指令中给出转移条件,执行指令时,先测 试条件:若满足条件,则程序发生转移;否则, 仍顺序执行程序。40 按转移方式分类:1)绝对转移:指令给出转移目的的绝对地址 d2d1, 执行指令后,PC?d2d1。 例: 地址 H 2000H 源程序 LJMP 2000H(长转移) … … … ;转移目的指令2)相对转移:指令给出转移目的与转移指令的相对 偏移量rel,执行指令后,PC?PC + rel 。 目的地址=PC+字节数+rel 1000H SJMP 02 例: 地址 源程序 1000H SJMP 02(短转移)(2字节) … H … ;转移目的指令41 一、无条件转移指令:无条件转移: LJMP,AJMP,SJMP,JMP――4条addr16 长跳转指令 ――可在64KB范围内跳转 AJMP addr11 绝对跳转指令 ――可在指令所在的2KB范围内跳转 SJMP rel 相对跳转指令 ――可在当前PC-128与+127范围内跳转 JMP @A+DPTR 间接长跳转指令 ――可在以DPTR为基址 + A为偏移量LJMP之和所指向的64KB程序范围内跳转42 1. 长转移指令: LJMP addr16(d2d1)指令机器码: 02 d2 d1 指令转移范围:64KB;PC?d2d12. 绝对转移指令: AJMP addr11 (2个字节);PC?PC+2 ;PC10~0?addr11 PC15~11不变指令机器码: addr11~9 00001 addr8~1 指令转移范围:2KB(32个) 转移时要求转移前后保持 PC15~11不变。例: 1030H AJMP 100H 指令机器码:21 00H 目的地址为:1100H43 3.短转移(相对跳转)指令:SJMP rel ;PC?PC+2,PC?PC+rel 指令机器码: 80H rel 相对偏移量 rel为带符号的8位补码数。 rel=[目的地址-(源地址+2)]补 rel为正数:向前转移; rel=地址差-2 rel为负数:向后转移。 rel=FEH+地址差 指令转移范围:前126~后129字节即-126D~+129D相对偏移量 rel 的计算通式: rel = [目的地址 -(转移指令地址+指令字节数)]补 = [目的地址 - PC当前值]补 (1)由偏移量rel计算目的地址; (2)由目的地址计算偏移量rel。 编程时,用标号代替转移目的地址,转移指令的操作数交给汇编程序计算。 LJMP NEXT(AJMP NEXT/SJMP NEXT) … NEXT: 例1:计算转移指令的目的地址。(1)835AHSJMP35H解: rel= 35H = B 为正数,因此程序向前转移。 目的地址 =(PC)+ 2 + rel= 835AH + 02H + 35H = 8391H(2) 835AH SJMP 0E7H 解: rel=0E7H = B 为负数,因此程序向后转移。目的地址 = 835AH + 02H + 0E7H= 8343H例2:计算转移指令的相对偏移量 rel,并判断是否超出转移范围?源程序 SJMP NEXT … 2150H NEXT:MOV A,R2 相对偏移量rel = 2150H -(2130H+2) = 001EH= +30D(未超出转移范围), rel = 1EH 求出指令机器码:80 1EH 指令地址 2130H 例3:求原地踏步指令的指令代码:HERE:SJMP HERE(或SJMP $)相对偏移量 = [2000H-(2000H+2)]补= FEH, rel = FEH 求出指令代码为:80 FEH习题:计算程序中转移指令的相对偏移量rel,并判断是否 超出转移范围。 地址 源程序 2130H LOOP: … … 21B0H SJMP LOOP 相对偏移量 = [2130H C(21B0H+2)]补= (-130)补 rel已超出转移范围(-126D~+129D)46 4.间接转移指令(多分支转移指令): JMP @A+DPTR ;PC←((A+DPTR)) 指令机器码 73H,指令转移范围64KB。 应用:处理功能键。要求不同功能键执行不同 程序段。设每个功能键对应一 个键值 X(0≤X≤FH)。 设X已存入片内RAM的40H 单元中。 若X=0,则执行程序段FUNC0; 若X=1,则执行程序段FUNC1;KEY:… 。MOV DPTR,#KTAB MOV A,40H ADD A,A JMP @A+DPTR KTAB: AJMP FUNC0 AJMP FUNC1 … FUNC0: … FUNC1: … 二、条件转移指令:条件转移指令形成程序的分支,赋予计算机判断决策能力。 转移条件:1)标志位的状态; 2)位地址中的状态。1. A判零转移指令:JZJNZrel ;PC←PC+2,;若A=00H,PC←PC+rel(转移), 若A≠00H,PC不变(不转移)rel;PC←PC+2, ;若A≠00H PC←PC+ rel(转移) 若A=00H,PC不变(不转移)2. 判Cy转移指令: JC rel ;Cy=1则转移,Cy=0不转移 JNC rel ;Cy=0则转移,Cy=1不转移48 3.判位转移指令:JB bit,rel ;(bit)=1转移,否则不转移JNB bit,rel;(bit)=0转移,否则不转移 ;(bit)=1转移,且(bit)=0, 否则不转移4. 判位清0转移指令:JBC bit,rel5. 比较不相等转移指令:CJNECJNE操作数1,操作数2,relA,direct,rel ;PC←PC+3 ;若A= (direct),顺序执行,且Cy=0。 若A≠(direct),则PC←PC+rel+3 且当A&(direct),Cy=0, 当A&(direct),Cy=1。相当于两个操作数相减,仅影响标志状态,不保存结果。 6.循环转移指令:DJNZ DJNZ 操作数,rel R2,rel ;PC←PC+2,R2←R2-1 ;若R2≠0,PC←(PC)+2+rel, ;若R2=0, PC←(PC)+2。例:用于循环结构程序。设要求程序循环执行100次。 MOV R2,#100 ;设循环计数器初值 LOOP: … ;多次循环程序段 初始化 循环体 DJNZ R2,LOOP ;循环控制 包括 控制变量的修改 … 循环次数的控制 ;循环结束 例:设单片机的晶振频率为6MHz,编写一段延时程序约100ms的子程序。 Delay: MOV R7,#64H ;设循环计数器初值(100次) LOOP: MOV R6,#0FAH ;循环250次(250×4=1ms) DJNZ R6,$ ;循环控制 DJNZ R7,LOOP RET T=12/6 MHz=2μ s t=2μ s+100×(2μ s+1ms+2×2μ s)+4μ s =100.606 ms 习题:当循环计数器初值为0,循环次数有多少? 3.2.6 子程序调用和返回指令子程序调用和返回指令也使程序发生转移。 子程序调用过程: 主程序 子程序 S ? 与转移指令不同:转移时, ? CALL S ? 先用堆栈保存当前地址。 ?一、长调用指令: LCALL addr16CALL S ?? RET;PC?PC+3, ;SP?SP+1,(SP)?PC0~7; SP?SP+1,(SP)?PC8~15; PC?addr16 addr16为子程序起始地址,编程时可用标号代替。 指令机器码:12 addr8~15 addr0~7 指令调用范围:64KB51 二、绝对调用指令: ACALL addr11;PC?PC+2 ;SP?SP+1,(SP)? PC0~7 , SP?SP+1,(SP)? PC8~15 ;PC10~0?addr11 PC15~11不变 addr11为子程序首地址 指令机器码:addr11~9 10001 addr8~1 指令调用范围 2KB。三、子程序返回指令: RET;PC15~8?(SP),SP?SP-1, PC7~0 ?(SP),SP?SP-1指令机器码:22H RET指令从堆栈弹出保存的PC地址,实现子程序返回。52 例:子程序嵌套:MAIN:MOV SP,#30H … LCALL SUB … SUB: … … RET ;设置栈底 ;调用子程序 ;子程序段程序存储器 2000H MOV SP, #30H 208FH H ? LCALL 2100H ? ? ? LCALL 2200H ? RET ? ? RET;返回主程序21FFH H片内 RAM 35H SP→ 34H 21H 53H SP→ 33H SP→ 32H 20H 92H SP→ 31H × SP→ 30HPC H H 208FH H 21FFH H 注意:1、子程序起始指令要使用标号,用作子程序名。 2、执行返回指令RET之前,保证栈顶内容为主程序返回地 址,以便正确返回主程序。常用格式: MAIN: … ;主程序LCALL… … SUBR: … …SUBR;调用SUBR;子程序首地址RET;子程序返回54 3.2.7 I/O口访问指令使用说明1、可以按口寻址,进行字节操作; 如:MOV Pm,A 可以按口线寻址,进行位操作。 如:MOV Pm.n,C 2、没有专门的输入/输出指令,均使用MOV传送指令 来完成: 输入:用MOV指令把各口线的引脚状态读入; 输出:用MOV指令把输出数据写入各口线电路 的锁存器。 3、在进行引脚数据输入操作之前,必须先向电路中 的锁存器写入“1”,使FET截止,以避免锁存器 为“0”状态时对引脚读入的干扰。55 小结1、指令的寻址方式、格式、功能和使用方法。 7种寻址方式:寄存器寻址; 寄存器间接寻址; 直接寻址; 立即寻址; 变址寻址; 相对寻址; 位寻址。 2、指令分类介绍:详见P70表。56 3、寻址方式:(1)对程序存储器(内、外):只能变址寻址 MOVC (2)对内部数据存储器:MOV寻址方式 低128单元 高128单元 (SFR) 用户RAM区 位寻址区 寄存器区(0FFH~80H) (7FH~30H) (2FH~20H) (1FH~00H) 寄存器寻址方式 位寻址方式 部分 直接寻址方式 间接寻址方式(3)对外部数据存储器:只能寄存器间址MOVX高地址单元(65280个) 低地址单元(256个) 寄存器间接寻址方式 (0FFFFH ~0100H) (00FFH ~0000H) 以R0 或R1 作间址寄存器 以DPTR作 间址寄存器 练 习 题(一)填空题 (二)选择题58
第3章 AT89C51单片机的指令系统_计算机软件及应用_IT/计算机_专业资料。第3章 AT89C51 单片机的指令系统作为变址寄存器,以或作 1.在基址加变址寻址方式中,以...第3章 MCS-51单片机指令系统总结_电子/电路_工程科技_专业资料。第3章 MCS-51单片机指令系统总结,主要是对汇编语言复杂指令的归类和整理。...168页 2财富值 第3章 单片机指令系统 13页 免费如要投诉违规内容,请到百度文库投诉中心;如要提出功能问题或意见建议,请点击此处进行反馈。 ...168页 2财富值 第3章 单片机指令系统 13页 免费如要投诉违规内容,请到百度文库投诉中心;如要提出功能问题或意见建议,请点击此处进行反馈。 ...168页 2财富值 第3章 单片机指令系统 13页 免费如要投诉违规内容,请到百度文库投诉中心;如要提出功能问题或意见建议,请点击此处进行反馈。 ...浙江省自学考试单片机原理及应用02358讲义浙江省自学考试单片机原理及应用02358讲义隐藏&& 第3章 80C51 单片机指令系统 18 课时 教学目的和要求:本章的基本任务是学习...单片机原理及其接口技术(第二版)单片机原理及其接口技术(第二版)隐藏&& 第3 章 MCS-51 单片机指令系统 3.1 概述 3.1.1 指令格式 3.1.2 指令的三种表示形式 3....第三章MCS-51单片机指令系统习题不含答案_理学_高等教育_教育专区。MCS-51单片机指令系统第三章练习题第三章 MCS-51 单片机指令系统习题含答案 3.1 判断下列说法是...第三章 单片机指令系统与程序设计 3.1 简述下列基本概念:指令、指令系统、程序、汇编语言、汇编、反汇编。 3.2 什么是寻址方式?51 系列单片机有几种寻址方式?对 ...第三章 80C51 系列单片机指令系统 31 80C51 系列中所有单片机是否使用完全相同的指令系统? 系列中所有单片机是否使用完全相同的指令系统? 答: 80C51 系列单片机以 ...
All rights reserved Powered by
copyright &copyright 。文档资料库内容来自网络,如有侵犯请联系客服。}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信