基礎匯編指令
start:
mov sp, #4096
bl c main
halt
b 8
mov ip, sp
stmdb sp!, {fp,ip,lr,pc}
sub fp, ip ,#4; 0x4
sub sp, sp, #8 0x8
mov r3,#1442840576 0x56000000
add r3, r3, #80; 0x50
str r3, [fp,#-16
mov r3, #1442840576 0x56000000
add r3, r3, #84 ; 0x54
str r3, [fp, #-20]
ldr r2, [fp, #-16]
mov r3, #256
str r3, [r2]
ldr r2, [fp,#-20]
mov r3, #0
str r3, [r2]
mov r3, #0
mov r0, r3
sub sp, fp, #12
ldmia sp,{fp,sp,pc}
解析:
stmdb sp!,{fp,ip,lr,pc}
db含義:decrement before 先減,後存。
sp‘ = sp -4 = 4092,如果布加感嘆號,sp為原值,並不會被減。
高編號寄存器存在高地址,4092到4095存放PC的值,sp‘ = sp - 4 = 4088.
4088到4091存放lr寄存器的值
4084到4087存放ip的值
4080到4083存放fp的值。
stmdb最常用
ldmia sp, {fp,sp,pc}
先讀4080到4083的值 = 原來的fp的值 低地址對應低編號。
基礎匯編指令