[ARM-assembly]-汇编示例:c语言翻译成汇编
生活随笔
收集整理的這篇文章主要介紹了
[ARM-assembly]-汇编示例:c语言翻译成汇编
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
★★★個(gè)人博客導(dǎo)讀首頁(yè)—點(diǎn)擊此處 ★★★
示例1:
int func_test(uint32_t a, uint32_t b, uint32_t *s) {*s = a + b;return 0; }00000000002047a0 <func_test>:2047a0: 0b010000 add w0, w0, w12047a4: b9000040 str w0, [x2]2047a8: 52800000 mov w0, #0x0 // #02047ac: d65f03c0 ret示例2
int func_memcpy(void *a, void *b, uint32_t len) {memcpy(a,b,len);return 0; }int func_test(uint32_t integer1, uint32_t integer2, uint32_t *p_integer) {char a[128];*p_integer = integer1 + integer2;func_memcpy(a,"testtesttesttesttesttest",*p_integer);return 0; } 數(shù)據(jù)段中的:"testtesttesttesttesttest"215430: 6f697372 7325206e 6574000a 65747473 rsion %s..testte215440: 65747473 65747473 65747473 65747473 sttesttesttestte215450: 76007473 69737265 25206e6f 64252c64 st.version %d,%d00000000002047a0 <func_test>:2047a0: a9b77bfd stp x29, x30, [sp,#-144]!2047a4: 0b010000 add w0, w0, w12047a8: b0000081 adrp x1, 215000 <build_message+0x2a0>2047ac: 910003fd mov x29, sp2047b0: b9000040 str w0, [x2]2047b4: 9110e821 add x1, x1, #0x43a2047b8: 2a0003e2 mov w2, w02047bc: 910043a0 add x0, x29, #0x102047c0: 94003d7d bl 213db4 <memcpy>2047c4: 52800000 mov w0, #0x0 // #02047c8: a8c97bfd ldp x29, x30, [sp],#1442047cc: d65f03c0 ret由此看來(lái),這是一個(gè)遞減的棧.
(1)
stp x29, x30, [sp,#-144]! //sp=sp-144后,將x29和x30拷貝到sp中,即:
0到-128是數(shù)組變量a,-129到-144是 x29和x30(lr)。 這里其實(shí)就是保存x29和x30
(2)
add x0, x29, #0x10 //x29是當(dāng)前的棧地址(sp),sp+0x10正好就是數(shù)組a的地址,這句就是將數(shù)組a的地址拷貝到x0中
(3)ldp x29, x30, [sp],#144 從sp處拷貝兩個(gè)double-world到x29和x30,這里其實(shí)就是恢復(fù)x29和x30。 拷貝之后,再sp=sp+144
總結(jié)
以上是生活随笔為你收集整理的[ARM-assembly]-汇编示例:c语言翻译成汇编的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: [ARM-assembly]-ARM A
- 下一篇: 一图弄懂ARM中都有什么