我现在要学习ARM Assembly,为我的Windows Mobile 5 iPAQ开发,但我有一些问题:
答案 0 :(得分:50)
主要差异:
ARM是一种RISC样式架构 - 指令具有常规大小(标准ARM为32位,Thumb模式为16位,但Thumb有一些指令可以咀嚼2个指令'插槽')
至少通过ARM v5架构(我不确定v6是做什么的),ARM上的中断模型与英特尔大不相同 - 而不是将寄存器推入堆栈,ARM交换到不同的“影子”正常集的寄存器集。处理器的模式确定哪个寄存器文件是可见的(并且不是所有寄存器都必须被遮蔽)。这是一个相当复杂的安排。较新的ARM架构(无论如何,v7)都有一个更接近英特尔的中断模型,当中断发生时寄存器被压入堆栈。
Arm指令有一些不在英特尔的有趣功能:
另一方面,除了从中加载和存储之外,ARM不能直接对内存做很多事情。英特尔组装可以直接在内存上执行更多操作。
请注意,ARM体系结构版本并不直接与实际的ARM处理器版本对应 - 例如,如果我没记错,ARM7是体系结构v5处理器。就个人而言,我发现这比应该更加混乱。
ARM架构参考可以从http://www.arm.com免费下载。我还建议获得Hitex's guides to various ARM microcontrollers的副本以获得良好的起点。
有关ARM入门指南的几个Stackoverflow问题。检查它们将为您提供许多好的开始:
答案 1 :(得分:11)
你还应该意识到ARM许可他们的IP而不是生产芯片。被许可方可以通过多种方式配置其ARM核微处理器。最重要的是w.r.t.你的问题是ARM内核本身只定义了两个中断IRQ和FIRQ,最常见的是有一个供应商特定的中断控制器,所以如果你需要知道如何处理中断,你需要确切地知道你的设备中使用了哪些微处理器。 iPAQ型号使用了各种Intel StongARM和XScale处理器。如果您想在该级别进行开发,则应下载特定部分的用户参考手册。
所有这一切,操作系统都提供了中断服务和设备驱动程序,因此您可能不必担心这种低级别的细节。事实上,我会质疑汇编程序的选择是你的开发语言。在ARM上选择汇编程序而不是C或C ++的原因很少(编译器几乎肯定会在代码性能方面表现出色)。此外,在Windows Mobile上,最高效的应用程序级语言可能是C#。