汽车单片机原理及应用-第四章指令系统.ppt

上传人:ni****g 文档编号:572492359 上传时间:2024-08-13 格式:PPT 页数:88 大小:1.56MB
返回 下载 相关 举报
汽车单片机原理及应用-第四章指令系统.ppt_第1页
第1页 / 共88页
汽车单片机原理及应用-第四章指令系统.ppt_第2页
第2页 / 共88页
汽车单片机原理及应用-第四章指令系统.ppt_第3页
第3页 / 共88页
汽车单片机原理及应用-第四章指令系统.ppt_第4页
第4页 / 共88页
汽车单片机原理及应用-第四章指令系统.ppt_第5页
第5页 / 共88页
点击查看更多>>
资源描述

《汽车单片机原理及应用-第四章指令系统.ppt》由会员分享,可在线阅读,更多相关《汽车单片机原理及应用-第四章指令系统.ppt(88页珍藏版)》请在金锄头文库上搜索。

1、第四讲第四讲指令系统指令系统主要内容:主要内容:1.寻址方式2.指令系统3.程序设计指令地址寻址指令地址寻址相对寻址:相对寻址:将一条指令的8 位立即数与下一条指令的起始地址相加,结果赋给程序计数器(PC),然后转向相加结果指向的地址立即数是带符号位的补码(128 to +127),相对转移值是从下一条指令的起始地址开始,范围在128 与+127之间执行“BR $addr16”指令或条件转移指令立即寻址:立即寻址:将指令中的立即数赋给程序计数器(PC),然后转向该地址如“CALL !addr16”、“BR !addr16”或“CALLF !addr11” 指令CALL !addr16 和BR

2、!addr16指令的转移地址范围是所有内存空间。CALLF !addr11指令的转移地址范围在0800H与0FFFH之间CALL !addr16, BR !addr16 指令指令地址寻址指令地址寻址CALLF !addr11 指令指令地址寻址指令地址寻址表间接寻址:表间接寻址:通过指令码低5位的立即数(从第1位到第5位),访问特定存储单元的表的内容(转移目的地址),并将表的内容赋给程序计数器(PC),然后转向该地址在执行CALLT addr5指令时,进行表间接寻址。执行该指令时,根据存储在内存表中40H至7FH之间的地址,能够跳转到整个内存空间的任意位置指令地址寻址指令地址寻址寄存器寻址寄存器

3、寻址:将一条指令的寄存器对(AX)的内容赋值给程序计数器(PC),然后转向该地址“BR AX”指令指令地址寻址指令地址寻址指令执行期间寄存器寻址和存储器寻址所进行的操作隐含寻址隐含寻址:规定某些寄存器地址是作为通用寄存器中的累加器(A 和AX)使用操作数地址寻址操作数地址寻址寄存器寻址:寄存器寻址:将通用寄存器作为操作数进行访问,并由寄存器组选择标志(RBS0 和RBS1)和指令中的寄存器标识码(Rn 和RPn)确定要访问的通用寄存器,如果使用8位寄存器,则指令码中有3位用来表示一个8位寄存器r 和rp可用绝对名称(R0 到R7 以及RP0 到RP3)和功能名称(X, A, C, B, E,

4、D, L, H, AX, BC, DE以及HL)来描述操作数格式MOV A, C; 选择C寄存器作为r操作数地址寻址操作数地址寻址直接寻址直接寻址:根据指令中的立即数直接寻址操作数格式MOV A, !FE00H; 将!addr16设置为FE00H操作数地址寻址操作数地址寻址短直接寻址短直接寻址:指令中的8位立即数对固定区域中的内存进行直接寻址,寻址范围是FE20H到FF1FH总共256字节的内存区域内部高速RAM和特殊功能寄存器(SFR) FF00H到FF1FH的区域主要存放程序中经常访问的端口、计数器的比较寄存器、计数器的接收寄存器如果8位立即数是在20H 和FFH之间,则将一个有效地址的第

