我有索尼爱立信ARC S.我想用ARM汇编语言为它编写程序。我熟悉MIPS架构和一点X86。
帮助我开始编写一个简单的程序,并向我展示我需要执行此操作的程序,模拟器或其他内容。
答案 0 :(得分: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,它将带您指导购买代码源代码的图形。寻找ARM的LITE版本,gnueabi版本没问题,linux版本也很好,你只需要汇编器和链接器或编译器,汇编器和链接器。
emdebian曾经有过工具链,有一段时间没试过。人们仍然使用ygarto,如果在Windows上使用winarm。如果mips是你知道的唯一的asm,那么arm在某些方面会更简单。 Mips有点不标准,大多数处理器使用带有进位标志,负标志,零标志,有符号溢出标志(CNZV)的程序状态字,并使用正常指令,add,sub等设置这些标志然后分支他们。使用mips你没有状态标志,而是指定说两个寄存器并且如果相等则表示分支,如果相等分支则执行减法。减法的其他处理器要么是减法,要么是做减法的比较,但不保存除标志以外的结果。 ARM的加载和存储具有不同的语法,而不是sw $ 4,0x10($ 5),你可以使用str r4,[r5,#0x10]括号表示间接级别,#前面是常量。武器即时通常为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不是唯一具有分支延迟槽的处理器,但出于实际目的,假设没有其他处理器具有延迟槽,因此不要试图在分支之后放置指令并期望它们执行,也不是在分支等之后需要nops。
gdb的arm臂模拟器是从arm开源的,我不知道如何访问它。 qemu有很多手臂支撑,但很少有可见性。我有缩略图,它只是拇指(与32位mips指令集相比,非常类似于16位mips指令集的arm指令集的缩小版本)但是会让你感觉到手臂的变化,模拟器易于阅读,你可以随意修改,以了解正在发生的事情,观察内存总线,寄存器等.skyeye有许多处理器模拟器,vba和nintendo ds模拟器包含arm处理器模拟器。此外还有无数低于50美元和一些低于20美元的微控制器板,其中包含臂式处理器。
答案 1 :(得分:0)
可以使用与其他处理器相同的工具,例如Eclipse,GNU,Visual Studio,Clang等。只需要一次安装和下载 ARM 而不是 86 强>
除非有一个Arm工作站,否则你将使用你的x86盒并交叉编译/组装到 ARM 因此需要一些方法将编译后的代码放到 ARM < / strong>机器。调试通常通过串口远程完成到您的工作站,因此可以使用符号表。