草庐IT

Android CPU寄存器名称?

coder 2023-12-01 原文

此代码 fragment 摘自三星 Tab S 上的 Android 崩溃报告:

Build fingerprint: 'samsung/chagallwifixx/chagallwifi:5.0.2/LRX22G/T800XXU1BOCC:user/release-keys'
Revision: '7'
ABI: 'arm'
    r0 a0d840bc  r1 a0dcb880  r2 00000001  r3 a0d840bc
    r4 a0dc3c4c  r5 00000000  r6 a066d200  r7 00000000
    r8 32d68f40  r9 a0c359a8  sl 00000014  fp bef3ba84
    ip a0dc3fb8  sp bef3ba10  lr a0c35a0c  pc a0c34bc8  cpsr 400d0010

r0r9 显然是通用寄存器,sp (r13) 是堆栈指针, pc (r15) 是程序计数器(指令指针)。引用Wikipedia's ARM Architecture page Registers section (我浏览过的 许多 页之一),我发现 lr (r14) 是链接寄存器,而 cpsr 是“当前程序状态寄存器”。

我想知道什么是sl (r10), fp (r11) and ip (r12) 是。我希望 ip 不是“指令指针”,因为该功能是由 pc (r15) 完成的。

有没有我没有找到的引用文档来说明这些名称?

最佳答案

当前ARM EABI procedure call standard概述了 r12-r15 的标准“特殊”名称:

  • PC (r15):程序计数器
  • LR (r14): 链接寄存器
  • SP (r13): 堆栈指针
  • IP (r12):过程内临时寄存器*

GNU 工具还支持来自已弃用 legacy APCS 的名称作为给定寄存器编号的标识符,即使它们不再一定具有任何意义:

  • FP (r11):帧指针 - 对于 ARM 代码可能仍然适用; Thumb 代码倾向于在 r7 中保留实际的帧指针,当然代码可能根本没有帧指针就可以编译,在这种情况下,“fp”只是另一个被调用者保存的通用寄存器。
  • SL (r10):堆栈限制 - 我实际上并不知道它的历史,但在大多数现代代码中,r10 并不比 r4-r8 更特殊。

请注意,r9 不一定是通用寄存器 - EABI 将其保留用于特定于平台的目的。在 linux-gnueabi 下它没什么特别的,但其他平台可能将它用于特殊目的,如 TLS 或全局对象表指针,因此它也可能通过 SB(静态基)或 TR(线程寄存器)。

* PC 相关分支指令的有限范围背后的故事 - 如果链接器发现调用的目标最终超过 32MB,它可能会生成一个单板(一些额外的指令在范围内调用站点)作为分支目标,它计算真实地址并执行绝对分支,为此它可能需要一个临时寄存器。

关于Android CPU寄存器名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33245751/