5、8位设置为0;如果8位立即数是在00H与1FH之间,则一个有效地址的第8位设置为1操作数格式MOV FE30H, #50H; saddr的值为FE30H,立即数为50H操作数地址寻址操作数地址寻址特殊功能寄存器特殊功能寄存器(SFR)寻址寻址:指令中的8位立即数对内存中的特殊功能寄存器(SFR)区域进行寻址,寻址区间为FF00H到FFCFH以及FFE0H到FFFFH区间共240字节操作数格式MOV PM0, A; 选择PM0作为sfr操作数地址寻址操作数地址寻址寄存器间接寻址寄存器间接寻址:对操作数寄存器对的内容进行寻址。由寄存器组选择标志(RBS0和RBS1)和指令码中的寄存器对说明,定义需

6、要访问的寄存器对【操作数格式】MOV A, DE; 选择DE寄存器对作为操作数操作数地址寻址操作数地址寻址基址寻址基址寻址:将8位立即数加到HL寄存器对中, HL寄存器对作为基地址寄存器,根据相加结果寻址。需要访问的HL寄存器对属于由寄存器组选择标志(RBS0和RBS1)确定的寄存器组。通过将偏移量扩展为16位正数,来完成加法操作,进位忽略。该寻址方式可对整个内存空间进行【操作数格式】MOV A, HL+10H; byte的值为10H操作数地址寻址操作数地址寻址基址变址寻址基址变址寻址:将B或C寄存器的内容加到HL寄存器中,HL寄存器作为基地址寄存器,并根据相加结果寻址。需要访问的HL、B和C

7、寄存器属于由寄存器组选择标志(RBS0和RBS1)确定的寄存器。通过将B或C寄存器扩展为一个16位的正数来完成加法运算,进位忽略。该寻址方式可对整个内存空间进行操作数格式MOV A, HL+B操作数地址寻址操作数地址寻址堆栈寻址堆栈寻址:根据堆栈指针(SP)的内容对堆栈区域进行间接寻址。当执行PUSH, POP, 子程序调用和RETURN指令时,或者根据中断请求产生对寄存器进行设置或复位时,将自动采用这种寻址方式。该方式仅对内部高速RAM区域进行寻址操作数地址寻址操作数地址寻址指令系统按照功能分指令系统按照功能分 数据传送类指令 算术运算类指令 逻辑运算类指令 循环操作类指令 无条件转移类指令

8、 条件转移类指令 位操作类指令 调用及返回类指令 CPU 控制类指令指令系统指令系统在每种指令的“操作数”栏列出操作数。如果有两种或两种以上的标识方法,可选其中之一大写字母和符号#、!、$ 、 是关键字,必须按其原样书写 #: 立即数标识 !: 绝对地址标识 $: 相对地址标识 :间接地址标识立即数用来描述一个数值型数据或标志。当使用标志时,注意必须加上符号#, !, $, 和 。操作数寄存器标识符r 和rp、功能名称(X, A, C, etc.)或绝对名称(R0, R1,R2 等)都可用于标识操作数标识符和标识方法操作数标识符和标识方法操作数标识符和标识方法操作数标识符和标识方法数据传送类指

9、令数据传送类指令MOV,MOVW,XCH,XCHW,PUSH,POPMOV:8位数据操作指令; MOVW:16位数据操作指令指令操作不影响标志位数据交换指令数据交换指令XCH:8位数据操作指令, XCHW:16位数据操作指令指令操作不影响标志位堆栈操作指令堆栈操作指令PUSH,POP:16位数据操作指令指令系统指令系统算术运算指令算术运算指令ADD,ADDC,ADDW,SUB,SUBC,SUBW,CMP,CMPW,MULU,DIVUW,INC,INCW,DEC,DECW,ADJBA,ADJBS乘法指令乘法指令:MULU:将A 寄存器的内容与源操作数进行无符号乘法运算,结果存于AX 寄存器中除法

10、指令除法指令:DIVUW:目标操作数的内容除以AX寄存器的内容,商和余数分别存放在AX寄存器和目标操作数中。除法运算是将AX寄存器内容和目标操作数内容看成无符号数。但当目标操作数为0时,则将X寄存器的内容存于C寄存器中,并将AX的内容设置为0FFFFH指令系统指令系统比较指令比较指令 CMP:8位操作,修改Z、AC和CY标志位 CMPW:16位操作,修改Z和CY标志增增1 1/减减1 1指令指令 INC、 DEC :8位操作。目标操作数增加1/减1 INCW、 DECW :目标操作数加1 /减1指令系统指令系统BCD码码 调整指令调整指令 ADJBA:将A寄存器、CY标志以及AC标志的内容按十

