我是大学的学生,我参加过考试,需要在ARM架构上使用程序集进行编码。基本上它被要求从人类语言翻译成汇编。 因为它是一门非常基础的课程,我必须为每个句子写出正确的指示。例如: 在以下程序中总结两个无符号数字(...)
1._________ ; store on the previous frame and link register
2._________ ; new frame
(....)
我面临的问题是我从未在ARM中编码,而且我不知道在编写程序时从哪里开始。我知道在组装中学习如何正确编码需要很长时间,但我应该从哪里开始? 我在哪里可以找到练习/在线视频课程? (在大学我们在实验室使用三星s3c2440) 我们正在使用arm-elf-insight工具和arm-elf来编译我们创建的程序。
答案 0 :(得分:0)
so.c
unsigned int fun ( unsigned int a, unsigned int b )
{
return(a+b);
}
工具链很容易获得。
arm-none-eabi-gcc -c -O2 so.c -o so.o
arm-none-eabi-objdump -D so.o
Disassembly of section .text:
00000000 <fun>:
0: e0800001 add r0, r0, r1
4: e12fff1e bx lr
或没有优化
arm-none-eabi-gcc -c so.c -o so.o
arm-none-eabi-objdump -D so.o
so.o: file format elf32-littlearm
Disassembly of section .text:
00000000 <fun>:
0: e52db004 push {fp} ; (str fp, [sp, #-4]!)
4: e28db000 add fp, sp, #0
8: e24dd00c sub sp, sp, #12
c: e50b0008 str r0, [fp, #-8]
10: e50b100c str r1, [fp, #-12]
14: e51b2008 ldr r2, [fp, #-8]
18: e51b300c ldr r3, [fp, #-12]
1c: e0823003 add r3, r2, r3
20: e1a00003 mov r0, r3
24: e24bd000 sub sp, fp, #0
28: e49db004 pop {fp} ; (ldr fp, [sp], #4)
2c: e12fff1e bx lr
没有硬件,您可以通过查看编译器的工作原理来了解它。也理解esp in asm对于任何问题有很多正确的解决方案,所以只是因为编译器以一种方式做到这一点并不是唯一的方法。但检查他们正在做什么可以让你前进。