有关Android CPU寄存器名称?的更多相关文章

  1. ruby - 在 Ruby 中按名称传递函数 - 2

    如何在Ruby中按名称传递函数?(我使用Ruby才几个小时,所以我还在想办法。)nums=[1,2,3,4]#Thisworks,butismoreverbosethanI'dlikenums.eachdo|i|putsiend#InJS,Icouldjustdosomethinglike:#nums.forEach(console.log)#InF#,itwouldbesomethinglike:#List.iternums(printf"%A")#InRuby,IwishIcoulddosomethinglike:nums.eachputs在Ruby中能不能做到类似的简洁?我可以只

  2. ruby-on-rails - 应用程序的名称是否可以作为变量使用? - 2

    当我创建一个Rails应用程序时,控制台:railsnewfoo我的代码可以使用字符串“foo”吗?puts"Yourapp'snameis"+app_name_bar 最佳答案 Rails.application.class将为您提供应用程序的全名(例如YourAppName::Application)。从那里您可以使用Rails.application.class.parent获取模块名称。 关于ruby-on-rails-应用程序的名称是否可以作为变量使用?,我们在StackOve

  3. ruby-on-rails - 如何从过时的 TZInfo 标识符中获取 Rails TimeZone 名称? - 2

    已经有一个问题回答了如何将“America/Los_Angeles”转换为“PacificTime(US&Canada)”。但是我想将“美国/太平洋”和其他过时的时区转换为RailsTimeZone。我无法在图书馆中找到任何可以帮助我完成此任务的东西。 最佳答案 来自RailsActiveSupport::TimeZonedocs:TheversionofTZInfobundledwithActiveSupportonlyincludesthedefinitionsnecessarytosupportthezonesdefinedb

  4. ruby - 解释为局部变量会覆盖方法名称吗? - 2

    如thisquestion,当在其自己的赋值中使用未定义的局部变量时,它的计算结果为nil。x=x#=>nil但是当局部变量的名称与现有的方法名称冲突时,就比较棘手了。为什么下面的最后一个示例返回nil?{}.instance_eval{a=keys}#=>[]{}.instance_eval{keys=self.keys}#=>[]{}.instance_eval{keys=keys}#=>nil 最佳答案 在Ruby中,因为可以在没有显式接收器和括号的情况下调用方法,所以在局部变量引用和无接收器无参数方法调用之间存在语法歧义:f

  5. ruby-on-rails - 如何让 Rails View 返回其关联的操作名称? - 2

    我有一个非常简单的Controller来管理我的Rails应用程序中的静态页面:classPagesController我怎样才能让View模板返回它自己的名字,这样我就可以做这样的事情:#pricing.html.erb#-->"Pricing"感谢您的帮助。 最佳答案 4.3RoutingParametersTheparamshashwillalwayscontainthe:controllerand:actionkeys,butyoushouldusethemethodscontroller_nameandaction_nam

  6. ruby-on-rails - ActiveAdmin 自定义选择过滤器下拉名称 - 2

    对于用户模型,我有一个过滤器来检查用户的预订状态,该状态由整数值(0、1或2)表示。UserActiveAdmin索引页上的过滤器是通过以下代码实现的:filter:booking_status,as::select然而,这会导致下拉选项为0、1或2。当管理员用户从下拉列表中选择它们时,我更愿意自己将它们命名为“未完成”、“待定”和“已确认”之类的名称。有没有办法在不改变booking_status在模型中的表示方式的情况下做到这一点? 最佳答案 假设booking_status是模型中的枚举字段,您可以使用:过滤器:booking

  7. ruby - Ruby 中 <=> 运算符的名称是什么?他们怎么调用它? - 2

    在Ruby中有运算符(operator)。在API中,他们没有命名它的名字,只是:Theclassmustdefinetheoperator...Comparableusestoimplementtheconventionalcomparison......theobjectsinthecollectionmustalsoimplementameaningfuloperator...它叫什么名字? 最佳答案 参见上面的@Tony。然而,它也被称为(俚语)“宇宙飞船运算符(operator)”。

  8. ruby - 将 Logstash 中的时间戳时区转换为输出索引名称 - 2

    在我的场景中,Logstash收到的系统日志行的“时间戳”是UTC,我们在Elasticsearch输出中使用事件“时间戳”:output{elasticsearch{embedded=>falsehost=>localhostport=>9200protocol=>httpcluster=>'elasticsearch'index=>"syslog-%{+YYYY.MM.dd}"}}我的问题是,在UTC午夜,Logstash在外时区(GMT-4=>America/Montreal)结束前将日志发送到不同的索引,并且索引在20小时(晚上8点)之后没有日志,因为“时间戳”是UTC。我们已

  9. Ruby-rspec - 如何打印出测试(组)名称 - 2

    如果我有一些测试,例如require_relative"Line"require_relative"LineParser"describeLinedoit"Canbecreated"doload"spec_helper.rb"@line.class.should==Lineendit"Canbeparsed"do...如何打印出测试组名称-在本例中为“Line”。我尝试添加:before:alldoputs"In#{self.class}"end但这给出了:InRSpec::Core::ExampleGroup::Nested_3,而不是Line 最佳答案

  10. ruby-on-rails - 如何获取调用别名方法的名称? - 2

    我有一个名为link_to_admin的方法然后我给另一个方法取了别名simple_link_todeflink_to_admin(name,url,options={})#Mystuffherelink_to(name,url,options)endalias_method:simple_link_to,:link_to_admin如果我调用link_to_admin,我会遇到一个问题,我想将值打印到标记例如deflink_to_admin(name,url,options={})#Mystuffheremenu=""menu#{link_to(name,url,options)}"

随机推荐