购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.1 概述

本章先提供了有关寻址方式和HCS08 系列CPU汇编指令集方面的简要信息,也对汇编伪指令功能、用法进行了介绍,然后给出了HCS08 汇编程序框架结构,介绍了几个有用的汇编程序设计例子,最后对HCS08 系列MCU所使用的S19 目标文件格式进行了说明。

在源代码和目标代码上,HCS08 系列CPU和M68HC08 系列CPU完全兼容。HCS08增加了一些指令和增强的寻址方式以提高C编译器效率,HCS08 还采用一种新的背景调试方法取代M68HC08 中所使用的监控模式(Monitor Mode)。

和M68HC08 CPU相比,HCS08 CPU增加了以下功能。

● 为LDHX增加了新的寻址方式:

扩展寻址方式(EXT);

无偏移量变址寻址(IX);

8 位偏移量变址寻址(IX1);

16 位偏移量变址寻址(IX2);

8 位偏移量堆栈寻址(SP1);

● 为STHX和CPHX增加了新的寻址方式:

扩展寻址方式(EXT);

8 位偏移量堆栈寻址(SP1);

● 新的背景调试指令(BGND);

● 总线频率提高到 20 MHz;

● 指令队列(或流水线)用于提高指令吞吐量。

使用 16 位寄存器H:X的指令所采用的寻址方式提高了C编译器的效率,BGND指令仅用在调试情形下以实现软件断点。

指令队列(或流水线)改善了指令吞吐量,因为它使操作码和一个字节的操作信息在每条指令一开始就变为有效。如果没有指令队列,CPU需要花费一条指令第一个周期的少数时间以等待程序被取入CPU。任何流程的改变,如分支、跳转或中断,都会使CPU执行3 次程序读取,以填充这条指令队列。和M68HC08 CPU相比,指令队列会引起一些周期数、操作顺序的改变,但是能够一开始就很快执行指令的好处是更好地抵消了在流程改变时填充队列的开销。

在HCS08 系列指令系统中可以使用二进制、八进制、十进制、十六进制这 4 种数制,并采用表 3-1 中规定的几种表示法。对于无前后缀符号数值,大多数编译器默认为十进制数,但是P&E公司的编译器默认把没有前缀的数字当成十六进制数来处理。本书中使用的Codewarrior软件默认没有前缀的数字为十进制数。

表 3-1 4 种数制的表示法

此外还有以下一些规定﹕

① 规定在数字前面加前缀#表示立即数,例如:

注意指令中的数值前有、无#前缀的区别:

② 括号‘’或“”表示单个ASCII码字符或字符串,例如:

③ 用符号*或$作为操作数时表示当前存储器地址,例如:

④ 符号*处于汇编语句中的第一列时表示该行为注释语句。

HCS08 的CPU能够直接识别和执行的是机器语言,每一条汇编指令都有唯一的十六进制编码——机器码与之对应,最终写入MCU的程序Flash空间($1860~$FFAF)的都是机器码。汇编指令到机器码由汇编软件完成。如指令LDA #$10 的机器码是$A610。

S08 汇编指令的机器码长度为 1~3 B,如上述指令为 2 B,表明它要占用 2 B的程序Flash空间。

S08 的指令机器码通常由两部分组成,如表 3-2 所示,前一部分为操作码,表示指令功能,后一部分为操作数,表示操作对象。例如,机器$A610,$A6 为操作码部分,表示“向累加器A载入一个立即数”,$10 表示操作数部分,表示“载入的立即数是$10”。由此可见,CPU能够识别和执行的是机器码,由于机器码中的不同数字序列代表了不同的含义,从而不同的机机码的组合就可以使得CPU完成各种不同的操作,同时一种CPU能够识别和执行的所有指令序列就构成了该种CPU的指令集。

表 3-2 S08 的指令机器码结构

不同指令不仅占用程序Flsah的空间大小有别(机器码 1~3 B),而且不同指令执行的速度快慢也不一样。指令执行的快慢用指令所占用的机器周期来衡量,执行完一条S08 的指令通常需要 1~4 个机器周期,根据不同指令而异。有关汇编指令的机器码和执行周期既可以通过附录A中的指令表查看,也可以在Codewarrior等软件开发环境中查看。

特别注意的是,S08 系列MCU存储字符串、机器码、多字节数据时都是按照从小地址到大地址的顺序先存放数据高位,后存放数据低位,即字符串、机器码、多字节数据在存储区存放都是顺序存放的。 fuFohyx4Gcw0gUcDmJ2vA9s0mI6DeSN3EkiedXrXajO50XJxgbrB6nVpNUl6rO4X

点击中间区域
呼出菜单
上一章
目录
下一章
×