内联汇编中的内存偏移

2024-04-22

在 A64 汇编器中,有不同的方法来指定地址。

/*
[base{,#0}]                 Simple register (exclusive) - Immediate Offset
[base{,#imm}]               Offset - Immediate Offset
[base,Xm{,LSL #imm}]        Offset - Register Offset
[base,Wm,(S|U)XTW {#imm}]   Offset - Extended Register Offset
[base,#imm]!                Pre-indexed - Immediate Offset
[base],#imm                 Post-indexed - Immediate Offset
label                       PC-relative (literal) load - Immediate Offset
*/

我想在内联汇编器中使用“偏移 - 立即偏移”。

__asm__("ldp x8, x9, %0, 16 \n\t"
        :
        : "m" (*somePointer)
        : "x8", "x9");

这被翻译成

ldp x8, x9, [x0], 16

我的目标是达到

ldp x8, x9, [x0, 16]

如何使用内联汇编器编写此类指令?


我没有 ARM 64 位工具链来测试这个,但你应该能够执行如下操作:

asm("ldp x8, x9, %0\n\t"
    :
    : "Ump" (*((__int128 *) somePointer + 1))
    : "x8", "x9");

The Ump约束将内存操作数限制为整数 LDP 指令允许的操作数,否则它的工作方式类似于m约束。如果somePointer已经是一个指向 128 位类型的指针,您可以直接使用somePointer[1]作为操作数。

如果上述方法不起作用,那么 David Wohlferd 的建议应该是:

asm("ldp x8, x9, [%0, %1]" 
    : 
    : "r" (somePointer), "i"(16), "m" (*somePointer) 
    : "x8", "x9"); 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

