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: