iOS汇编基础(二)寄存器

本文深入探讨了iOS汇编中的寄存器,包括通用寄存器、pc寄存器、bl指令、数据地址寄存器、浮点和向量寄存器、特殊寄存器以及CPSR状态寄存器的功能。通过Xcode调试工具,我们可以查看和理解这些寄存器在程序执行过程中的作用,进一步理解函数的本质,如栈的运作和内存读写。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以arm64为例

 xcode调试汇编

1. xcode 查看运行时的汇编代码
debug -> debug workflow -> always show disassembly
2. Xcode改变pc值
register write pc 0x1005d6928

3. 单步运行一步汇编代码:ni
4. 读取某个寄存器
(lldb) register read x0
      x0 = 0x0000000000000000
(lldb) 

5. 进入某个汇编函数
按住control+Xcode的下箭头键
6. 新建汇编文件或内嵌汇编代码
新建:command+N 然后选择assembly file
内嵌:
int main(int argc, char * argv[]) {
    asm(
        "mov w0,#0x0\n"
        "adds w0,w0,#0x1\n"
        );
    return 0;
}

一 通用寄存器

  • ARM64拥有有31个64位的通用寄存器 x0 到 x30,这些寄存器通常用来存放一般性的数据,称为通用寄存器(有时也有特定用途)
  • 那么w0 到 w28 这些是32位的. 因为64位CPU可以兼容32位.所以可以只使用64位寄存器的低32位.
  • 比如 w0 就是 x0的低32位!
Xcode查看寄存器:

  • 通常,CPU会先将内存中的数据存储到通用寄存器中,然后再对通用寄存器中的数据进行运算。
  • 假设内存中有块红色内存空间的值是3,现在想把它的值加1,并将结果存储到蓝色内存空间

   CPU首先会将红色内存空间的值放到X0寄存器中:mov X0,红色内存空间
  然后让X0寄存器与1相加:add X0,1
  最后将值赋值给内存空间:mov 蓝
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值