汽车单片机原理及应用---第四章指令系统.ppt_第1页
汽车单片机原理及应用---第四章指令系统.ppt_第2页
汽车单片机原理及应用---第四章指令系统.ppt_第3页
汽车单片机原理及应用---第四章指令系统.ppt_第4页
汽车单片机原理及应用---第四章指令系统.ppt_第5页
已阅读5页,还剩83页未读 继续免费阅读

下载本文档

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

文档简介

第四讲 指令系统,主要内容: 寻址方式 指令系统 程序设计,指令地址寻址,相对寻址:将一条指令的8 位立即数与下一条指令的起始地址相加,结果赋给程序计数器(PC),然后转向相加结果指向的地址 立即数是带符号位的补码(128 to +127),相对转移值是从下一条指令的起始地址开始,范围在128 与+127之间 执行“BR $addr16”指令或条件转移指令,立即寻址:将指令中的立即数赋给程序计数器(PC),然后转向该地址 如“CALL !addr16”、“BR !addr16”或“CALLF !addr11” 指令 CALL !addr16 和BR !addr16指令的转移地址范围是所有内存空间。CALLF !addr11指令的转移地址范围在0800H与0FFFH之间,CALL !addr16, BR !addr16 指令,指令地址寻址,CALLF !addr11 指令,指令地址寻址,表间接寻址:通过指令码低5位的立即数(从第1位到第5位),访问特定存储单元的表的内容(转移目的地址),并将表的内容赋给程序计数器(PC),然后转向该地址 在执行CALLT addr5指令时,进行表间接寻址。执行该指令时,根据存储在内存表中40H至7FH之间的地址,能够跳转到整个内存空间的任意位置,指令地址寻址,寄存器寻址:将一条指令的寄存器对(AX)的内容赋值给程序计数器(PC),然后转向该地址 “BR AX”指令,指令地址寻址,指令执行期间寄存器寻址和存储器寻址所进行的操作,隐含寻址:规定某些寄存器地址是作为通用寄存器中的累加器(A 和AX)使用,操作数地址寻址,寄存器寻址:将通用寄存器作为操作数进行访问,并由寄存器组选择标志(RBS0 和RBS1)和指令中的寄存器标识码(Rn 和RPn)确定要访问的通用寄存器,如果使用8位寄存器,则指令码中有3位用来表示一个8位寄存器,r 和rp可用绝对名称(R0 到R7 以及RP0 到RP3)和功能名称(X, A, C, B, E, 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之间,则将一个有效地址的第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)和指令码中的寄存器对说明,定义需要访问的寄存器对,【操作数格式】,MOV A, DE; 选择DE寄存器对作为操作数,操作数地址寻址,基址寻址:将8位立即数加到HL寄存器对中, HL寄存器对作为基地址寄存器,根据相加结果寻址。需要访问的HL寄存器对属于由寄存器组选择标志(RBS0和RBS1)确定的寄存器组。通过将偏移量扩展为16位正数,来完成加法操作,进位忽略。该寻址方式可对整个内存空间进行,【操作数格式】,MOV A, HL+10H; byte的值为10H,操作数地址寻址,基址变址寻址:将B或C寄存器的内容加到HL寄存器中,HL寄存器作为基地址寄存器,并根据相加结果寻址。 需要访问的HL、B和C寄存器属于由寄存器组选择标志(RBS0和RBS1)确定的寄存器。通过将B或C寄存器扩展为一个16位的正数来完成加法运算,进位忽略。该寻址方式可对整个内存空间进行,操作数格式,MOV A, HL+B,操作数地址寻址,堆栈寻址:根据堆栈指针(SP)的内容对堆栈区域进行间接寻址。当执行PUSH, POP, 子程序调用和RETURN指令时,或者根据中断请求产生对寄存器进行设置或复位时,将自动采用这种寻址方式。该方式仅对内部高速RAM区域进行寻址,操作数地址寻址,指令系统按照功能分 数据传送类指令 算术运算类指令 逻辑运算类指令 循环操作类指令 无条件转移类指令 条件转移类指令 位操作类指令 调用及返回类指令 CPU 控制类指令,指令系统,在每种指令的“操作数”栏列出操作数。如果有两种或两种以上的标识方法,可选其中之一 大写字母和符号#、!、$ 、 是关键字,必须按其原样书写 #: 立即数标识 !: 绝对地址标识 $: 相对地址标识 : 间接地址标识 立即数用来描述一个数值型数据或标志。当使用标志时,注意必须加上符号#, !, $, 和 。 操作数寄存器标识符r 和rp、功能名称(X, A, C, etc.)或绝对名称(R0, R1,R2 等)都可用于标识,操作数标识符和标识方法,操作数标识符和标识方法,数据传送类指令 MOV,MOVW,XCH,XCHW,PUSH,POP MOV: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 寄存器中 除法指令:DIVUW:目标操作数的内容除以AX寄存器的内容,商和余数分别存放在AX寄存器和目标操作数中。除法运算是将AX寄存器内容和目标操作数内容看成无符号数。但当目标操作数为0时,则将X寄存器的内容存于C寄存器中,并将AX的内容设置为0FFFFH,指令系统,比较指令 CMP:8位操作,修改Z、AC和CY标志位 CMPW:16位操作,修改Z和CY标志,增1/减1指令 INC、 DEC :8位操作。目标操作数增加1/减1 INCW、 DECW :目标操作数加1 /减1,指令系统,BCD码 调整指令 ADJBA:将A寄存器、CY标志以及AC标志的内容按十进制进行调整。仅在进行BCD数据相加,且相加结果在A寄存器中时,该指令有效,影响Z标志,指令系统,ADJBS:将A 寄存器、CY 标志以及AC 标志的内容按十进制进行调整。仅在进行BCD数据相减,且相减结果存在A 寄存器中时,有意义。如果调整结果的A 寄存器内容为0,则将Z 标志设置为1,否则将Z 标志清零,逻辑运算指令 指令为8 位操作指令,AND,OR,XOR,指令系统,移位操作指令 指令是8 位操作指令,ROR,ROL,RORC,ROLC,ROR4和ROL4,ROR,ROL,RORC,ROLC,指令系统,ROL4,ROR4:A寄存器的低4位和目标操作数的两个数位(4位数据)向右循环移位。A寄存器的高4位保持不变,ROR4,ROR4HL,无条件转移指令 BR:无条件转移指令。将目标地址操作数传送到PC 中,并转向该地址 BR AX ;将AX寄存器的内容作为转移地址,条件转移指令 条件转移指令包括:BC,BNC,BZ,BNZ,BT,BF,BTCLR,DBNZ,BC:当CY = 1时,程序转移到操作数所规定的地址处; BNC:当CY = 0时,程序转移到操作数所规定的地址处,BZ:当Z = 1时,程序转移到操作数所规定的地址处; BNZ:当Z = 0时,程序转移到操作数所规定的地址处,指令系统,BT:如果第一操作数(位)的内容为1,则程序转移到第二操作数($addr16)所规定的地址处 BF:如果第一操作数(位)的内容为零,则程序转移到第二操作数($addr16)所规定的地址处 BTCLR:如果第一操作数(位)的内容为1,则将它们清零,并转移到第二操作数($addr16)所规定的地址处。如果第一操作数(位)是PSW.bit,则将相应标志位清零 DBNZ:第一操作数所规定的目标操作数减1,相减结果存于目标操作数中。如果相减结果不等于0,则程序转移到第二操作数($addr16)所指的地址处。如果相减结果等于0,直接执行后续指令,指令系统,位操作指令 位操作指令包括:MOV1,AND1,OR1,XOR1,SET1,CLR1,NOT1 MOV1:将源操作数的位数据传送给目标操作数 AND1:CY标志和源操作数进行位逻辑与运算,结果存于CY标志中 OR1: CY标志和源操作数进行位逻辑或运算,结果存于CY标志中 XOR1:CY标志和源操作数进行位逻辑异或运算,结果存于CY标志中 SET1:将目标操作数设置为1 CLR1:将目标操作数清零 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进行异或 SET1 FE55H.1 ;将FE55H的第1位设置为1 CLR1 P3.7 ;将端口3的第7位清零 NOT1 CY ;CY标志的内容取反,指令系统,调用和返回指令 包括:CALL,CALLF,CALLT,BRK,RET,RETI,TETB CALL:子程序调用指令,采用16位绝对寻址或寄存器间接寻址 CALLF:程序调用指令,调用的地址范围为0800H 至0FFFH CALLT:查找调用表,转到调用表字数据所指示的地址(地址的高8位固定为00000000B,随后5位由addr5规定) BRK:软件中断指令。将PSW和下一条指令地址(PC+1)存于堆栈中,然后将IE标志清零,屏蔽向量中断。将存储的数据转向由向量地址(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的范围从RB0到RB3 NOP:仅仅消耗时间,不作任何处理 EI:开中 DI:关中 HALT:设置HALT模式 STOP:设置STOP 模式,指令系统,汇编程序基本结构 78K系列微处理器使用RA78K0(汇编包)将源程序转换为机器语言 RA78K0包括7个程序:结构化汇编预处理程序、汇编程序、连接程序、目标代码转换程序、库、列表转换程序和项目管理器PMplus 项目管理器PM plus执行一系列操作:编辑、编译/装配、连接和调试等 基于模块的设计方法通常将一个源程序分为多个模块,每个源程序模块应该按照有关格式编写,才可以传送给汇编程序,汇编成目标代码 模块头(可以省略) 模块体 模块尾,汇编语言程序设计,模块头:可以使用的控制语句如下表,汇编语言程序设计,模块体:可以使用所有其他的伪指令、控制命令及指令系统中的所有指令。模块体必须用段来描述,可以使用下列4 种段描述模块体: 代码段必须用CSEG 定义 数据段必须用DSEG 定义 位段必须用BSEG 定义 绝对段用ORG 定义,或者用AT 指令重定位使用CSEG, DSEG, 或BSEG 定义的段 数据段必须在代码段之前定义 模块尾:使用END 伪指令描述模块的结束,汇编语句的格式,符号和助记符之间必须根据助记符的种类选用冒号、1 个或几个空格或制表符隔开 助记符和操作数之间必须用1 或几个空格或制表符隔开,有些指令没有操作数 注释必须用分号隔开,注释可有可无 每行必须用CR定界,汇编语言程序设计,符号的类型,CODE01 CSEG ; “CODE01”是一个段名 VAR01 EQU 10H ; “VAR01” 是一个(常量的)名字 LAB01: DW 0 ; “LAB01” 是一个标号 NAME SAMPLE ; “SAMPLE” 是一个模块名 MAC1 MACRO ; “MAC1”是一个宏名,汇编语言程序设计,助记符 助记符:可以是指令、伪指令或宏引用,操作数 操作数是指令、伪指令或宏引用操作的数据 根据不同的指令、伪指令或宏引用,操作数区可以有1 个或2 个操作数,也可以没有操作数,如果有两个操作数时,用逗号隔开,操作数主要类型 常数(数据和字符串常数)、 字符串、 寄存器名、 特殊字符($, #, !, and )、段定义伪指令的重定位属性名、符号、表达式和位操作类型的操作数,汇编语言程序设计,二进制(后缀B或Y)、八进制(后缀O或Q)、十进制(后缀D或T,或没有后缀)、十六进制(后缀H )、ASCII 码 (使用一对单引号,例如a代表65H),特殊字符 $ :表示指令的地址(多字节指令时代表这个地址的第一个字节); 是一个分支指令的相对寻址模式 ! :表示一个分支指令的绝对寻址模式 # :表示立即数 :表示间接寻址,表达式和运算符,HIGH 运算符:返回该数据的高8位数值 LOW 运算符:返回该数据的低8位数值 MOV A,#HIGH 1234H MOV A,#12H,汇编语言程序设计,DATAPOS 运算符:返回一个位符号的地址部分(字节地址) SYM EQU 0FE68H.6 ;用EQU定义“SYM”0FE68H.6 MOV A,!DATAPOS SYM MOV A, !0FE68H BITPOS 运算符:返回一个位符号的位部分(位位置) SYM EQU 0FE68H.6 CLR1 HL.BITPOS SYM CLR1 HL.6,汇编语言程序设计,运算符的优先顺序,汇编语言程序设计,汇编伪指令 伪指令不生成机器代码,主要作用是: 便于描述汇编源程序、 初始化存储区及预留存储区、 为汇编程序及连接器进行特定处理时提供所需要的信息,汇编语言程序设计,段定义方法及对应的存储区,代码段定位伪指令,CALLT0:段的起始地址是偶地址,且位于0040H007FH。为代码段指定被1字节指令CALLT 调用的子程序入口地址 FIXED:段的起始地址位于0800H0FFFH。为代码段指定被2 字节指令CALLF 调用的子程序的入口地址 AT:指定一个段的绝对地址。地址范围为0000HFEFFH UNIT:定义段地址可以位于0080HFA7FH 的任何位置,汇编语言程序设计,UNITP:段地址可在0080HFA7FH 的任何位置,并且起始地址为偶数地址 IXRAM:定义段地址位于内部扩展RAM SECUR_ID:为专用的安全ID 指定段地址为0085H008EH。这个位置只能用于存放安全ID,数据段常用定位伪指令 SADDR:段地址位于saddr(0FE20H0FEFFH)区 SADDRP:段地址位于saddr(0FE20H0FEFFH)区,起始地址为偶数地址。使用SADDR和SADDRP定义变量时,变量的定位范围不可以超出这个固定的区域,否则将产生溢出错误 AT:指定一个绝对地址 UNIT:缺省设置。指定段地址可以位于RAM的任何位置 UNITP: 段地址可以位于RAM的任何位置,始地址为偶数地址 IHRAM:段地址位于高速RAM,汇编语言程序设计,LRAM:段地址位于低速RAM DSPRAM:段地址位于显示RAM IXRAM:段地址位于内部扩展RAM,位单元段常用定位伪指令 AT:用一个绝对地址的第0 位指定一个位单元段的起始地址。地址范围0FE20H0FEFFH UNIT:缺省设置。段地址位于0FE20H0FEFFH 的任何位置,ORG 伪指令:把表达式确定的值赋给程序计数器,遇到一个段定义伪指令(CSEG, DSEG, BSEG, 或ORG)或END 伪指令为止 格式:符号 ORG 表达式;注释,汇编语言程序设计,EQU 伪指令: 把表达式的值赋给前面的名字。该名字不可以在程序的其他位置再次定义。表达式中使用的符号必须是已经定义过的符号 格式:名字EQU 表达式;注释,SET 伪指令:把表达式的值赋给前面的名字。该名字可以在程序的其他位置以同样方法再次定义。由该表达式确定的名字数值在再次被定义前都是有效的。表达式中使用的符号必须是已经定义过的符号 格式:名字SET 绝对表达式;注释,汇编语言程序设计,存储区初始化及预留定义伪指令 DB 伪指令:初始化一个字节区域 格式:标号: DB (大小) 初始值,. ;注释 DW 伪指令:初始化一个字区域 格式:标号: DW (大小) 初始值,. ;注释 DS 伪指令:预留字节存储区,预留数量由绝对表达式确定 格式:标号: DS 绝对表达式;注释 DBIT 伪指令:在位单元段预留一个位存储单元 格式:名字 DBIT ;注释,汇编语言程序设计,目标模块名字声明伪指令 NAME 伪指令:为目标模块分配一个由汇编程序输出的目标模块名 格式:标号: NAME 目标模块名;注释,自动分支指令选择伪指令 BR 伪指令:根据分支的目的地址范围自动地选择2 字节或3 字节的分支指令,并产生相应的目标代码 格式:标号: BR 表达式;注释,汇编结束伪指令 END 伪指令:用于结束源程序模块的结束 格式: END ;注释,宏伪指令 宏的基本功能是使用一个名字实现子程序的功能。可以避免代码重复 MCRO 伪指令 格式:宏名: MACRO 形参, ;注释 宏体 ENDM ;注释 LOCAL 伪指令:说明定义的符号是只在宏体中有效的本地符号 格式:LOCAL 符号名, ;注释,汇编语言程序设计,REPT 伪指令:重复执行由REPT-ENDM定义的一串指令,重复的次数由表达式的值确定 格式:标号: REPT 绝对表达式;注释 ENDM ;注释 IRP(不定次数的重复) 伪指令:重复执行由IRP-ENDM定义的一串指令,当用实参替换形参时,重复的次数由实参的值确定 格式:标号: IRP 形参, ;注释 ENDM ;注释,汇编语言程序设计,EXITM(退出宏) 伪指令:用于从MACRO伪指令定义的宏体和REPT-ENDM 或IRP-ENDM定义的重复模块中强制退出 格式:标号: EXITM ;注释 ENDM(宏结束) 伪指令:用于结束宏定义的指令执行 格式: ENDM ;注释,汇编语言程序设计,汇编程序结构举例: 十六进制- ASCII码的代码转换程序 ,写缓冲区的程序设计 DISP_byte_write1: MOVW HL,#DISP_buffer ;缓冲区首地址入HL MOV A,!M_LCD_WORK ;要写入的数据低位入A MOV HL+B,A ;写入 INC B ;偏移地址加1 MOV A,!M_LCD_WORK+1 ;要写入的数据高位入A MOV HL+B,A ;写入 MOV A,B MOV !M_LCD_SET,A ;保存偏移地址 RET,键盘扫描中断处理程序 ;名称:Keyscan,功能:Key Scan 中断处理程序,内部参数:KSF : Key Scan Flag(CPU产生,表示键扫描允许), M_keybuffer

温馨提示

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

评论

0/150

提交评论