欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

[ARM-assembly]-汇编示例:c语言翻译成汇编

发布时间:2025/3/21 编程问答 34 豆豆
生活随笔 收集整理的这篇文章主要介绍了 [ARM-assembly]-汇编示例:c语言翻译成汇编 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

★★★个人博客导读首页—点击此处 ★★★

示例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; } 数据段中的:"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

由此看来,这是一个递减的栈.
(1)
stp x29, x30, [sp,#-144]! //sp=sp-144后,将x29和x30拷贝到sp中,即:
0到-128是数组变量a,-129到-144是 x29和x30(lr)。 这里其实就是保存x29和x30
(2)
add x0, x29, #0x10 //x29是当前的栈地址(sp),sp+0x10正好就是数组a的地址,这句就是将数组a的地址拷贝到x0中
(3)ldp x29, x30, [sp],#144 从sp处拷贝两个double-world到x29和x30,这里其实就是恢复x29和x30。 拷贝之后,再sp=sp+144

总结

以上是生活随笔为你收集整理的[ARM-assembly]-汇编示例:c语言翻译成汇编的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。