x86/x64 添加位移寻址

2024-01-11

我正在为 x86/x64 CPU 指令编写一个编译器,但我似乎无法弄清楚人们所说的“位移”地址是什么意思。例如,添加指令详细信息如下:http://www.c-jump.com/CIS77/CPU/x86/X77_0150_encoding_add_edx_displacement.htm http://www.c-jump.com/CIS77/CPU/x86/X77_0150_encoding_add_edx_displacement.htm

我只是想实现添加指令,其中将寄存器添加到正常的内存地址。问题是,该地址是一个“位移地址”。这是否意味着该地址是一个有符号值,即距指令位置的偏移量?


x86 中有几种不同形式的间接操作数:

  1. [reg]
  2. [规则+位移]
  3. [移位]
  4. [reg * 常量 + reg]
  5. [reg * 常量 + reg + 位移]

“位移”只是一个添加到地址其余部分的常数。如果地址除了常量之外没有任何组成部分,则仍然称为“位移​​”。这主要是为了与其他寻址形式保持一致。

另一种看待它的方式是所有地址的形式

[reg * 常量 + reg + 位移]

每个组件允许值为 0。

[displacement] 形式只是编码,其中除位移之外的所有分量均为零。

作为编译器编写者,最后两种形式特别有趣。它们使编码变得很容易,例如pArray[index]->field + 1在一条指令中。

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

x86/x64 添加位移寻址 的相关文章

  • 将 C 代码转换为 x86-64 汇编

    我正在尝试将 C 代码转换为 x86 64 我的目标是反转链表 传入的两个参数是 head ptr 和 offset to 以获取指针字段的地址 即指向列表中下一个节点的指针 据我了解 head ptr是通过rdi寄存器传入的 offset
  • 如何在WinMobile6上启用ARMv6非对齐访问?

    ARMv6 引入了一个很棒的功能 未对齐的内存访问 这使得代码中的某些事情变得更加简单和更快 但微软只在winCE6中提供了API 现在大多数 PDA 都基于 WinMobile6 基于 CE 5 x 默认情况下禁用未对齐访问 我尝试在 C
  • 当 mov 指令导致页面错误并且在 x86 上禁用中断时会发生什么?

    我最近在自定义 Linux 内核 2 6 31 5 x86 驱动程序中遇到一个问题 其中 copy to user 会定期不将任何字节复制到用户空间 它将返回传递给它的字节数 表明它没有复制任何内容 经过代码检查 我们发现代码在调用 cop
  • 一个地址有多少字节? [复制]

    这个问题在这里已经有答案了 在64位机器上 我们知道一个地址是8个字节 然而 我并不完全清楚一个地址中有多少字节的信息 虚拟内存中的每个字节都有一个地址吗 或者内存中的每 64 位都有一个地址 还是取决于架构 如果这取决于架构 那么我应该如
  • 从 DX:AX 寄存器转移到单个 32 位寄存器

    我在添加 16 位乘法的乘积时遇到问题 我想将一年 例如 2015 年 乘以 365 为此 我 mov dx 0 to clear the register mov ax cx cx holds the year such as 2015
  • 使用 ACPI 在 MS-DOS 中关闭计算机

    我在基于 Pentium 的计算机上运行 MS DOS 6 22 主板支持 ACPI 并且想知道是否有一个可以用来关闭计算机的汇编语言例程 或者它是否比那个更难 即主板 具体的 基本上 我想创建一个小程序来从命令行关闭计算机 这是专门为此编
  • 嵌入式系统:使用汇编语言时的内存布局

    根据我的理解 嵌入式系统运行机器代码 有多种方法可以生成此代码 一种是用 C 等高级语言编写程序 然后使用编译器获得这样的代码 另一种方法是用汇编语言为该嵌入式系统编写指令 并使用汇编器将其转换为机器代码 现在我们得到了加载到系统并执行的机
  • 将十进制转换为十六进制

    首先 这是家庭作业 我正在尝试将 5 位数字读入寄存器 bx 假定该数字不大于 65535 16 位 以下是我尝试这样做的方法 但是 当我尝试打印该号码时 我仅打印输入的最后一位数字 这让我猜测 当我向 bx 添加另一个数字时 它会覆盖以前
  • 测试 xmm/ymm 寄存器是否为零的更快方法?

    It s fortunate that PTEST does not affect the carry flag but only sets the rather awkward ZF also affects both CF and ZF
  • 如何从程序内部获取指向程序的特定可执行文件部分的指针? (也许是诽谤)

    我在 Linux 环境中 需要编写一个程序来检索放置在其可执行文件的某个部分中的一些数据 那么 如何从程序内部获取指向程序某个部分 通过其名称 的指针呢 我知道可以使用elf getdata 将节的索引作为参数传递给 get 和Elf Da
  • 在现代 x86-64 上计算 64 位整数的整数 Log10 的最快方法是什么?

    标题 我找到了大量 32 位示例 但没有找到完整的 64 位示例 使用这个帖子 https codegolf stackexchange com questions 47290 fastest way to compute order of
  • 为什么 GCC 在堆栈上压入额外的返回地址?

    我目前正在学习汇编的基础知识 在查看 GCC 6 1 1 生成的指令时遇到了一些奇怪的情况 这是来源 include
  • x86:寄存器操作为内存内容和内存地址?

    寄存器 gt 内存地址 gt 内存内容 内存地址 gt 内存内容 上面的模型正确吗 而且 如果是的话 你能建议我是否认为正确吗 movl eax ebx gt 它将 eax 的内存地址移动到 ebx 这也会导致内容移动 movl eax e
  • 微软怎么能说WinAPI中一个字的大小是16位呢?

    我刚刚开始学习WinAPI 在MSDN中 对WORD数据类型提供了以下解释 WORD16 位无符号整数 范围是十进制 0 到 65535 该类型在 WinDef h 中声明如下 typedef 无符号短 WORD 很简单 而且它与我一直在使
  • 如何阅读英特尔操作码符号

    我正在阅读一些引用的材料Intel vol 2 SDM x86 手册 https www intel com content www us en developer articles technical intel sdm html关于汇编
  • 如何使用 cython 编译扩展?

    我正在尝试从示例页面编译一个简单的 cython 扩展here http docs cython org src userguide tutorial html在我安装了 Python 2 6 64 位版本的 Windows 7 64 位计
  • 跳转目的地太远:3 个字节

    我的循环有问题 其中包含的代码很长并且给了我错误jump destination too far by 3 byte s 当我删除时 mov edx offset str1 call writestring 这部分位于主过程下方 它不会给出
  • 使用.NET 访问Windows 注册表?

    我发现一个奇怪的行为 NET http en wikipedia org wiki NET Framework模块访问Windows注册表 http en wikipedia org wiki Windows Registry使用Regis
  • Linux Shellcode“你好,世界!”

    我有以下可用的 NASM 代码 global start section text start mov eax 0x4 mov ebx 0x1 mov ecx message mov edx 0xF int 0x80 mov eax 0x1
  • 对齐与未对齐 x86 SIMD 指令之间的选择

    SIMD指令一般有两种类型 A 使用对齐的内存地址 如果地址未在操作数大小边界上对齐 则会引发一般保护 GP 异常 movaps xmm0 xmmword ptr rax vmovaps ymm0 ymmword ptr rax vmova

