Вопрос о соглашении о вызовах Objective C и передаче параметров на ARM

Я хочу знать, как объективные аргументы дескриптора во время выполнения C, когда я называю цель C методом как

[NSString stringWithFomat:@"%@, %@", @"Hello", @"World"]

Существует три аргумента в пользу этой цели C вызов, как это работает по сравнению с типичным путем над системой ARM. Я знал, что регистр r0, r1, r2, r3 будет содержать сначала 4 аргумента, как насчет существуют дополнительные аргументы? Как это помещает их на стек и выталкивает их позже?

7
задан overboming 14 March 2010 в 13:25
поделиться

1 ответ

Для функций, возвращающих простой тип:

r0 = self (NSString)
r1 = _cmd (@selector(stringWithFormat:))
r2 = 1st argument (@"%@, %@")
r3 = 2nd argument (@"Hello")

тогда остальное помещается в стек:

[sp,#0] = 3rd argument (@"World")
[sp,#4] = 4th argument (does not exist in your example)
...

Конечно, «аргумент» здесь означает 4-байтовый объект. Если аргумент имеет> 4 байта, он будет разделен, например

-[UIView initWithFrame:rect];

r0 = self
r1 = _cmd
r2 = rect.origin.x
r3 = rect.origin.y
[sp,#0] = rect.size.width
[sp,#4] = rect.size.height

Возвращаемое значение (до 16 байт) будет помещено в r0, r1, r2, r3.


Для функций, возвращающих структуру: r0 используется для хранения указателя возвращаемого значения.

NSRange retval = [self rangeOfString:string options:options range:range]

r0 = &retval (of type NSRange*)
r1 = self
r2 = _cmd (@selector(rangeOfString:options:range:))
r3 = string
[sp,#0] = options
[sp,#4] = range.location
[sp,#8] = range.length
18
ответ дан 6 December 2019 в 10:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: