x86_64 汇编器中 RBP 寄存器的用途是什么?

2023-11-21

我正在尝试学习一点汇编,因为我需要它来参加计算机体系结构课程。我写了一些程序,比如打印斐波那契数列。

我认识到,每当我编写一个函数时,我都会使用这三行(正如我通过比较由gcc to its C相等的):

pushq   %rbp
movq    %rsp, %rbp
subq    $16, %rsp
  1. 首先,为什么我需要使用%rbp?使用起来是不是更简单%rsp,因为它的内容被移动到%rbp在第二行?
  2. 为什么我必须从中减去任何东西%rsp?我的意思是这并不总是16, 当我是printf像 7 或 8 个变量,然后我会减去24 or 28.

我在虚拟机(4 GB RAM)、Intel 64 位处理器上使用 Manjaro 64 位。


rbp是 x86_64 上的帧指针。在生成的代码中,它获取堆栈指针的快照(rsp),这样当进行调整时rsp(即为局部变量保留空间或pushing值到堆栈上),局部变量和函数参数仍然可以从常量偏移访问rbp.

许多编译器提供帧指针省略作为优化选项;这将使生成的汇编代码访问相对于rsp相反并释放rbp作为在函数中使用的另一个通用寄存器。

对于 GCC,我猜您正在使用 AT&T 汇编器语法,该开关是-fomit-frame-pointer。尝试使用该开关编译您的代码,看看您得到什么汇编代码。您可能会注意到,当访问相对于rsp代替rbp,在整个函数中,距指针的偏移量是变化的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