随机推荐

  • ODBC 驱动程序之间的差异

    我正在使用 Windows 10 64 位专业版在 SQL Server 2016 中为我的数据库设置系统 DSN 64 位 当我被要求选择驱动程序来设置数据源时 有以下选择 SQL Server 的 ODBC 驱动程序 13 SQL服务器
  • UITableViewRowAction 使用图像而不是标题

    我想做一个cell像邮件应用程序一样滑动操作 I set UIImage to backgroundColor的行动作 action backgroundColor UIColor colorWithPatternImage UIImage
  • 我的 Haskell 表达式何时被求值?

    如果我定义 gt data Bar Bar Int deriving Show gt data Foo Foo Bar deriving Show and gt let foo trace foo Foo trace bar Bar 100
  • 正则表达式如何在幕后工作(在 CPU 级别)?

    解释器和编译器是否以逐个字符和从左到右的方式比较 并最终匹配 两个字符串是否可能匹配 或者是否有一个底层二进制值 例如 位模式 分配给比较函数中的每个字符串 或者它是否取决于以某种方式 ASCII 或 UTF 32 编码的字符串 或者解释器
  • 如何使用张量流将先前时间步的输出与 RNN 中的其他输入一起用作输入?

    在下面的示例中 有三个时间序列 我想预测另一个时间序列y这是三者的函数 如何使用四个输入来预测时间序列 其中第四个输入是上一个时间步的输出 import tensorflow as tf import numpy as np import
  • 如何抓取受 cloudflare 保护的网站

    所以我正在努力刮https craft co tesla https craft co tesla 当我从浏览器访问时 它可以正确打开 但是 当我使用 scrapy 时 它会获取该网站 但是当我查看响应时 view response 它显示
  • 何时使用 Javascript 对象文字

    何时应该在 javascript 中使用对象文字 有时我会感到困惑 因为我试图将 oop 概念和模式应用到该语言中 我尝试不仅仅使用过程编程概念 因为我知道该语言具有惊人的功能 对象字面量最常用作 一种关联数组 和 一种将多个参数传递给函数
  • Angular2获取被点击的元素id

    我有这样的点击事件
  • Firebase 响应太慢

    大家好 我正在使用 Firebase 实时数据库为我的 React js Web 应用程序获取一些数据 有一个useState called Corr User应该存储正确用户名的值 我有一个function从 Firebase 获取用户名
  • 变量值列表的 Tensorflow 特征列

    从 TensorFlow 文档中可以清楚地了解如何使用tf feature column categorical column with vocabulary list创建一个特征列 它将一些字符串作为输入并输出一个单热向量 例如 voca
  • 将对象从 Fragment 传递到 Activity

    问题 如何将对象从片段传递到活动 根据活动的请求 背景 我正在使用 Android Studio 并通过 新建 Android 活动 向导设置了一个新的选项卡式活动 然后我定义了 5 个片段 每个片段包含不同的输入集 编辑文本等 然后 每个
  • 链接到适用于 Android 的工作 webRTC 库

    Google Play 最近几天有一个关于我使用的 WebRTC 库的新错误 警告 我使用这个库将近一年了 google webrtc 1 0 32006 aar 我的应用程序仍然可用 但他们要求更新库 这通常意味着他们将来会阻止使用该库的
  • 如何清除实体框架 ICollection 中的所有元素?

    我在使用 Clear 从实体框架中的集合中删除所有元素时遇到问题 考虑经常使用的博客和帖子示例 public class Blog public int Id get set public string Name get set publi
  • 无法在 asp.net 母版页文件中放置断点

    我有一个 MVC Web 应用程序 我在下面的第 16 行中收到 对象引用未设置为对象实例 错误 这是一个母版页文件 当我尝试在该行或文件中的任何位置放置断点时 出现 这不是断点的有效位置 错误 我已经单击了每一行 但无法放置一个断点 我确
  • StudentSubmissions.Patch UpdateMask 错误

    尝试在 Google Apps 脚本中使用 Classroom API 的 StudentSubmissions Patch 部分并继续运行时遇到此错误 updateMask updateMask 只能包含 draftGrade 或 指定等
  • 如何将 include/lib 目录添加到 MSVC 2015 解决方案中的所有项目?

    我有一个很大的解决方案 在每个项目中添加 更改包含目录非常繁琐 是否可以一步为所有项目设置公共包含文件夹 Thanx 不直观的第一步是在 解决方案资源管理器 窗口中选择多个项目 如有必要 请先折叠项目节点 单击第一个项目 然后按住 Shif
  • svn错误413请求实体太大的原因是什么?

    有时 我在更新 svn 存储库时收到错误 413 请求实体太大 一旦收到此错误 每次我尝试更新本地工作副本时都会继续出现此错误 新的结账方式可以解决问题 但是很不方便 该项目超过 30 GB SVN 存储库托管在外部 过去 这种情况在多台不
  • MySQL 表中的最大列数[重复]

    这个问题在这里已经有答案了 我对 MySQL 还很陌生 我有几个问题 1 有多少 最多 个 可以在 MySQL 表中创建列 2 有多少 最大 数量 可以在 MySQL 数据库中创建许多表 1 每个表大约有 4 096 列 2 mySQL有数
  • 如何在android中显示欢迎屏幕?

    您好 我想要一个带有我的徽标的屏幕 该屏幕应显示 2 3 秒 然后应进入主程序 我怎样才能实现这个 这是一个简单的splashScreen实现 public class SplashScreen extends Activity priva
  • x86/x64 添加位移寻址

    我正在为 x86 x64 CPU 指令编写一个编译器 但我似乎无法弄清楚人们所说的 位移 地址是什么意思 例如 添加指令详细信息如下 http www c jump com CIS77 CPU x86 X77 0150 encoding a