11、进制进行调整。仅在进行BCD数据相加,且相加结果在A寄存器中时,该指令有效,影响Z标志指令系统指令系统 ADJBS:将A 寄存器、CY 标志以及AC 标志的内容按十进制进行调整。仅在进行BCD数据相减,且相减结果存在A 寄存器中时,有意义。如果调整结果的A 寄存器内容为0,则将Z 标志设置为1,否则将Z 标志清零逻辑运算指令逻辑运算指令指令为8 位操作指令,AND,OR,XOR指令系统指令系统移位操作指令移位操作指令指令是8 位操作指令,ROR,ROL,RORC,ROLC,ROR4和ROL4ROR ROLRORC ROLC指令系统指令系统ROL4ROR4:A寄存器的低4位和目标操作数的两个数位

12、(4位数据)向右循环移位。A寄存器的高4位保持不变ROR4ROR4HL无条件转移指令无条件转移指令BR:无条件转移指令。将目标地址操作数传送到PC 中,并转向该地址BR AX ;将AX寄存器的内容作为转移地址条件转移指令条件转移指令条件转移指令包括:BC,BNC,BZ,BNZ,BT,BF,BTCLR,DBNZBC:当CY = 1时,程序转移到操作数所规定的地址处; BNC:当CY = 0时,程序转移到操作数所规定的地址处BZ:当Z = 1时,程序转移到操作数所规定的地址处;BNZ:当Z = 0时,程序转移到操作数所规定的地址处指令系统指令系统 BT:如果第一操作数(位)的内容为1,则程序转移到

13、第二操作数($addr16)所规定的地址处 BF:如果第一操作数(位)的内容为零,则程序转移到第二操作数($addr16)所规定的地址处 BTCLR:如果第一操作数(位)的内容为1,则将它们清零,并转移到第二操作数($addr16)所规定的地址处。如果第一操作数(位)是PSW.bit,则将相应标志位清零 DBNZ:第一操作数所规定的目标操作数减1,相减结果存于目标操作数中。如果相减结果不等于0,则程序转移到第二操作数($addr16)所指的地址处。如果相减结果等于0,直接执行后续指令指令系统指令系统位操作指令位操作指令位操作指令包括:MOV1,AND1,OR1,XOR1,SET1,CLR1,N

14、OT1MOV1:将源操作数的位数据传送给目标操作数AND1:CY标志和源操作数进行位逻辑与运算,结果存于CY标志中OR1: CY标志和源操作数进行位逻辑或运算,结果存于CY标志中XOR1:CY标志和源操作数进行位逻辑异或运算,结果存于CY标志中SET1:将目标操作数设置为1CLR1:将目标操作数清零NOT1:CY标志的内容取反指令系统指令系统示例示例MOV1 P3.4, CY ;将CY的内容传送到端口3的第4位AND1 CY, FE7FH.3 ;FE7FH的第3位与CY进行逻辑与OR1 CY, P2.5 ;端口2的第5位与CY进行逻辑或XOR1 CY, A.7 ;A寄存器的第7位与CY进行异或

15、SET1 FE55H.1 ;将FE55H的第1位设置为1CLR1 P3.7 ;将端口3的第7位清零NOT1 CY ;CY标志的内容取反指令系统指令系统调用和返回指令调用和返回指令包括:CALL,CALLF,CALLT,BRK,RET,RETI,TETBCALL:子程序调用指令,采用16位绝对寻址或寄存器间接寻址 CALLF:程序调用指令,调用的地址范围为0800H 至0FFFHCALLT:查找调用表,转到调用表字数据所指示的地址(地址的高8位固定为00000000B,随后5位由addr5规定)BRK:软件中断指令。将PSW和下一条指令地址(PC+1)存于堆栈中,然后将IE标志清零,屏蔽向量中断