内联汇编中的内存偏移 的相关文章

  • 我想优化这个短循环

    我想优化这个简单的循环 unsigned int i while j 0 j is an unsigned int with a start value of about N 36 000 000 float sub 0 i 1 unsig
  • WritePrivateProfileString 未在末尾添加属性

    我正在使用以下命令在 ini 文件中写入一些属性WritePrivateProfileString函数并且一切正常 但是当我添加多行文本时 出现了问题 这是代码和输出 WritePrivateProfileString T General
  • 在 C/C++ 中读取和写入二进制文件的中间部分

    如果我有一个大的二进制文件 假设它有 100 000 000 个浮点数 C 或 C 有没有办法打开文件并读取特定的浮点数 而不必将整个文件加载到内存中 即我如何快速找出第 62 821 214 个浮点是什么 第二个问题 有没有办法更改文件中
  • 改变 RGB 颜色的色调

    我正在尝试编写一个函数来改变 RGB 颜色的色调 具体来说 我在 iOS 应用程序中使用它 但数学是通用的 下图显示了 R G 和 B 值如何随色调变化 看起来 编写一个函数来改变色调似乎应该是一个相对简单的事情 而不需要对不同的颜色格式进
  • IssuerSigningKeyResolver 调用异步方法

    我们使用 IssuerSigningKeyResolver 它是 Microsoft IdentityModel Tokens 的一部分 用于令牌验证并接受非异步委托 我们调用一个异步方法 这将导致阻塞调用 因此想知道使用它的正确方法是什么
  • 如何从头开始重复C程序并清理屏幕和第一个输入值?

    我是编程新手 我写了一个简单的程序 我想一次又一次地重复该程序 并且只有当用户想要退出时它才能退出 这是我的程序 include
  • 我是否必须使用我的数据库训练 Viola-Jones 算法才能获得准确的结果?

    我尝试提取面部数据库的面部特征 但我认识到 Viola Jones 算法在两种情况下效果不佳 当我尝试单独检测眼睛时 当我尝试检测嘴巴时 运作不佳 检测图像的不同部分 例如眼睛或嘴巴 或者有时会检测到其中几个 这是不可能的情况 我使用的图像
  • c++1y 模式下的 Clang >= 3.3 无法解析 标头

    我有一个项目可以在 g 4 8 1 和 c 11 模式下 clang gt 3 3 下正确编译和运行 然而 当我切换到实验时 std c 1y模式下 clang 3 3 但不是 g 在
  • 单击按钮本地化应用程序

    我在我的项目 mainMaster 页面中找到了 imageButtons
  • WinForms TreeView - 如何手动“突出显示”节点(就像被单击一样)

    我需要知道如何让以编程方式选择的节点以图形方式处于 选定 状态 就像用户单击它一样 SelectedNode 仅使这一节点在内部被选中 非常感谢 它没有显示为突出显示的原因是由于树视图没有焦点 这是我的测试表单上的按钮单击事件 TreeVi
  • 是否可以在三元表达式上只放置一个选项?

    我只是好奇这是否可能 或者是否有办法使它成为 C 的有效语法 expression value do nothing here or put some empty block like SomeClass SomeMethod Edit 为
  • 如何检测机器是否加入域?

    如何检测计算机是否已加入 Active Directory 域 相对于工作组模式 如果没有必要的话 不要用 pinvoke 来愚弄 参考System DirectoryServices 然后调用 System DirectoryServic
  • 如何在 MSBuild NuGet 包生成的 .nuspec 中注入自定义依赖项

    我正在尝试迁移到使用 MSBuildPack支持使用 csproj 生成项目 NuGet 包 其中在开发过程中使用本地 dll 来构建项目 但在使用 MSBuild 打包 项目时需要替换 交换它们以引用生成的 nuspec 中的外部 NuG
  • STL(标准模板库)中使用的设计模式

    我正在学习STL和设计模式 我想知道是否有任何文档或链接可以解释如何在 STL 中实现设计模式 我做了谷歌但无法获得太多数据 我希望你的意思是 哪些设计模式可以在STL中识别 STL 堆栈是一个容器适配器 适配器是一种设计模式 迭代器也是一
  • 在 C 或 C++ 中使用逗号作为宏名称

    我想做这样的事情 define define MAX 10 000 000 undef 有什么技巧可以做到吗 编辑 我知道 C 14 中的数字分隔符 我正在寻找一种技巧来对不兼容的编译器执行相同的操作 EDIT2 请考虑Variadic M
  • C memcpy 二维数组

    我正在尝试使用将一个二维数组复制到另一个memcpy 我的代码 include
  • 将 KeyUp 作为参数传递 WPF 命令绑定文本框

    我有一个文本框 KeyUp 事件触发器连接到 WPF 中的命令 我需要将按下的实际键作为命令参数传递 该命令执行得很好 但处理它的代码需要知道按下的实际键 记住这可能是一个回车键或不仅仅是一个字母的任何键 所以我无法从 TextBox te
  • 为什么 `boost::any` 比 `void*` 更好?

    有什么先天优势boost any and boost any cast提供超过使用void and dynamic cast 优点是boost any比类型安全得多void E g int i 5 void p i static cast
  • 同时重新排序和旋转图像的高效方法

    为了快速加载 jpeg 我为turbojpeg 实现了一个 mex wrapper 以有效地将 大 jpeg 读入 MATLAB 对于 4000x3000px 的图像 实际解码只需要大约 120 毫秒 而不是 5 毫秒 然而 像素顺序是 R
  • win32 内容已更改,但除非移动窗口,否则不会显示更新

    我的 win32 GUI 内容每秒都会更改 但除非手动移动窗口 否则不会显示更新 我尝试每秒弹出一个消息框来触发窗口刷新 它成功了 因此 这证明我的内容确实发生了变化 但窗口没有更新 我希望刷新窗口而不是每次都弹出消息框 有没有这样的窗口功

