armasm是ARM汇编语言的交叉编译器,本节将详细介绍它的使用方法。
Thumb指令集把32位ARM指令集的一个子集编码为一个16位的指令集。在16位外部数据总线宽度下,ARM处理器上使用Thumb指令的性能要比使用ARM指令的性能更好。
所有的Thumb指令都是16位的。它们都是ARM指令重新编码得到的,所以继承了ARM指令集的许多特点。
Thumb指令集的多寄存器Load/Store指令是ARM指令集的多寄存器Load/Store指令的简化形式。同ARM指令一样,Thumb多寄存器数据传送指令可以用于过程调用与返回以及存储器块拷贝。但为了编码的紧凑性,这两种用法由分开的指令实现,并且这些指令也只使用单一的寻址方式。在其他方面,这些指令的性质与等价的ARM指令相同。
Thumb异常中断产生指令与ARM指令集下的异常中断指令十分相似。同ARM指令集相同,Thumb指令集中同样包含两条异常中断产生指令:软件中断指令SWI用于产生SWI异常中断;断点中断指令BKPT主要用于产生软件断点,供调试程序使用(只在ARMv5及以上版本中使用)。
编写程序,完成下列逻辑功能:Q = XYZ\\F + XY\\ZF + X\\YZF + XYZF (\\Y表示Y非,\\Z表示Z非、、、)这个逻辑表达式,可以化简,就是:Q = XYZ + XYF + XZF假设,各个变量对应的引脚如下:X: P1.0Y: P1.1Z:
分散加载可以更加方便准确的指定映像存储器映射,为映像组件分组和布局提供了全面控制。它能够描述由载入时和执行时分散在存储器映射中的多个区组成的复杂映像映射。虽然,分散加载可以用于简单映像,但它通常仅用于具有复杂存储器映射的映像。
汇编编程:矩阵键盘控制数码管切换显示0~F。下面是电路图。要求16个键按下能显示0~F字样。看到这样的电路和程序,不由得想起初学单片机时情景。十几年前,是一本北航的书,里面就是这样的程序。后来又看
Thumb指令集中存在未定义的指令空间,如图11.65所示。
P2.0~P2.2 分别接上了独立按键 K0、K1、K2。P1 接上了 8 个 LED,输出低电平时发光。要求:按下 K1 键,P1.7 输出周期为 1s 的方波;按下 K2 键,P1 输出循环流水灯,每 2 个灯亮 0.5s;按下 K0 键,停
对3级流水线的ARM处理器来说,做相对较小的改动就可以实现Thumb指令集(5级流水线的实现要复杂些)。为实现Thumb指令集,在指令流水线中增加了Thumb指令解码逻辑,该解码逻辑将预取的Thumb指令转换成等价的ARM指令。图11.66显示了Thumb指令的扩展逻辑组织。
用这个矩阵键盘做单片机输入,插 P1 口的 P1.0~P1.6。想问的是,当:按下 1 键 P0 口的 P0.0 输出高电平;按下 2 键 P0.1 输出高电平;……一直到 8 键就可以了。还有一个要求,当按下一个键时延时5秒并
Thumb以其较高的代码密度和在窄存储器上的性能,使得它在很多系统中得到广泛应用。但在很多情况下,还是不得不使用ARM指令,这是因为:
;单片机计数器 0~100。;外部中断控制加减。;高于100还是100,低于0还是0。;按照设计思路,程序全面改写如下: ORG 0000H AJMP MAIN ORG 0003H AJMP TL ORG 0013H AJMP TH ORG 0050HMAIN: M
内联汇编和嵌入型汇编是包含在C/C++编译器中的汇编器。使用它可以在C/C++程序中实现C/C++语言不能完成的一些工作。例如,在下面几种情况中必须使用内联汇编或嵌入型汇编。