NASM:远程调用,段和偏移量存储在寄存器中

2023-12-03

我已经将代码段和偏移值存储在两个寄存器中,比如说AX and BX分别。在 NASM 中,我如何编码远程调用AX:BX?我试过call AX:BX,但我得到了错误invalid combination of opcode and operands。我如何编码该指令?


没有办法对段和/或偏移量位于寄存器中的远调用指令进行编码。远调用指令要求目标要么作为提供目标的段和偏移量的立即操作数给出,要么作为提供目标的段和偏移量的存储器操作数给出。因此,仅像下面这样的示例指令是有效的:

    call 0x1234:0x5678   ; immediate operand
    call FAR far_func    ; immediate operand
    call FAR [far_fnptr] ; memory operand
    call FAR [bp - 8]    ; memory operand

因此,如果 AX 和 BX 寄存器中有目标段和偏移量,则需要将值存储在内存中的某个位置,然后才能调用寄存器指向的函数。例如,您可以执行以下操作:

    push ax
    push bx
    mov  bp, sp
    call FAR [bp]
    add  sp, 4

过去常常使用 RETF 指令来执行此操作:

    push cs
    push .return_here
    push ax
    push bx
    retf   
.return_here:

然而,在现代 CPU 上,这会带来显着的性能损失,因为它将导致 CPU 的返回堆栈缓冲区生成不正确的分支预测。

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

NASM:远程调用,段和偏移量存储在寄存器中 的相关文章

随机推荐

  • 在一个程序集中序列化,然后在另一个程序集中反序列化?

    我在两个项目中有相同的课程 其中一个项目正在发送runtime到另一个进程 该进程必须反序列化该对象并使用它 假定两个对象相同但程序集名称不同 因此它们实际上被解释为两种不同的类型 根据我的研究 我提出了那些由于以下原因而不起作用的解决方案
  • 响应通知后按下后退按钮返回上一屏幕

    我正在使用类似的代码创建一个简单的通知创建并显示来自网络调用的通知 问题是 我希望响应通知的活动完成其业务 然后单击后退按钮 将先前活动的活动放回前台 并保持其后堆栈完好无损 这与之前的活动活动是我的应用程序还是其他人的应用程序的一部分无关
  • 从java以编程方式执行spark-submit

    我试图通过以下方式执行它 Process process Runtime getRuntime exec spark cmd 没有运气 通过 shell 运行的命令启动了我的应用程序 该应用程序成功了 通过 exec 运行它会启动一个进程
  • 如何在 Skyfield 中添加 JulianDate 对象或偏移

    The JulianDate对象在Skyfield是一种快速生成并保存一组儒略日时间值并将其传递给 Skyfield 的简便方法at 计算各种坐标中天文位置的方法 参见示例脚本 但是 我似乎找不到add or offset方法 以便我可以将
  • 如何删除/更新bigquery中的嵌套数据

    有没有办法删除 更新bigquery中的嵌套字段 假设我有这个数据 wives age wives name name 21 angel adam 20 kale 21 victoria rossi 20 jessica 或者在 json
  • 如何删除所有包含某个子字符串的PHP数组元素? [复制]

    这个问题在这里已经有答案了 好吧 我查了一些函数 但我似乎没有幸运地找到任何函数 我想过滤一个数组以删除包含某些字符串的特定数组 这是一个例子 array 1 gt January 2 gt February 3 gt March to r
  • jQuery document.createElement 等效吗?

    我正在重构一些旧的 JavaScript 代码 并且正在进行大量 DOM 操作 var d document var odv d createElement div odv style display none this OuterDiv
  • 从以 http 运行的网站使用 https 访问 CDN

    我正在开发一个网站 该网站将采用http 我试图包含来自 google cdn 的 jquery 给出的答案here says 使用协议相关的 URL 可让您轻松避免混合内容 安全错误 from 谷歌CDN 它被视为 我们建议您通过 HTT
  • 什么是指向数组数据开头的 Python 缓冲区对象?

    A np arange 12 B A reshape 3 4 A 0 42 print B print A print np may share memory A B print A data B data 运行上面的代码 令我惊讶的是pr
  • Cordova 网络 isOnline 仅在 WiFi 上返回 true

    以下仅当我有 WiFi 时才注销 在 4g 或任何移动互联网类型上则不然 看起来不太靠谱 有什么更好的检测在线 离线状态的想法吗 rootScope on cordovaNetwork online function event netwo
  • 尝试将 XInclude 与 Java 结合使用并使用 xml:id 解析片段

    我一直在尝试让 XInclude 在我的 XML 文档中工作 最后让它在 Oxygen XML 中工作 我用 Oxygen XML 来编写 XML 文档 然后我转到我的应用程序 用 Java 编写 但它似乎不支持任何形式的 XPointer
  • 将 pandas 中的列表拆分为列

    我有一个像这样的数据框 df pd DataFrame ID ID1 ID2 ID3 Values AB BC np NaN AB CD df ID Values 0 ID1 AB BC 1 ID2 NaN 2 ID3 AB CD 我想将列
  • MssqlHook气流连接

    我是使用气流的新手 我需要做的是使用 MssqlHook 但我不知道如何使用 我应该在构造函数中给出哪些元素 我在气流中有一个名为connection test的连接 我不完全理解类中的属性 class MsSqlHook DbApiHoo
  • 计算多个数据集的日、月和年平均值

    我有一个数据框 MS NR SS NR DATE HOUR VALUE 1 13095010 68 1 01 2014 0 00 00 9 8 2 13095010 68 1 01 2014 1 00 00 8 0 3 13095010 6
  • css3背景大小:覆盖在调整大小时留下空白

    body margin 0 padding 0 position relative background url images imgs backgrnd png no repeat background size cover The ba
  • 用逗号分割字符串但忽略双引号内的逗号?

    我有一些如下所示的输入 A B C D12121 E F G H I9 I8 J K 逗号分隔的值可以按任何顺序 我想用逗号分隔字符串 但是 如果双引号内有某些内容 我需要它忽略逗号并删除引号 所以基本上 输出将是这个字符串列表 A B C
  • tkinter:将多个按钮 lambda 映射到一个标签?

    描述 我希望能够单击一个按钮并将其值发送到标签小部件 lab 1 我知道要执行一个按钮 您必须使用command lambda lab 1 configure text 0 但是当我使用了一个标签时 你会如何将值打印到标签上for循环在嵌入
  • 如何在iOS中的prepareForSegue之前执行按钮按下动作?

    我正在创建一个 iOS 应用程序 在运行方法prepareForSegue 之前 我想在按下按钮时执行分配操作 我使用主要故事板创建了所有控件 某些按钮的执行顺序是 按钮按下动作 gt prepareForSegue 但对于某些按钮来说是
  • Asp.net cookieless sessionId url 位置

    我正在开发一个移动网站 我们不能依靠手机访问该网站来获得 cookie 支持 我正在对会话使用 cookieless 选项 想知道是否有办法指定 sessionId 在 URL 中的放置位置 现在看起来是这样的 http www somes
  • NASM:远程调用,段和偏移量存储在寄存器中

    我已经将代码段和偏移值存储在两个寄存器中 比如说AX and BX分别 在 NASM 中 我如何编码远程调用AX BX 我试过call AX BX 但我得到了错误invalid combination of opcode and opera