随机推荐

  • 如何通过node.js中的@azure/storage-blob获取blob存储中文件的安全url?

    我正在使用 azure storage blob 我可以上传文件 但如何检索它 有什么想法如何获取存储的 SAS url 我需要生成几分钟后过期的 url 并且 url 是基于令牌的 因为容器不供公共访问 请在 node js 中提供帮助或
  • 将元数据设置为 mp4

    我在以下的帮助下对视频进行编码MediaCodec and MediaMuxer 结果我有 mp4 视频文件 如何为此 mp4 文件设置元数据 创建时间 媒体元数据检索器 http developer android com intl ru
  • 如何配置@typescript-eslint规则

    我正在尝试转换为 typescript eslint但文档似乎非常缺乏 例如 我收到这样的错误 Line 58 Expected a semicolon typescript eslint member delimiter style 我想
  • 显示默认展开的 Android 通知操作按钮

    有没有办法在默认展开的通知中显示操作按钮 我使用持续通知来控制应用程序中的训练过程 我希望在通知区域中出现通知后立即显示 停止 和 暂停 等控制按钮 您无法展开通知 唯一的解决方案是 设置 优先级最大 然后将其展开到通知列表的顶部 这也取决
  • 在shinyapp中包含来自网络的图像的LaTeX PDF

    我曾经能够将来自 URL 的图像包含在由闪亮的应用程序生成的 PDF 报告中 url com 几个 markdown 版本之后我收到以下错误 Unable to load picture or PDF file https i0 wp co
  • 通过函数向 with() 传递参数

    有一种方法可以将参数从函数传递给with 就像是 dados lt data frame x 1 10 v1 rnorm 10 v2 rnorm 10 with dados v1 v2 Works func lt function data
  • 使用相同的 Symfony 2 表单进行编辑和删除(字段差异)

    目前我有一个表格 class Project extends AbstractType public function buildForm FormBuilder builder array options builder gt add n
  • 在 os x 上编译 libuv 的库?

    我正在尝试学习一些 libuv 似乎有一本很棒的书介绍了它 然而 这本书并没有解释如何实际编译它 我对从 github 中提取的代码运行 make 并按照 github 上的描述使用 GYP 进行编译 https github com jo
  • Hive - 通过聚合跨组的值来创建映射列类型

    我有一个看起来像这样的表 customer category room date 1 A aa d1 1 A bb d2 1 B cc d3 1 C aa d1 1 C bb d2 2 A aa d3 2 A bb d4 2 C bb d4
  • 按键列合并两个 data.frames

    我有两个数据框 在第一个中 我有一个 KEY ID 列和两个变量 KEY V1 V2 1 10 2 2 20 4 3 30 6 4 40 8 5 50 10 在第二个数据框中 我有一个 KEY ID 列和第三个变量 KEY V3 1 5 2
  • 以编程方式调用多部分表单方法

    我的 WebApi 有以下方法 HttpPost Route foo bar Consumes multipart form data DisableRequestSizeLimit public async Task
  • CakePHP ajax 帖子不断返回 400 Bad Request

    我正在尝试使用 ajax post 来执行操作 GET 请求工作正常 但当我尝试 POST 时 我在 firebug 中看到 400 Bad Request 并且视图返回 黑洞 响应 这是 Jquery 请求 ajax url usermg
  • 如何将 Kivy 的一个财产绑定到另一个财产?

    我想将小部件的属性绑定到子小部件的属性 因此 当根小部件属性更改时 更改也会传播到子属性 我这样尝试过 self Child MyProperty self MyProperty 这有时有效 但有时它不起作用 我无法找出它何时起作用 为什么
  • MediaPlayer.prepare() 在 Android L 上抛出 IllegalStateException

    我有从 asset 目录播放 mp3 文件的代码 MediaPlayer mediaPlayer new MediaPlayer descriptor context getAssets openFd beep mp3 mediaPlaye
  • 将字符串转换为 UTF-8

    例如 我有一个分配给编码为 ansi 的变量的字符串str 如何将其编码为 UTF 8 你的意思是当它写入文件时 像这样 Set stream CreateObject ADODB Stream stream Open stream Typ
  • Pylint 找不到 SQLAlchemy 查询成员

    我有一个使用 Flask SQLAlchemy v2 0 的 Flask v0 10 1 应用程序 我正在尝试配置 Pylint 来检查它 使用 Python 3 4 2 运行 第一个错误是 Instance of SQLAlchemy h
  • Unix域SOCK_DGRAM和SOCK_SEQPACKET之间的区别?

    根据 Unix 套接字的 Linux 手册页 UNIX 域中的有效套接字类型是 SOCK DGRAM 对于保留消息边界的面向数据报的套接字 与大多数 UNIX 实现一样 UNIX 域数据报套接字始终可靠且不可靠 不重新排序数据报 以及 自
  • 发送 HTTP 标头后,服务器无法附加标头

    我在我的 ASP NET C Web 应用程序中间歇性地收到此异常 发送 HTTP 标头后 服务器无法附加标头 这是由于应用程序在发送页面后将内容附加到页面响应标头而引起的 我不确定为什么它是间歇性的 但我需要做的是在修改标题之前执行检查
  • 从另一个类调用 RecyclerView.Adapter 上的 notificationItemChanged()

    我有一个RecyclerView in AdapterActivity 单击其任何项目后 我使用我的更新该项目AlertDialogShow UpdateStudent 方法 我的问题是无法刷新Adapter在 的里面UpdateStude
  • 内联汇编中的内存偏移

    在 A64 汇编器中 有不同的方法来指定地址 base 0 Simple register exclusive Immediate Offset base imm Offset Immediate Offset base Xm LSL im