x86_64 汇编器中 RBP 寄存器的用途是什么? 的相关文章

  • MEX 文件中的断言导致 Matlab 崩溃

    我正在使用mxAssert 宏定义为matrix h在我的 C 代码中 mex 可以完美编译 当我调用的 mex 代码中违反断言时 该断言不会导致我的程序崩溃 而是导致 Matlab 本身崩溃 我错过了什么吗 这是有意的行为吗 当我查看 M
  • 处理 fanart.tv Web 服务响应 JSON 和 C#

    我正在尝试使用 fanart tv Webservice API 但有几个问题 我正在使用 Json Net Newtonsoft Json 并通过其他 Web 服务将 JSON 响应直接反序列化为 C 对象 这里的问题是元素名称正在更改
  • Linux TUN/TAP:无法从 TAP 设备读回数据

    问题是关于如何正确配置想要使用 Tun Tap 模块的 Linux 主机 My Goal 利用现有的路由软件 以下为APP1和APP2 但拦截并修改其发送和接收的所有消息 由Mediator完成 我的场景 Ubuntu 10 04 Mach
  • ASP .NET MVC,创建类似路由配置的永久链接

    我需要帮助在 MVC 网站中创建类似 URL 路由的永久链接 Slug 已设置为 www xyz com profile slug 代码为 routes MapRoute name Profile url profile slug defa
  • 获取从属性构造函数内部应用到哪个属性的成员?

    我有一个自定义属性 在自定义属性的构造函数内 我想将属性的属性值设置为属性所应用到的属性的类型 是否有某种方式可以访问该属性所应用到的成员从我的属性类内部 可以从 NET 4 5 using CallerMemberName Somethi
  • 为什么密码错误会导致“填充无效且无法删除”?

    我需要一些简单的字符串加密 所以我编写了以下代码 有很多 灵感 来自here http www codeproject com KB security DotNetCrypto aspx create and initialize a cr
  • 在 C# 中将位从 ulong 复制到 long

    所以看来 NET 性能计数器类型 http msdn microsoft com en us library system diagnostics performancecounter aspx有一个恼人的问题 它暴露了long对于计数器
  • 转到 C# WPF 中的第一页

    我正在 WPF 中使用导航服务 为了导航到页面 我使用 this NavigationService Navigate new MyPage 为了返回我使用 this NavigationService GoBack 但是如何在不使用的情况
  • 范围和临时初始化列表

    我试图将我认为是纯右值的内容传递到范围适配器闭包对象中 除非我将名称绑定到初始值设定项列表并使其成为左值 否则它不会编译 这里发生了什么 include
  • C# 创建数组的数组

    我正在尝试创建一个将使用重复数据的数组数组 如下所示 int list1 new int 4 1 2 3 4 int list2 new int 4 5 6 7 8 int list3 new int 4 1 3 2 1 int list4
  • “MyClass”的类型初始值设定项引发异常

    以下是我的Windows服务代码 当我调试代码时 我收到错误 异常 CSMessageUtility CSDetails 的类型初始值设定项引发异常 using System using System Collections Generic
  • std::bind 重载解析

    下面的代码工作正常 include
  • UWP 无法在两个应用程序之间创建本地主机连接

    我正在尝试在两个 UWP 应用程序之间设置 TCP 连接 当服务器和客户端在同一个应用程序中运行时 它可以正常工作 但是 当我将服务器部分移动到一个应用程序并将客户端部分移动到另一个应用程序时 ConnectAsync 会引发异常 服务器未
  • 通过等待任务或访问其 Exception 属性都没有观察到任务的异常

    这些是我的任务 我应该如何修改它们以防止出现此错误 我检查了其他类似的线程 但我正在使用等待并继续 那么这个错误是怎么发生的呢 通过等待任务或访问其 Exception 属性都没有观察到任务的异常 结果 未观察到的异常被终结器线程重新抛出
  • 从匿名类型获取值

    我有一个方法如下 public void MyMethod object obj implement 我这样称呼它 MyMethod new myparam waoww 那么我该如何实施MyMethod 获取 myparam 值 Edit
  • 我应该在应用程序退出之前运行 Dispose 吗?

    我应该在应用程序退出之前运行 Dispose 吗 例如 我创建了许多对象 其中一些对象具有事件订阅 var myObject new MyClass myObject OnEvent OnEventHandle 例如 在我的工作中 我应该使
  • 过度使用委托对性能来说是一个坏主意吗? [复制]

    这个问题在这里已经有答案了 考虑以下代码 if IsDebuggingEnabled instance Log GetDetailedDebugInfo GetDetailedDebugInfo 可能是一个昂贵的方法 因此我们只想在调试模式
  • 以编程方式使用自定义元素创建网格

    我正在尝试以编程方式创建一个网格 并将自定义控件作为子项附加到网格中 作为 2x2 矩阵中的第 0 行第 0 列 为了让事情变得更棘手 我使用了 MVVM 设计模式 下面是一些代码可以帮助大家理解这个想法 应用程序 xaml cs base
  • 如何确定母版页中正在显示哪个子页?

    我正在母版页上编写代码 我需要知道正在显示哪个子 内容 页面 我怎样才能以编程方式做到这一点 我用这个 string pageName this ContentPlaceHolder1 Page GetType FullName 它以 AS
  • 如何使用 std::array 模拟 C 数组初始化“int arr[] = { e1, e2, e3, ... }”行为?

    注意 这个问题是关于不必指定元素数量并且仍然允许直接初始化嵌套类型 这个问题 https stackoverflow com questions 6111565 now that we have stdarray what uses are

