3.Arm机器码

本文详细介绍了ARM处理器中的机器码结构,通过反汇编代码展示了如何理解机器码。以`mov`指令为例,解析了其机器码格式。同时,文章讲解了伪指令的概念和分类,包括定义类伪指令如`Global`、`Data`、`Equ`等,以及操作类伪指令如`Ldr`、`Nop`。通过实例展示了伪指令在编译过程中的转换,并提供了反汇编和数据对齐的示例。
摘要由CSDN通过智能技术生成

3.Arm机器码

首先汇编程序转化为机器码,才能在机器内运行。

首先我们对上面的裸机的代码中生的.elf文件进行反汇编:

start.elf: file format elf32-littlearm

 

Disassembly of section .text:

 

50008000 <_start>:

.text

.global _start

_start:

    @ldr和str的操作

    mov r0,#0xff

50008000:    e3a000ff     mov    r0, #255    ; 0xff

    str r0,[r1]

50008004:    e5810000     str    r0, [r1]

    ldr r2,[r1]

50008008:    e5912000     ldr    r2, [r1]

    @程序状态字寄存器访问

    mrs r0,cpsr

5000800c:    e10f0000     mrs    r0, CPSR

    orr r0,#0b100

50008010:    e3800004     orr    r0, r0, #4    ; 0x4

    msr cpsr,r0

50008014:    e129f000     msr    CPSR_fc, r0

    @ror:循环右移

    mov r1,#0b11

50008018:    e3a01003     mov    r1, #3    ; 0x3

    mov r1,r1,ror#1

5000801c:    e1a010e1     ror    r1, r1, #1

    @lsl:左移

    mov r1,#0b11

50008020:    e3a01003     mov    r1, #3    ; 0x3

    mov r1,r1,lsl#2

50008024:    e1a01101     lsl    r1, r1, #2

    @bl指令:带链接跳转

    bl func1

50008028:    eb000005     bl    50008044 <func1>

    @b指令:

    mov r1,#6

5000802c:    e3a01006     mov    r1, #6    ; 0x6

    mov r2,#7

50008030:    e3a02007     mov    r2, #7    ; 0x7

    cmp r1,r2

50008034:    e1510002     cmp    r1, r2

    bgt branch1@gt表示大于的时候跳转

50008038:    ca000003     bgt    5000804c <branch1>

    add r3,r1,r2

5000803c:    e0813002     add    r3, r1, r2

    b end

50008040:    ea000002     b    50008050 <end>

 

50008044 <func1>:

func1:

    mov r1,#23

50008044:    e3a01017     mov    r1, #23    ; 0x17

    mov pc,lr@函数的返回,固定格式。

50008048:    e1a0f00e     mov    pc, lr

 

5000804c <branch1>:

 

branch1:

    sub r3,r1,r2

5000804c:    e0413002     sub    r3, r1, r2

 

50008050 <end>:

end:

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值