16、。将存储的数据转向由向量地址(003EH)处的字数据所指的地址。RETB指令用于从该指令产生的软件向量中断处返回 RET:返回指令,是从CALL, CALLF和CALLT指令所执行的子程序调用处返回指令系统指令系统RETI:向量中断返回指令。将存于堆栈的字数据返回到PC和PSW中,程序从中断服务子程序处返回。不能用于BRK指令的返回。执行RETI指令可将NMIS标志清零RETB:BRK指令产生的软中断返回指令指令系统指令系统CPU 控制指令控制指令包括:SEL RBn,NOP,EI,DI,HALT,STOP SEL RBn:由操作数(RBn)规定的寄存器组在下一条指令和后续指令中使用。RBn的

17、范围从RB0到RB3 NOP:仅仅消耗时间,不作任何处理 EI:开中 DI:关中 HALT:设置HALT模式 STOP:设置STOP 模式指令系统指令系统汇编程序基本结构汇编程序基本结构78K系列微处理器使用RA78K0(汇编包)将源程序转换为机器语言RA78K0包括7个程序:结构化汇编预处理程序、汇编程序、连接程序、目标代码转换程序、库、列表转换程序和项目管理器PMplus项目管理器PM plus执行一系列操作:编辑、编译/装配、连接和调试等基于模块的设计方法通常将一个源程序分为多个模块,每个源程序模块应该按照有关格式编写,才可以传送给汇编程序,汇编成目标代码1. 模块头(可以省略)2. 模

18、块体3. 模块尾汇编语言程序设计汇编语言程序设计模块头模块头:可以使用的控制语句如下表汇编语言程序设计汇编语言程序设计模块体模块体:可以使用所有其他的伪指令、控制命令及指令系统中的所有指令。模块体必须用段来描述,可以使用下列4 种段描述模块体:代码段必须用CSEG 定义数据段必须用DSEG 定义位段必须用BSEG 定义绝对段用ORG 定义,或者用AT 指令重定位使用CSEG, DSEG, 或BSEG 定义的段数据段必须在代码段之前定义模块尾模块尾:使用END 伪指令描述模块的结束汇编语句的格式汇编语句的格式符号和助记符之间必须根据助记符的种类选用冒号、1 个或几个空格或制表符隔开助记符和操作数

19、之间必须用1 或几个空格或制表符隔开,有些指令没有操作数注释必须用分号隔开,注释可有可无每行必须用CR定界汇编语言程序设计汇编语言程序设计符号的类型符号的类型CODE01 CSEG ; “CODE01”是一个段名VAR01 EQU 10H ; “VAR01” 是一个(常量的)名字LAB01: DW 0 ; “LAB01” 是一个标号NAME SAMPLE ; “SAMPLE” 是一个模块名MAC1 MACRO ; “MAC1”是一个宏名汇编语言程序设计汇编语言程序设计助记符助记符助记符:可以是指令、伪指令或宏引用操作数操作数操作数是指令、伪指令或宏引用操作的数据根据不同的指令、伪指令或宏引用,

