0

我有一个索尼爱立信 ARC S。我想用 ARM 汇编语言为它编写一个程序。我熟悉 MIPS 架构和一点 X86。

帮助我开始编写一个简单的程序,并向我展示我需要哪些程序、模拟器或其他东西来执行此操作。

4

2 回答 2

1

那里有许多基于 gnu 的交叉编译器,构建自己的非常容易,特别是如果你只想要汇编语言,你只需要构建 binutils。

wget ftp://ftp.gnu.org/gnu/binutils/binutils-2.22.tar.gz
tar xzvf binutils-2.22.tar.gz 
cd binutils-2.22
../configure --target=arm-none-eabi --prefix=/pick/a/path --disable-werror --disable-nls
make
sudo make install

你需要选择一个你想安装的地方我自己喜欢/gnuarm。可以尝试 /opt/gnuarm 或任何你喜欢的。

如果您不想尝试,请访问 codesourcery.com,它将带您指导购买了 code sourcery 的图形。寻找ARM的LITE版本,gnueabi版本很好,linux版本也很好,你只需要汇编器和链接器或编译器,汇编器和链接器。

emdebian以前有一个工具链,好久没试过了。如果在 Windows 上,人们仍然使用 ygarto 和 winarm。

如果 mips 是您知道的唯一 asm,那么 arm 在某些方面会更简单。Mips 有点不标准,大多数处理器使用带有进位标志、负标志、零标志、有符号溢出标志 (CNZV) 的程序状态字,您可以使用普通指令、加法、减法等设置这些标志,然后分支他们。使用 mips,您没有状态标志,而是指定说两个寄存器并说如果相等则分支,如果相等则执行减法分支。其他处理器的减法要么通过减法完成,要么通过进行减法但不保存除标志以外的结果的比较来完成。ARM 的加载和存储有不同的语法,而不是 sw $4,0x10($5) 你会有 str r4,[r5,#0x10] 括号表示间接级别,# 前面是一个常量。Arms 立即数通常是 8 或 9 位,而在 mips 上立即数是 16 位。使用 arm,您可以在一条指令中存储多个寄存器 stm r0,{r1,r2,r3,r4} 将 r1 存储在 r0 的地址,r2 存储在 r0+0x04 的地址,r3 存储在 r0+0x08 的地址,依此类推在。这通常用于将事物“推入”和“弹出”堆栈。使用 arm 您可以修改存储或加载上的基址寄存器,例如 ldr r1,[r0],#4 括号外的立即数意味着将 r1 存储在 r0 中的地址然后将 4 添加到 r0 使您不必拥有一个附加添加 r0,r0,#4 指令。Mips 不是唯一具有分支延迟槽的处理器,但出于实际目的假设它是,假设没有其他处理器具有延迟槽,因此不要试图将指令放在分支之后并期望它们执行,

gdb 有从 arm 开源的 armulator 模拟器,我不知道如何访问它。qemu 有很多手臂支撑,但能见度很低。我有 thumbulator,它只是拇指(arm 指令集的简化版本,与 32 位 mips 指令集相比,非常类似于 16 位 mips 指令集),但会给你改变 arm 的感觉,模拟器易于阅读,您可以随意修改以了解正在发生的事情,观察内存总线、寄存器等。skyeye 有许多处理器模拟器、vba 和 nintendo ds 模拟器包含 arm 处理器模拟器。加上无数低于 50 美元和一些低于 20 美元的微控制器板,其中包含 arm 处理器。

于 2012-05-16T21:29:04.607 回答
0

一个人会使用与其他处理器相同的工具,即 Eclipse、GNU、Visual Studio、Clang 等。只有一个人必须进行第二次安装和下载ARM而不是x86

除非你有一个 Arm 工作站,否则你将在你的 x86 机器上工作并交叉编译/组装到ARM因此需要一些方法将编译后的代码放到ARM机器上。调试通常通过串行到您的工作站远程完成,因此可以使用符号表。

于 2012-05-16T19:13:20.223 回答