随机推荐

  • 带有 SWT.Browser 和 XULRunner 的 RCP

    我正在使用 SWT Browser 开发 RCP 应用程序 Windows SWT MOZILLA Browser browser new Browser parent SWT MOZILLA 它与旧的 XULRunner 3 6 23 和
  • 如何在CSS中按百分比定义不透明度?

    是否可以在 CSS 中按百分比 例如 30 定义 CSS 的不透明度 似乎不起作用 现在我只能按小数点进行 https css tricks com almanac properties o opacity test opacity 0 3
  • 对 std::basic_string 的未定义引用

    我正在编译我的项目并看到链接问题 g Wl z now Wl z relro pthread Wl z noexecstack fPIC Wl threads Wl thread count 4 B third party gold L W
  • log4net - FileAppender 在文件开头写入新条目

    是否可以在 log4net 中配置 FileAppender 以在日志文件的开头添加新条目 目前 它正在末尾添加条目 并且读取最新条目需要向下滚动整个日志 从头开始读会更舒服 我不知道该选项在 log4net 中是否可用 我不这么认为 但即
  • 为什么WPF中TextBox边框颜色坚持不改变?

    据我了解 我应该使用样式触发器来更新文本框聚焦时的边框颜色 然而 无论我做什么 它总是变成系统默认的蓝色 而不是我指定的黑色 有人有主意吗 代码如下
  • Objective-C/Cocoa:如何接受错误的服务器证书?

    Using NSURL请求 我正在尝试访问证书已过期的网站 当我发送请求时 我的连接 didFailWithError使用以下信息调用委托方法 1203 NSURLErrorDomain bad server certificate 我的搜
  • Ruby 'Range.last' 不会给出最后一个值。为什么?

    在 ruby Range 对象中使用三点表示法时 我得到以下结果 0 5 each n p n 0 1 2 3 4 当我使用 最后 方法时 我得到 0 5 last gt 5 我本来期望 4 这是一个错误吗 或者我对 Range 对象的概念
  • 未找到 MSBuild 目标包

    我想打包我的 VS2010 Web 应用程序项目 准备使用 msdeploy 进行部署 在开发机器上我可以使用以下方法来做到这一点 MSBuild exe C path to WebApp csproj target package 但在我
  • WPF 可以在没有 DirectX 的情况下运行吗?

    这听起来可能是一个愚蠢的问题 但是 如果没有支持 DirectX Direct3D 的显卡 驱动程序 WPF 是否会停止运行 或者只是运行速度变慢 我知道 WPF 基于 DirectX Direct3D 即使是简单的控件 但我找不到有关该主
  • d3js 很好地过渡了带有添加点的线

    说我有一个path我创建了d3就像是 line d3 line curve d3 curveLinear x function d return x d x y function d return y d y data x 0 y 0 x
  • Next.js 设置背景图片

    我正在尝试向 next js 添加背景图像 但无法这样做 我尝试过很多解决方案 内联 scc 样式 jsx 和其他技术 无法直接写入样式 因为它会出错 Error Expected a template literal or String
  • javascript循环冻结浏览器并且在循环之前看不到变化

    我有一个简单的 javascript 循环 如下所示 function runCode sample span removeAttr style for var i 0 i lt 100000 i console log new Date
  • 检查日期是否在指定日期之后?

    我正在尝试对日期进行验证 该日期应该只接受当前和未来的日期 如果日期是较旧的日期 那么它应该显示 该日期早于当前日期 我也想允许当前日期 现在 当将当前日期指定为 gievnDate 时 它 总是显示 该日期早于当前日期 但我期望输出为 日
  • 这是 iOS 8 Bug(旋转方向问题)吗?

    自 iOS 8 以来 我的应用程序运行得很好 但我在测试该应用程序时发现了一个问题 仅当我以横向模式启动应用程序时 才会在 iPad 上发生这种情况 如果它以纵向启动 则一切正常 没有旋转问题 如果我旋转设备 模拟器或真实设备 视图将旋转出
  • 如何用StAX修改一个巨大的XML文件?

    我有一个巨大的 XML 2GB 我需要添加新元素并修改旧元素 例如 我有
  • 网站上文件的上次修改日期

    有没有办法获取网站上文件的上次修改日期 即 这是我在那里的一个示例文件 http www ymcadetroit org atf cf 7B2101903E A11A 4532 A64D 9D823368A605 7D Birmingham
  • 如何限制 Eval 中的文本字符串

    我有一个超链接 其导航属性设置如下 NavigateUrl 如何将字符串限制为 140 个字符 我已经尝试过这个 Eval My Text ToString Substring 0 140 但如果字符串长度小于 140 个字符 则会引发异常
  • 访问 SimpleXMLElement 对象的某些属性

    When I print r 变量引用的 SimpleXMLElement 对象 xmlObject 我看到以下结构 SimpleXMLElement Object attributes gt Array uri gt example re
  • golang 区分 T 和 *T 上的方法集的原因是什么?

    这是我学习go过程中最困惑的地方 我们都知道方法T只影响副本T 以及方法 T会影响实际数据T 为什么方法上T也可以使用 T 但不允许相反的情况 那么 你能给我一个例子 或原因 说明为什么他们不允许方法 T被使用T 这种设计的优点和缺点是什么
  • x86_64 汇编器中 RBP 寄存器的用途是什么?

    我正在尝试学习一点汇编 因为我需要它来参加计算机体系结构课程 我写了一些程序 比如打印斐波那契数列 我认识到 每当我编写一个函数时 我都会使用这三行 正如我通过比较由gcc to its C相等的 pushq rbp movq rsp rb