gpt4 book ai didi

ios - 关于 iOS 汇编语言的说明

转载 作者:行者123 更新时间:2023-11-29 02:17:08 26 4
gpt4 key购买 nike

我正在研究如何将 Objective-C 语言映射到 Assembly。我是从 iOS Assembly Tutorial 上的教程开始的.

分析的代码片段如下。

void fooFunction() {
int add = addFunction(12, 34);
printf("add = %i", add);
}

翻译成

 _fooFunction:
@ 1:
push {r7, lr}
@ 2:
movs r0, #12
movs r1, #34
@ 3:
mov r7, sp
@ 4:
bl _addFunction
@ 5:
mov r1, r0
@ 6:
movw r0, :lower16:(L_.str-(LPC1_0+4))
movt r0, :upper16:(L_.str-(LPC1_0+4))
LPC1_0:
add r0, pc
@ 7:
blx _printf
@ 8:
pop {r7, pc}

关于汇编代码,我无法理解以下两点

-> 评论@1

作者说 push 将堆栈递减 8 字节,因为 r7lr 各为 4 字节。好的。但他还说,这两个值是用一条指令存储的。这是什么意思?

-> 评论@6

movw    r0, :lower16:(L_.str-(LPC1_0+4))
movt r0, :upper16:(L_.str-(LPC1_0+4))

作者说 r0 将保存 "add = %i" 的地址(可以在数据段中找到)但我没有真正了解内存布局的样子。为什么他用黑色虚线而不是红色虚线(我画的)来表示差异L_.str-(LPC1_0+4)

enter image description here

如有任何澄清,我们将不胜感激。

编辑

我缺少将 r7 压入堆栈的概念。插入该值(value)意味着什么?它包含什么?

最佳答案

But he also says that the two values are stored with the one instruction. What does it mean?

单个 push 指令会将两个值都放入堆栈。

Why does he represent the difference L_.str-(LPC1_0+4)

因为 add r0, pc 隐含地增加了 4 个字节。引用instruction set reference :

Add an immediate constant to the value from sp or pc, and place the result into a low register.
Syntax: ADD Rd, Rp, #expr
where:
Rd is the destination register. Rd mustbe in the range r0-r7.
Rp is either sp or pc.
expr is an expression that evaluates (at assembly time) to a multiple of 4 in the range 0-1020.

If Rp is the pc, the value used is: (the address of the current instruction + 4) AND &FFFFFFFC.

关于ios - 关于 iOS 汇编语言的说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28633590/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com