20、操作数区可以有1 个或2 个操作数,也可以没有操作数,如果有两个操作数时,用逗号隔开操作数主要类型操作数主要类型 常数(数据和字符串常数)、 字符串、 寄存器名、 特殊字符($, #, !, and )、段定义伪指令的重定位属性名、符号、表达式和位操作类型的操作数汇编语言程序设计汇编语言程序设计二进制(后缀B或Y)、八进制(后缀O或Q)、十进制(后缀D或T,或没有后缀)、十六进制(后缀H )、ASCII 码 (使用一对单引号,例如a代表65H)特殊字符特殊字符$ :表示指令的地址(多字节指令时代表这个地址的第一个字节);是一个分支指令的相对寻址模式! :表示一个分支指令的绝对寻址模式# :表示

21、立即数 :表示间接寻址表达式和运算符表达式和运算符 HIGH 运算符:返回该数据的高8位数值 LOW 运算符:返回该数据的低8位数值MOV A,#HIGH 1234H MOV A,#12H汇编语言程序设计汇编语言程序设计DATAPOS 运算符:返回一个位符号的地址部分(字节地址)SYM EQU 0FE68H.6 ;用EQU定义“SYM”0FE68H.6MOV A,!DATAPOS SYM MOV A, !0FE68HBITPOS 运算符:返回一个位符号的位部分(位位置)SYM EQU 0FE68H.6CLR1 HL.BITPOS SYM CLR1 HL.6汇编语言程序设计汇编语言程序设计运算符

22、的优先顺序运算符的优先顺序汇编语言程序设计汇编语言程序设计汇编伪指令汇编伪指令伪指令不生成机器代码,主要作用是: 便于描述汇编源程序、 初始化存储区及预留存储区、 为汇编程序及连接器进行特定处理时提供所需要的信息汇编语言程序设计汇编语言程序设计段定义方法及对应的存储区段定义方法及对应的存储区代码段定位伪指令代码段定位伪指令CALLT0:段的起始地址是偶地址,且位于0040H007FH。为代码段指定被1字节指令CALLT 调用的子程序入口地址FIXED:段的起始地址位于0800H0FFFH。为代码段指定被2 字节指令CALLF 调用的子程序的入口地址AT:指定一个段的绝对地址。地址范围为0000

23、HFEFFHUNIT:定义段地址可以位于0080HFA7FH 的任何位置汇编语言程序设计汇编语言程序设计UNITP:段地址可在0080HFA7FH 的任何位置,并且起始地址为偶数地址IXRAM:定义段地址位于内部扩展RAMSECUR_ID:为专用的安全ID 指定段地址为0085H008EH。这个位置只能用于存放安全ID数据段常用定位伪指令数据段常用定位伪指令SADDR:段地址位于saddr(0FE20H0FEFFH)区SADDRP:段地址位于saddr(0FE20H0FEFFH)区,起始地址为偶数地址。使用SADDR和SADDRP定义变量时,变量的定位范围不可以超出这个固定的区域,否则将产生溢

24、出错误AT:指定一个绝对地址UNIT:缺省设置。指定段地址可以位于RAM的任何位置UNITP: 段地址可以位于RAM的任何位置,始地址为偶数地址IHRAM:段地址位于高速RAM汇编语言程序设计汇编语言程序设计LRAM:段地址位于低速RAMDSPRAM:段地址位于显示RAMIXRAM:段地址位于内部扩展RAM位单元段常用定位伪指令位单元段常用定位伪指令AT:用一个绝对地址的第0 位指定一个位单元段的起始地址。地址范围0FE20H0FEFFHUNIT:缺省设置。段地址位于0FE20H0FEFFH 的任何位置ORG 伪指令:把表达式确定的值赋给程序计数器,遇到一个段定义伪指令(CSEG, DSEG,

25、 BSEG, 或ORG)或END 伪指令为止格式:符号 ORG 表达式;注释汇编语言程序设计汇编语言程序设计EQU 伪指令: 把表达式的值赋给前面的名字。该名字不可以在程序的其他位置再次定义。表达式中使用的符号必须是已经定义过的符号格式:名字EQU 表达式;注释SET 伪指令:把表达式的值赋给前面的名字。该名字可以在程序的其他位置以同样方法再次定义。由该表达式确定的名字数值在再次被定义前都是有效的。表达式中使用的符号必须是已经定义过的符号格式:名字SET 绝对表达式;注释汇编语言程序设计汇编语言程序设计存储区初始化及预留定义伪指令存储区初始化及预留定义伪指令DB 伪指令:初始化一个字节区域格式

26、:标号: DB (大小) 初始值,. ;注释DW 伪指令:初始化一个字区域格式:标号: DW (大小) 初始值,. ;注释DS 伪指令:预留字节存储区,预留数量由绝对表达式确定格式:标号: DS 绝对表达式;注释DBIT 伪指令:在位单元段预留一个位存储单元格式:名字 DBIT ;注释汇编语言程序设计汇编语言程序设计目标模块名字声明伪指令目标模块名字声明伪指令NAME 伪指令:为目标模块分配一个由汇编程序输出的目标模块名格式:标号: NAME 目标模块名;注释自动分支指令选择伪指令自动分支指令选择伪指令BR 伪指令:根据分支的目的地址范围自动地选择2 字节或3 字节的分支指令,并产生相应的目标

27、代码格式:标号: BR 表达式;注释汇编结束伪指令汇编结束伪指令END 伪指令:用于结束源程序模块的结束格式: END ;注释宏伪指令宏伪指令宏的基本功能是使用一个名字实现子程序的功能。可以避免代码重复MCRO 伪指令格式:宏名: MACRO 形参, ;注释宏体ENDM ;注释LOCAL 伪指令:说明定义的符号是只在宏体中有效的本地符号格式:LOCAL 符号名, ;注释汇编语言程序设计汇编语言程序设计REPT 伪指令:重复执行由REPT-ENDM定义的一串指令,重复的次数由表达式的值确定格式:标号: REPT 绝对表达式;注释ENDM ;注释IRP(不定次数的重复) 伪指令:重复执行由IRP-

28、ENDM定义的一串指令,当用实参替换形参时,重复的次数由实参的值确定格式:标号: IRP 形参, ;注释ENDM ;注释汇编语言程序设计汇编语言程序设计EXITM(退出宏) 伪指令:用于从MACRO伪指令定义的宏体和REPT-ENDM 或IRP-ENDM定义的重复模块中强制退出格式:标号: EXITM ;注释ENDM(宏结束) 伪指令:用于结束宏定义的指令执行格式: ENDM ;注释汇编语言程序设计汇编语言程序设计汇编程序结构举例汇编程序结构举例:十六进制- ASCII码的代码转换程序写缓冲区的程序设计写缓冲区的程序设计DISP_byte_write1:MOVW HL,#DISP_buffer

29、 ;缓冲区首地址入HLMOV A,!M_LCD_WORK ;要写入的数据低位入AMOV HL+B,A ;写入INC B ;偏移地址加1MOV A,!M_LCD_WORK+1 ;要写入的数据高位入AMOV HL+B,A ;写入MOV A,BMOV !M_LCD_SET,A ;保存偏移地址RET键盘扫描中断处理程序键盘扫描中断处理程序;名称:Keyscan,功能:Key Scan 中断处理程序,内部参数:KSF : Key Scan Flag(CPU产生,表示键扫描允许), M_keybuffer : 键扫内容缓冲区, P_Keyscan:键扫描Port口, P_Keyreturn : 键扫描返回

30、Port口,出口参数:F_keyscan_int: 键扫完毕标志键值处理子程序键值处理子程序名称: Key_process功能: 键盘处理程序; 根据扫描缓冲区中的内容,生成对应得键值入口参数:F_Keyscan_int : KeyScan 中断程序生成扫描内容内部参数:M_keycode_new : 新键值, M_keycode_old : 旧键值, M_Keybuffer: 键扫内容缓冲,M_keywork_old:上次有效键值, M_keypress_timer:键按下时间计时器, F_keyin : 已经有键按下, F_keychat_end : 键盘消抖完毕, F_key_valid

31、 : 按键是否无效, F_keyoff : 等待所有键全放开, F_keypress_2s : 健按下时间超过2秒, F_key_same : 键第一次相同标志, F_keypress_2s ; 按下时间2秒,键值处理子程序键值处理子程序出口参数: M_keycode_work : 当前工作键值, F_key_process : 键处理请求, F_key_repeat : Key保持标志,F_key_click : 键按下并松开,时间2秒键值消抖子程序键值消抖子程序名称:Keychat,功能:按键消抖,入口参数:M_keycode_new : 新键值;M_keycode_old : 旧键值,内部参数:M_keychat : 键消抖计数器,出口参数: F_keychat_end : chat 完;F_key_valid : 键有效键按下时间计时处理子程序键按下时间计时处理子程序名称:Timer_key_proc, 功能:键时间处理(10ms调用),入口参数: M_keypress_timer : 键按下时间计时器,出口参数: F_keypress_2s : 键按下2秒标志键值译码子程序键值译码子程序名称:Key_decode,功能:键值译码(将键盘键值1-16转换成对应遥控键码),入口参数: A = 键盘键值,出口参数: A = 遥控键值

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号