欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > PPT文档下载
     

    第3章指令系统及程序设计举例.ppt

    • 资源ID:2549544       资源大小:708.51KB        全文页数:47页
    • 资源格式: PPT        下载积分:6
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要6
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第3章指令系统及程序设计举例.ppt

    第3章 指令系统及程序设计举例,1. 指令,只用来对汇编过程进行控制,汇编时不产生机器码。 (1)ORG (汇编起始命令) 格式:ORG 汇编起始地址(16位),3.1 指令格式与寻址方式,一、指令格式,89C51指令系统中,有1字节、2字节或3字节指令。 1字节:其中既包含操作码、又包含操作数信息。 2字节:1个字节表示操作码,另1个字节表示操作数或操 作数地址。 3字节:1个字节表示操作码,另2个字节表示操作数。,2. 伪指令,操作码 目标操作数,源操作数,(3)EQU(赋值命令) 为字符名称赋值 格式: 字符名称 EQU 数或汇编符号 (4)DATA(数据地址赋值命令,类似于EQU) 格式: 字符名称 DATA 表达式 将表达式的值赋给字符名称,常用于在程序中定义数据地址。,(2)END(汇编结束命令) 格式: END,例:STRING DATA 21H NUM DATA 20H MOV R0,#STRING MOV NUM,A,(5)DB/DW(定义字节、字命令) 格式: 标号: DB(DW) 项或项表 注意: DB时,项或项表是一个字节或是用逗号隔开的字节串 或是在 中的ASCII 字符串。 DW时,项或项表的存放方式是 高8位在低地址,低8位在高地址。 见P110例。,(6)DS(定义存储空间命令) 从指定地址开始保留若干单元。 格式: 标号: DS 表达式 例: ORG 1000H DS 08H DB 30H,8AH 汇编后, (1008H)=30H,(1009H)=8AH 注意:以上的DB、DW、DS仅对程序存储器起作用,不能对数据存储器初始化。,(7)BIT(位地址符号命令) 将BIT后的位地址赋给字符名。 格式: 字符名 BIT 位地址 例: A1 BIT P1.0 ; P1口第0位的位地址 90H赋给了A1,寻找指令中操作数或操作数所在的地址,共有7种。,二、寻址方式,立即寻址 MOV A,#3AH ;3AHA MOV DPTR,2000H ; 2000HDPTR ;(DPH)=20H 注:立即数前用,以区别地址。 ;(DPL)=00H,2. 直接寻址 MOV A,3AH ;(3A)A,3AH的内容A 操作数部分是操作数所在的存储器单元的地址。,Reg寻址 MOV A,R0 ;R0 A Reg:R0R7,A,B,CY,DPTR(对它们也可使用其地址), 片内RAM的128个存储单元, 所有的SFR(既可用地址,也可用名字), 216个位地址空间,例1:MOV A,P1 例2: MOV SBUF,A MOV A,90H MOV 99H,A,此种寻址方式一般用于片内RAM和SFR。,以某个REG内容为基地址,然后加上地址偏移量以形成操作数地址。 在89C51中,用DPTR或PC作为变址REG(基地址),地址偏移量放在A中。 即:操作数地址=(A)+(DPTR),或=(A)+(PC),操作数地址放在某个REG中,规定: (1) R0、R1为间接REG,寻址片内128字节的低位地址RAM 或片外RAM低地址的256个单元。 (2) DPTR为间接REG,寻址片外RAM 64KB。,REG间接寻址 MOV A,R0 ;若R0内容为65H, (65H) A。,简言之, 有:,R0, R1,SP (PUSH、POP) 寻址片内RAM,R0, R1, DPTR 寻址片外RAM,此种寻址方式一般用于数据存储器(RAM)。,5. 变址寻址 只能用于访问程序存储器(ROM),从中取数。,例: MOVC A,A+DPTR ;(A)+(DPTR)A MOVC A,A+PC ;(A)+(PC)A,相对偏移量的计算(以2字节指令为例): rel=(目标地址源地址2)补 相对转移指令执行时,是以当前PC(程序计数器)的值加上指令中规定的偏移量rel而形成实际的转移地址。,6. 相对寻址(ROM),只出现在相对转移指令中,例:JC rel ;rel75H 当指令JC被取出时,PC值已在原地址 上加2,这时程序转移到当前的PCrel地址去执行,即转去当前PC75H。,7. 位寻址(属于直接寻址) 操作数中给出的是位地址,即片内RAM某一单元中的一位。,例:CLR bit (即:CLR 90H),1. 操作数寻址方式和有关空间,三、寻址空间及符号注释,2. 寻址方式中常用符号注释,(1)Rn(n07),(2)Ri(i0,1),(3)#data 8位立即数,(4)#data16 16位立即数,(5)direct 8位片内RAM单元(包括SFR)的直接地址,(6)addr11 11位目标地址,(7)addr16 16位目标地址,(8)rel 补码形式的8位地址偏移量,(9)bit 片内RAM或SFR的直接寻址位地址,(10) 间接寻址方式中,表示间址寄存器的符号,(11)(×) ×中的内容,(12)(×) 由×指出的地址单元中的内容,五大类(111条): 1. 数据传送指令: 28条 2. 算术运算指令:24条 3. 逻辑运算及移位:25条 4. 控制转移指令:17条 5. 位操作指令: 17条,3.2 89C51单片机的指令系统,一、数据传送指令,(2)以寄存器Rn为目的的操作数(见P44 例) MOV Rn,A ; RnA,Rn:R0 R7,寄存器寻址。 MOV Rn, direct ; Rn( direct),直接寻址。 MOV Rn,#data ;Rndata,立即寻址,(1)以累加器A为目的操作数 MOV A,Rn ;ARn,Rn:R0R7,寄存器寻址。 MOV A,direct ;A(direct),direct:8位片内RAM地 址(256B范围内),直接寻址。 MOV A,Ri ;A(Ri),R0或R1所指片内RAM (128B范围内),寄存器间接寻址 。 MOV A,#data ;Adata,立即数data:00HFFH,片内数据传送(片内RAM区中的工作寄存器 Rn, A , 片内数据RAM, SFR之间),注: 无 MOV Rn,Rn 指令; P58 机器码的构成,(3)以直接地址为目的操作数 MOV direct,A ; (direct)A, Reg寻址 MOV direct,Rn ; (direct)Rn, Reg寻址 MOV direct, direct ; (direct)(direct),直接寻址 MOV direct,Ri ; (direct)(Ri), Reg间接寻址 MOV direct,#data ; (direct)data,立即寻址。,(4)以间接地址为目的的操作数 MOV Ri,A ;(Ri)A, Reg 寻址 MOV Ri,direct ;(Ri)(direct),直接寻址 MOV Ri,data ;(Ri)data,立即寻址,例:MOV A,74H ;A74H MOV 74H,00H ;(74H)00H MOV A,74H ; A00H,注意:将指令译成机器码时,第2、3字节的内容顺序。P59,P60。,例:MOV R0,77H ;R077H MOV A,03H ; A03H MOV R0,A ;( R0)03H,即(77H)03H.,例: MOV R0,#20H MOV R0,#data ;MOV 20H,data MOV P1,#80H ;立即寻址 MOV P3,P1 ;直接寻址,(2)利用DPTR16位Reg间接寻址,可以在64KB范围内寻址。 MOVX A,DPTR ;A(DPTR) MOVX DPTR,A ;(DPTR)A 注: 每次传送8位数据, MOV R1,#82H MOV A,R1 ;此指令有错,因为Ri间接寻址仅能寻址片内低128字节RAM区(片内地址不超过7FH),或片外低256字节RAM区(必须使用MOVX )。 欲从82H取数到A,可使用:MOV A,82H,2. 累加器A与片外RAM间(或I/O口)间的数据传送,(1)利用Ri间接寻址,可以在256字节范围内寻址。 MOVX A,Ri ;A(Ri) MOVX Ri,A ;(Ri)A,注:这时,RAM地址 在Ri中由P0口送出,P2 口仍可用作I/O口。,例: MOV DPTR,#0650H ;将0650H单元的8bit MOVX A,DPTR ;数据送入A。,注: 因为外部的RAM与I/O端口是统一编址的,89C51指令系统中无单独的IN、OUT端口操作指令,所以指令中的8位或16位地址,可能是RAM地址,也可能是I/O端口地址。,其中: 以(DPTR)为基址Reg,A为偏移量,可以查找到(DPTR)以后的256个字节范围内的代码或常数。因为(DPTR)的内容可在64 K范围内变化,故此种查表称为远程查表。 以当前PC为基址,A为偏移量,可以查找当前指令所在地址以后的256个字节范围内的代码或常数,称近程查表。,例:对A中的BCD码,用查表法查得相应的ASCII码。 1. 用PC作为基址,MOV A,#03H ;查3的ASCII码 INC A ;考虑RET的存在,修正偏移量 MOVC A,A+PC ;此指令取出后,PC指向RET单元 RET ;(1字节),2. 用DPTR作为基址,(1)字节交换指令 XCH A,Rn ;ARn reg寻址 XCH A,direct ;A(direct) 直接寻址 XCH A,Ri ;A(Ri) 间接寻址,4. 交换指令(分字节交换、半字节交换两种),(2)半字节交换指令 XCHD A,Ri ;A03(Ri)03 ,高4位不变。 SWAP A ;A03 A47 ,A的高低4位互换。,二、算术运算指令,1. 加法 ADD A,Rn ;AA+Rn ADD A,direct ;AA+(direct) ADD A,Ri ;AA+(Ri) ADD A,#data ;AA+data,注:加减运算中,目标操作数只能是A。,5. 乘法指令(8位无符号数) MUL AB ;BAA×B ;若结果0FFH(B中有值),OV1,CY0。 ;否则(B中为0) , OV0,CY0。,6. 除法指令 (8位无符号数) DIV AB ;A/B的商A,A/B的余数B,例:16位数求补(求反1)。 设16位二进制数在R1R0中,求补结果存于R3R2中。,MOV A,R0 ;16位数低8位送A CPL A ;求反 ADD A,#01H ;加1(不用INC,因为它不影 响标志位) MOV R2,A ;存补码低8位 MOV A,R1 ;取16位数高8位 CPL A ;求反 ADDC A,00H ;加进位 MOV R3,A ;存补码高8位,以上指令编程练习见: P93P96,1. 简单操作指令 累加器清零 CLR A 累加器取反 CPL A,例: MOV A,#35H ANL A,#0FH ;屏蔽高4位,保留低4位。,2. 与 ANL A , Rn ;A / RnA ANL A, direct ANL A, Ri ANL A, #data ANL direct, A ;(direct) / A(direct) ANL direct,data ;(direct) / # data(direct) 注: 中若直接地址为 I/O 口, 则为 “读改写”操作。,三、逻辑操作指令,3. 或 ORL A,Rn ORL A,,direct ORL A,Ri ORL A, #data ORL direct,A ORL direct,data 注: 中若直接地址为I/O 口,则为“读改写”操作。 例:MOV A, #05H ORL A, #30H ;添加30H, 变成ASCII码,4. 异或 XRL A,Rn XRL A,direct XRL A,Ri XRL A,#data XRL direct, A XRL direct,#direct 注:若 中direct为I/O口,为“读改写”操作。 例:MOV A, #55H XRL A, #F0H ;高4位取反,低4位不变。,5. 移位指令(仅对累加器A,见P.69) 循环左移: RL A 带进位循环左移: RLC A 循环右移: RR A 带进位循环右移: RR C A,例 : 拆字。将片内RAM 20H单元的内容拆成两段,每段4位。 并将它们分别存入21H与22H单元中。程序如下: ORG 2000H START: MOV R0,#21H ;21HR0,用R0间接寻址 MOV A,20H ;(20H)A ANL A,#0FH ;A#0FHA MOV R0,A ;(A)(R0) INC R0 ;R0+1R0 MOV A,20H ;(20H)A SWAP A ;A03A47 ANL A,#0FH ; A#0FH MOV R0,A ;(A)(R0),1. 无条件转移 绝对短转移 AJMP addr11; PC+2 PC,addr11PC100, PC1511不变。 转移的目标地址在AJMP指令后面指令的第一字节开始的同一2K字节范围内。如下图所示:,例:AJMP 1123H AJMP K0,四、 控制转移类指令,该指令操作码的形成:,本指令对应8种操作码:定义每256字节为一个页面,2K的跳转范围 可分为8页(211= 2 3× 28 = 8×256),每个页面一个操作码。, 绝对长转移指令 LJMP addr16 ;在64KB内转移, addr16 PC 例:LJMP 2030H ;放在0000H中时, 上电后自动转移到2030H单元。, 相对转移指令(短转移) SJMP rel ;PC+2 PC ;PC+rel PC rel=(终地址始地址2 )补 注:当rel=FE时,导致无限循环。 因为 终地址 = 始地址+2+FE =PC+2-2 =PC 因此,可用如下形式指令 JMPADR:SJMP JMPADR 来代替HLT,在51单片机中无HLT。, 间接转移指令(散转指令)单字节指令 JMP A+DPTR ;A+DPTR PC 通常以DPTR为基地址,A为偏移量,则可实现散转功能 。,例: P75 例3-11 根据A中命令键的值,设计命令键操作程序入口跳转表。 CLR C ;清进位位 RLC A ;键值乘以2 MOV DPTR,#TAB ;DPTR指向表首址 JMP A + DPTR ;散转到命令键入口,例:128种分支转移程序。程序框图如右: 功能: 根据入口条件转移到128个目的地址 入口:(R3)=转移目标地址的序号00H7FH 出口: 转移到相应的子程序入口, 比较转移指令 (对无符号数) CJNE 目的,源 ,rel ;3字节指令 源与目的字节进行比较 (目的源),若它们的值不等,则转移,同时将Cy清0或置 1。比较操作不影响原有操作数。 rel = (终地址始地址3 )补,2. 条件转移类指令 若条件满足,则程序转向指定的目标地址。 累加器A判零转移指令 JZ rel ; A=0 转移 JNZ rel ; A 0 转移,例:设 R7=56H, 执行指令 CJNE R7, #60H, K1 ;R760H,K1 且Cy=1 K1: JC K3 ;Cy=1,判出R760H k3 K3:,例:片内RAM ONE 和 TWO 两个单元中存有两个无符号数,将两个数中小的存入30H单元。,MOV A ,ONE CJNE A,TWO ,BIG SJMP STORE BIG: JC STORE MOV A,TWO STORE: MOV 30H,A, 循环转移指令 i) DJNZ Rn,rel ;PC+2 PC, Rn1Rn, ;当Rn0时,PC + relPC ;当Rn=0时,则结束循环,程序向下执行。 功能: (Rn 1)不为零时转移,否则继续执行。 ii) DJNZ direct,rel ;(direct)-1,不为零时转移,否则继续执行。,例:软件延时。(在P1.7引脚上输出一个50us的脉冲) 利用DJNZ指令可在一程序中插入某些指令来实现软件延时。DJNZ执行时间为2个机器周期,这样循环1次可产生2个机器周期延时。(12M晶振时, 1个机器周期=1us。2×241=49us) CLR P1.7 ;P1.7输出变低电平 MOV R2 ,18H ;1us ;赋循环初值24 HERE: DJNZ R2 ,HERE ;2us ; R2-1R2,R2不为零 循环。 SETB P1.7 ;P1.7输出高电平,注:子程序首地址必须在ACALL指令后第一字节为起始的 2K字节范围内ROM中。,位操作包括:位传送、位状态控制、位逻辑操作、位条件转移等. 进行位操作时: 位累加器C进位标志Cy 位地址片内RAM字节地址20H2FH中连续128个位, 地址从00H7FH。 部分SFR 地址可以被8整除。,五、位操作指令,在汇编语言中,位的表达方式有多种: 直接给出位地址 如:MOV C, D4H(位地址) 点操作符方式 如:MOV C, PSW.4(PSW的第4位) 位名称方式 如:MOV C, RS1 用户定义名方式 如:SUB.REG BIT RS1(用SUB.REG 表示 RS1) 这四种方式都可表达PSW中的第四位。,1. 位传递 MOV C,bit ; C ( bit ),bit是位地址,直接寻址 MOV bit,C ; ( bit ) C 当 bit 为00H7FH,位地址在片内RAM中共128位; bit 为80HFFH,位地址在11个SFR中。 (如:4个8位的并行I/O口,每位均可单独进行寻址。),例:SETB P1.7 ;将P1.7位 置1 CLR 2AH ;2AH为25H单元中的第2位地址 ;设(25H)00110100B,此指令将 (25H)变为00110000B。,3. 位逻辑运算指令 与 ANL C, bit ;C (bit) C ANL C,/bit ;C (/bit) C(/bit并不改变bit的值) 或 ORL C,bit ;C (bit ) C ORL C,/bit ;C (/bit) C,4. 位条件转移指令(相对转移) 判C转移指令 JC rel ;C=1 转移 JNC rel ;C1 转移 判位变量转移指令 JB bit,rel ;bit =1 转移 JNB bit,rel ;bit 1 转移 判位变量并清0 JBC bit,rel ;若 bit =1,0 bit ,转移 ;若 bit =0, 则顺序执行 偏移量(目标地址源地址指令字节数)补 P82,VAR DATA,30H ;VAR地址30H FUNC DATA,31H ;FUNC地址31H START: MOV A,VAR ;取X JZ COMP ;A为0转COMP JNB ACC.7,POSI ;X0转POSI ;符号位为0 MOV A,#0FFH ;X0,-1A SJMP COMP POSI: MOV A,#01H COMP: MOV FUNC,A,例: 在片内RAM 40H4FH 中置初值 A0HAFH,再将其内容依次传送到片外RAM 0800H 为起始地址的16个单元中。,相对偏移量的计算: FBH(0045H0048H2)补(5)补 FAH(0051H0055H2)补(6)补 FEH(0057H0057H2)补(2)补,ANL 40H, #0FH ;40H的ASCII码变为BCD码。 MOV A, 41H ANL A, #0FH ;41H的ASCII码变为BCD码。 RL A ;A的内容左移4次 RL A RL A RL A ;左移4次, 或使用 SWAP A ORL 40H, A ;结果存在40H单元中。,指令系统举例:,例1. 设两位用ASCII码表示的数分别保存在40H、41H单元中,将其转换为两位BCD数,并以压缩形式存入40H单元中。,程序:,LOOP: MOV A,#03H ORL P1,A ; 1 P1 MOV A,P1 ; P1输入 RL A RL A MOV P1,A CALL DELAY AJMP LOOP,例2.,Ki闭合 LEDi亮,例3. 两个无符号数存于20H、21H单元中,比较他们的大小, 将大数A。,MOV A,20H CJNE A,21H,L1 SJMP L2 L1: JNC L2 MOV A,21H L2: RET ;A中为大数,例4. 20H25H单元中存放着单字节无符号数,求和并存于 27H、26H单元。,CLR C MOV R0,#20H MOV R1,#00H ;高字节和 MOV R2,#05H ;数组长度1 MOV A, R0 INC R0 L1: ADD A,R0 ;求和 JNC L2 INC R1 L2: INC R0 DJNZ R2,L1 MOV 26H,A MOV 27H,R1 RET,例:搜索最大值。从片内RAM的BLOCK单元开始有一个无符号 数据块,其长度存于LEN单元中,试求出其中最大的。,LEN DATA 20H MAX DATA 21H BLOCK DATA 22H CLR A MOV R2,LEN ;数据块长度R2 MOV R1,#BLOCK ;置地址指针 LOOP: CLR C SUBB A,R1 ;用减法做比较 JNC NEXT ;无借位A大 MOV A,R1 ;否则大者送A SJMP NEXT1 NEXT: ADD A,R1 ;A大恢复A NEXT1: INC R1 ;修改地址指针 DJNZ R2,LOOP ;未完继续 MOV MAX,A ;完存大数,例: 排序。 将片内RAM 区50H59H 中的数据按 从小到大的 次序排列。,QUE: CLR 00H :清除交换标志 MOV R3,9H ;循环次数 MOV R0,50H ;存放区首址 MOV A,R0 ;取前数 L2: INC R0 MOV R2,A ;保存前数 SUBB A,R0 ;前数减后数 MOV A,R2 ;恢复前数 JC L1 ;顺序,继续比较 SETB 00H ;逆序,建立标志 XCH A ,R0 ;前后数交换 DEC R0 XCH A ,R0 INC R0 ;指向后数单元 L1: MOV A,R0 DJNZ R3,L2 ;依次重复比较 JB 00H,QUE ;交换后重比较 RET,

    注意事项

    本文(第3章指令系统及程序设计举例.ppt)为本站会员(本田雅阁)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开