学习ARM体系结构的编码汇编

时间:2016-05-02 20:27:37

标签: assembly arm cpu-architecture

我是大学的学生,我参加过考试,需要在ARM架构上使用程序集进行编码。基本上它被要求从人类语言翻译成汇编。 因为它是一门非常基础的课程,我必须为每个句子写出正确的指示。例如: 在以下程序中总结两个无符号数字(...)

    1._________ ; store on the previous frame and link register
    2._________ ; new frame

    (....)

我面临的问题是我从未在ARM中编码,而且我不知道在编写程序时从哪里开始。我知道在组装中学习如何正确编码需要很长时间,但我应该从哪里开始? 我在哪里可以找到练习/在线视频课程? (在大学我们在实验室使用三星s3c2440) 我们正在使用arm-elf-insight工具和arm-elf来编译我们创建的程序。

1 个答案:

答案 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对于任何问题有很多正确的解决方案,所以只是因为编译器以一种方式做到这一点并不是唯一的方法。但检查他们正在做什么可以让你前进。