6 寻址方式与汇编语言.ppt_第1页
6 寻址方式与汇编语言.ppt_第2页
6 寻址方式与汇编语言.ppt_第3页
6 寻址方式与汇编语言.ppt_第4页
6 寻址方式与汇编语言.ppt_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

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

文档简介

寻址方式与汇编语言 2010年7月 控制科学与工程学院 1 机器语言用机器能够直接识别的二进制指令代码 即机器码或可执行的目标代码 编写的程序称为机器语言 执行速度快不易记忆 十分繁琐 特点 单片机语言 功能 将累加器A赋值1机器码 860186 告诉单片机要实现什么功能01 就是数1 2 汇编语言用机器指令系统的助记符 能反映指令特征和操作性质的英文单词或英文缩写 用符号代替操作数来编写的程序称为汇编语言程序 用汇编语言编写的程序不仅执行速度快 又可以有效地利用机器本身的专有特性 从而提高机器的工作效率 用汇编语言编写的程序由于面向机器 在一种机型上不能运行另一种机型的汇编程序 通用性差 特点 功能 将累加器A赋值1汇编语言 LDAA 1LDDA LOADAccumulatorA 1 就是数1 汇编语言指令格式 汇编语言对格式有严格的要求 典型的汇编语言有4部分组成 label MOVB 66 X 注释标号操作码源操作数目的操作数注释操作码是指令功能的英文缩写 表示指令的功能 由助记符组成 操作数表示指令操作的对象 不同的指令操作的对象形式不同 注释说是为了方便阅读加的中文或者英文注释 可有可无 汇编语言是与硬件有关的语言 都是针对某一种类型的CPU 不同公司的产品 其汇编语言中使用的助记符可能会略有差异 但是语法格式都是一样的 9S12单片机指令系统每条指令必须有操作码 操作数可以是0 3个9S12内核的指令系统一共有601条指令 汇编语言与机器语言指令是一一对应的 汇编常量的表示 十进制 100 255十六进制 55 1234八进制 77 1000二进制 01010101字符串 jkl 990 ADDX00 8 寻址方式 寻址 操作数指定了参与运算的数或者数所在的地址 在单片机的存储空间中 寻找指令规定的操作数的地址 9S12内核有8种寻址方式 隐含寻址立即数寻址直接寻址扩展寻址相对寻址变址寻址累加器变址寻址带自动加 减的5位偏移量变址寻址 1 隐含寻址 定义 只有操作码 没有操作数或操作数为寄存器 不显示操作数 如 NOP PSHA PSHB PSHX PSHY 隐含操作数分别为无 A B X Y 一般是单字节指令 隐含寻址举例 PC C003 A CB SP 500NOP PC C004 A CB SP 500PSHA A CB SP 4FF 4FF CBNOP是单字节指令 只让程序计数器PC加1PSHA首先移动SP指针 再压入数值 在立即数寻址方式下 指令中的操作数 参与运算的数 就直接存放在机器代码中 紧跟在操作码之后 这条指令汇编成机器代码后 操作数作为指令的一部分存放在操作码之后的主存单元中 称这种操作数为立即数立即数寻址方式常用来给寄存器赋值 注 立即数前加 2 立即数寻址 LDAA 55 表示将十六进制立即数55加载到累加器A中LDX 1234 表示将十进制数1234加载到X中LDY 01010101 表示将二进制数00100110加载到Y中 3 直接寻址 操作数是单字节地址 范围是 00 FF 共256个单元 一般访问I O寄存器 如 LDAA 55表示将 55内存单元的数据加载到累加器A 执行前 55 0 A CB执行后 55 0 A 0 4 扩展寻址 操作数为16位地址 可访问64K空间 如 LDX 4000将 4000和 4001内存单元的数据加载到X FREESCALE的MCU采用 低字节数放高位地址单元 高字节数放低位地址单元 1 若 4000 12 4001 34执行LDX 4000指令后 XH 12 XL 34 2 又如 STAA 4000 执行结果为A的内容存到 4000单元 STAA StoreAccumulatorA 5 相对寻址 相对转移指令 操作数为单字节如 LABEL1 BRALABEL1 BRA Branchalways 6 变址寻址 操作数由基地址寄存器 X Y SP PC 加偏移量构成 如 若X 1000LDAA0 X A 1000 LDAA7 X A 1000 7 LDAA 150 X A 1000 150 LDAA1000 X A 1000 1000 LDAA 1000 X 将X 1000地址单元中的值作为指针 指向的内存单元的值加载到累加器A中 7 累加器变址寻址 偏移量非立即数 存放在累加器A B D中 如 若X 1000LDABA X B X A LDAAD X A X D 8 带自动加减的5位偏移量间接寻址 有 先加 先减 后加 后减 四种方式 基址寄存器可以是X Y SP 主要用于数据块复制 如 MOVW2 X 4 Y 执行该指令 将X开始单元的两个单元内容 一个字 传送到Y 4开始的两个单元 传送完成后X内容加2 MOVW moveawordofdatafromonememorylocationtoanother 指令系统 数据传输 加载寄存器 传送到内存 内存之间的传输 寄存器间的传输 数据交换 加载有效地址 堆栈操作 指令数学运算 加减乘除 十进制调整 最值等 指令逻辑运算 移位 求补 取反等 指令比较测试指令条件转移 无条件转移 循环指令查表插值指令模糊运算指令系统控制指令 中断 调用 返回等 数据传输指令 LOAD指令指从内存到寄存器数据传送LDAA LDAB LDD LDS LDX LDY如 LDAA 55 将立即数 55加载到ALDX 2000 将 2000和 2001单元数据加载到XSTORE指令指从寄存器到内存数据传送STAA STAB STD STS STX STY如 STAA 1000 将A的内容存到 1000单元STY 2000 将Y的内容存到 2000和 2001单元MOVE指令指从内存到内存数据传送MOVB MOVW如 MOVB 2000 X 将 2000单元内容存到X内容指向单元MOVW2 X 4 Y 将X和X 1内容指向单元存到Y和Y 1指向单元 数据传输指令 TRANSFER传送指令指从寄存器到寄存器数据传送 TAB TAP TBA TFR TPA TSX TSY TXS TYS如 若累加器A中的数据为 55执行TAB指令后 累加器B中的数据为 55 EXCHANGE交换指令指寄存器的数据与寄存器数据交换 EXG XGDX XGDY SEX如 若A中数据为 55 B中数据为 aa执行EXGA B后 A中数据为 aa B中数据为 55 LEA有效地址加载指令 LEAS LEAX LEAY如 LDY 2000LEAS4 Y 执行后SP的值为 2000 Y的值为 2004 数据传输指令 堆栈操作指令 单字节压栈出栈PSHA PSHB PSHCPULA PULB PULC如PSHA指SP减一 A数据传送到SP指向单元PULA指SP指向单元数据传送到A SP加一双字节压栈出栈PSHD PSHX PSHYPULD PULX PULY如PSHD指SP减二 D数据高位 A 传送到SP指向单元 低位 B 传送到SP 1指向单元 PULD指SP指向单元数据传送到D高位 A SP 1指向单元数据传送到低位 B SP加二 数据传输指令举例 加载 存储 LDAA 55 A累加器加载 55STAA 480 把A的内容存到内存 480LDAB 480 480内容加载到BINCB B内容自加1STD 485 D内容送 485 传送交换指令 LDAB AA 立即数 AA送BTAB A送BLDAB AA 立即数 AA送BEXGA B AB交换 MOVE指令 MOVW 1234 490 立即数 1234传送到 490和 491单元 数学运算指令 加法指令ADD 8位加法指令ABA ADDA ADDB ADCA ADCB16位加法指令ABX ABY ADDD减法指令SUB 8位减法指令SBA SUBA SUBB SBCA SBCB16位减法指令SUBD十进制调整指令 DAA 只能用在结果在A中的加法指令 加一指令 INC INCA INCB INS INX INY减一指令 DEC DECA DECB DES DEX DEY 数学运算指令 乘法指令MUL 无符号16位数乘法EMUL D Y 送Y D有符号16位数乘法EMULS D Y 送Y D无符号8位数乘法MUL A B 送A B除法指令DIV 无符号32位数除以16位数EDIV有符号32位数除以16位数EDIVS无符号16位数除以16位数的小数除法FDIV无符号16位数除以16位数IDIV有符号16位数除以16位数IDIVS乘加指令EMACS 数学运算指令 最大 最小值指令MAXA MINA A中数据与内存单元字节型数据比较 较大的传送到AMAXM MINM A中数据与内存单元字节型数据比较 较大的传送到内存单元EMAXD EMIND D中数据与内存单元中两个相临字节型数据组成的字数据比较 大者送DEMAXM EMINM D中数据与内存单元中两个相临字节型数据组成的字数据比较 大者送内存单元 数学运算综合举例 在 2000单元开始存放字节型数据 10 30 04 A0 在 2010单元开始存放字节型数据 11 1A 09 1F 分别使用加 减 乘 除四中运算处理对应位置的数据 并把结果存到 2020开始的内存单元中 例子程序见word文档实际程序见 2 shuxue example 逻辑运算指令 与指令 ANDA ANDB ANDCC如LDY 1000ANDAYA与 1000单元数据与运算 结果保存到A异或指令 EORA EORB或指令 ORAA ORAB ORCC清零指令 CLC CLI CLV CLR CLRA CLRB把进位 中断屏蔽 溢出标志 内存单元 A B清零取反指令 COM COMA COMB对内存单元 A B进行取反运算并存储求补指令 NEG NEGA NEGB对内存单元 A B进行求补运算并存储 逻辑运算指令 位测试指令 BITA BITB将A或B与内存单元内容作与操作 改变标志位位操作指令 BCLR BSETBCLR 将立即数取反与内存单元M内容与操作 将结果送内存单元BSET 将立即数与内存单元M内容或操作 将结果送内存单元逻辑左移指令 LSL LSLA LSLB LSLD将内存字节 A B D内容带C左移逻辑右移指令 LSR LSRA LSRB LSRD将内存字节 A B D内容带C右移 逻辑运算指令 算术左移指令 ASL ASLA ASLB ASLD同逻辑左移算术右移指令 ASR ASRA ASRB将内存字节 A B内容右移一位 最高位不变 最低位移动到C 循环左移指令 ROL ROLA ROLB循环右移指令 ROR RORA RORB 逻辑运算指令举例 取数 55 使用逻辑运算指令使低4位清零 然后低4位置一 对结果取反操作 逻辑右移一位 与内存单元中 00作位测试 查看结果 逻辑运算指令举例 S1 FCB 00 定义参加比较数据LDAA 55 A 55ANDA F0 A 50ORAA 0F A 5FNEGA A A1LSRA A 50C 1BITAS1 Z 1 比较测试指令 比较指令 CBA CMPA CMPB CPD CPS CPX CPY只做减法操作 不返回结果 影响标志位C 借位 V 溢出 N 符号 Z 零 测试指令 TST TSTA TSTB测试内存单元 A或B是否为0 影响标志位N 符号 Z 零 V 总为0 C 总为0 转移跳转循环指令 短转移指令 无条件转移BRA BRN有条件转移BCC BCS BEQ BNE BMI BPL BVC BVS BHI BHS BLO BLS BGT BGE BLT BLE长转移指令 在短转移前加 L 如 LBRA等 转移跳转循环指令 循环控制指令 DBEQ DBNEIBEQ IBNETBEQ TBNE跳转指令 JMP无条件跳转到标号处执行 范围为64K DBEQB LABEL LABEL B减1 若为0 LABEL DBNEB LABEL B减1 若不为0 比较测试转移跳转指令举例 定义程序标号 从该程序标号开始执行程序 做5次空循环延时 A B都给 55 作CBA测试 若Z 1则跳转到程序末尾 比较测试转移跳转指令举例 BRAJ1 短转移到J1NOP 由于转移 此句不执行J1 LDAB 05 B 05J2 NOP 延时的NOP指令DBNEB J2 B 1 若B 0则继续 否则到J2LDAA 55LDAB 55 A B 55CBA 做A B操作 Z 1BEQJ3 若Z 1转J3NOP 此句不执行J3 NOP 转移到此执行 查表插值指令 查表插值指令 TBLETBL例子请见课本115页 系统指令 子程序调用返回返回指令 短子程序调用BSR 128

温馨提示

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

评论

0/150

提交评论