将字节存储到寄存器 x86-64 程序集中的问题

2023-12-08

我正在尝试编写一个函数来确定作为第一个参数给出的字符串的长度,因此 %rdi 将包含 char *ptr。当我打电话时movb (%rdi),%rcx将 %rdi 指向的字符移动到 %rcx 中,出现以下错误:
incorrect register '%rdx' used with 'b' suffix据我了解,在 x86-64 中只有某些寄存器可以保存字节,那么我可以使用哪些寄存器将字节移入?或者我用来提取字符串中每个字节的字符的方法是否不正确?


所有通用寄存器的低 8 位可单独寻址:al, bl, cl, dl, sil, dil, bpl, spl, r8b通过r15b(英特尔文档使用l后缀)。此外,还有一些位 8..15 也可寻址,即ah, bh, ch and dh.

所以如果你只想加载一个字节,你可以使用上面的一种。或者,您可以使用零或符号扩展来加宽字节数据,例如在您的情况下movzbl (%rdi), %ecx (read: 将零扩展字节移至 long)。请注意,对 32 位寄存器进行操作会将“父”64 位寄存器的前 32 位清零,但对 8 或 16 位子寄存器进行操作会使其余位保持不变。

我觉得你应该(重新)阅读英特尔手册的基本架构部分。

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

将字节存储到寄存器 x86-64 程序集中的问题 的相关文章

  • 直接写入 ARM Cortex A8 分支预测器中的全局历史缓冲区 (GHB) 或 BTB?

    我有兴趣直接修改 Cortex A8 上的 BTB 分支目标缓冲区 和 GHB 的内容 ARM 手册上有这样的内容 要在指令端 GHB 数组中写入一项 例如 LDR R0 0x3333AAAA MCR p15 0 R0 c15 c1 0 M
  • /usr/bin/as:无法识别的选项“-EL”

    因此 在为我的1plus手机编译android内核时 经过3天的多次尝试 我放弃了并尝试在这里询问是否有人以前遇到过这个问题 这个错误对我来说有点模糊 但我觉得问题来自于我最近对 GNU Linux 发行版 Gentoo 的更改 它在不应该
  • x86 程序执行期间方向标志 (DF) 的默认状态

    在反汇编中 我经常看到使用字符串操作指令而不考虑方向标志 DF 的状态 如下所示 or ecx 0FFFFFFFFh xor eax eax mov edi ebp repne scasb CLD or STD自函数开始以来未找到指令 也未
  • 将 2 个数字与汇编进行比较[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我有以下代码 我想完成汇编代码 如下
  • GCC 内联 asm NOP 循环在编译时未展开

    走出我通常的 VC 领域 进入 GCC 的世界 通过 MINGW32 尝试创建一个主要由 NOP 组成的 Windows PE ala for i 0 i lt 1000 i asm nop 但要么我使用了错误的语法 要么编译器正在通过它们
  • MIPS 汇编不支持“.set noat”吗?

    目前 我正在学习GNU as 并在 info as 中找到了很多有用的信息 我发现 set noat 在MIPS指定的代码中使用 但是当在 info as 中搜索该指令时 我在节点 alpha指令 中找到了它的解释 但在 MIPS Depe
  • 使用 Intel xHC 执行启用插槽命令后,如何确定 USB 设备连接在哪个根集线器端口上?

    我正在一个使用 UEFI 启动的小型业余爱好操作系统中为英特尔 xHC 编写一个小型驱动程序 重置所有根集线器端口后 我收到 2 个端口状态更改事件 这是因为我要求 QEMU 在命令行中模拟 USB 键盘和 USB 鼠标 每个设备的一个端口
  • C 结构如何返回[重复]

    这个问题在这里已经有答案了 我想知道如何返回一个结构 例如 typedef struct number uint64 t a b c d number number get number number res 0 0 0 0 return
  • X86 汇编将小写字母转换为大写字母

    实现toUpper函数 将字符串中的小写字母转换 为大写 该函数采用一个参数 char string 字符串是一个 char类型指针 指向字符串的开头 因为C 样式字符串以零结尾 我们不需要取长度 字符串作为另一个参数 我需要帮助开始 我不
  • 如何创建一个扩展为“(x+y*240)*2”这样的表达式的 GNU GAS 宏?

    我正在使用 GAS 为 ARM Linux 构建一个程序 但我想做一些宏以使我的开发更加智能 然后我想知道 我怎样才能为此做一个宏 x y 240 2 were x and y are int 将像这样使用 mov r0 MACRO SHO
  • 64 位上的 ASLR 和内存布局:是否仅限于规范部分 (128 TiB)?

    当加载启用 ASLR 的 PIE 可执行文件时 Linux 是否会限制程序段到规范部分 最多 0000 7fff ffff ffff 的映射 还是会使用完整的较低部分 起始位 0 显然 Linux 不会给你的进程提供不可用的地址 这会导致它
  • 汇编:使用数据段寄存器(DS)

    目前我正在学习 x86 汇编 因为我喜欢微控制器编程 所以我熟悉汇编 目前我一直在到处寻找这个问题的答案 但似乎找不到它 DS寄存器 我知道它应该指向我程序中的全局数据 但我不知道知道它到底是如何工作的 我正在使用 NASM 在大多数简单的
  • 两个 16 位数字相乘 - 为什么结果是 32 位长? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如果我将两个 16 位数字相乘 结果将是 32 位长 但为什么会这样呢 对此有何明确解释 为了我的正确理解 其计算方法是 n 位数字乘以
  • 使用 XCHG 解锁的自旋锁

    维基百科提供的使用 x86 XCHG 命令的自旋锁的示例实现是 Intel syntax locked The lock variable 1 locked 0 unlocked dd 0 spin lock mov eax 1 Set t
  • 在LPC2148 ARM处理器上创建中断向量的汇编代码

    我最近刚刚开始使用 LPC2148 ARM 处理器 我试图理解一些有关创建中断向量的汇编代码 这是代码 Runtime Interrupt Vectors Vectors b start reset start ldr pc undf un
  • 段寄存器如何参与内存地址转换?

    到目前为止我所学到的有关细分的知识 虚拟地址包含段选择器和偏移量 段选择器与GDTR配合使用 查找段描述符的线性地址 段描述符保存有关所选段的信息 包括其线性地址 所以 我的问题是 根据我所读到的内容 虚拟地址被加载到段寄存器中 然后以某种
  • _addcarry_u64 和 _addcarryx_u64 与 MSVC 和 ICC

    MSVC 和 ICC 都支持内在函数 addcarry u64 and addcarryx u64 根据英特尔的内在指南 https software intel com sites landingpage IntrinsicsGuide
  • 内存映射图形输出

    我正在探索使用内存映射图形绘制像素和线条 我在 Windows 的 Textpad 中使用 TASM 当我单击 运行 时 整个屏幕变成蓝色 就是这样 没有绘制像素 model small stack data saveMode db xVa
  • 是否有必要每个机器码只能映射到一个汇编代码?

    假设这两者本质上是相同的 push 1 and 0x1231 这表示每个汇编指令都映射到一个机器代码 但是否每个机器码只能映射到一个汇编代码呢 MIPS汇编语言有几个 伪指令 例如 move 在内部只是一个带有隐式 0 操作数的 add
  • 从 64 位 nasm 代码接收 32 位寄存器

    我正在学习 64 位 nasm 我通过执行以下操作来汇编 nasm 文件 该文件仅包含 64 位寄存器 nasm f elf64 HelloWorld nasm o HelloWorld o 并链接它执行以下操作 ld HelloWorld

随机推荐

  • iPhone 亮度私有 API 无法正常工作

    我正在尝试设置背光的亮度 但它的表现非常奇怪 我正在使用私有 API id UIApplication共享应用 setBacklightLevel 1 0f 然而 当我调用此命令时 屏幕变暗 并没有像我想象的那样变得 100 亮 我用各种数
  • 匹配除电子邮件地址之外的所有内容的正则表达式

    假设这是输入 这是一个段落 这是一个段落 这是一个段落 这是一个段落 这是一个段落 这是一个段落 这是一个电子邮件地址 电子邮件受保护 我想要一个匹配除电子邮件地址之外的所有内容的正则表达式 我努力了 这会匹配除电子邮件所在的 LINE 之
  • 是否有缺少固定宽度类型 (intXX_t) 的平台?

    C 11 具有固定宽度 2 的补码类型 u int8 t u int16 t etc 然而 这些类型是可选的 有时我需要使用这些类型 因此我的代码可能不太可移植 有没有什么平台 提供 C 11 编译器 目前 哪些类型不存在 是否有任何 通用
  • Android 长按滚动

    我想将长按与滚动 连接 这样用户就不必释放屏幕并开始滚动 我已经实现了手势检测器 final GestureDetector gestureDetector new GestureDetector new GestureDetector S
  • 未找到 Apple-app-site-association

    我正在尝试通过Apple 搜索验证工具 并且我在使用 apple app site association 时遇到问题 由于某种原因 机器人找不到我的文件 但如果你打开 URL 它就在那里 这不是格式问题 因为甚至找不到该文件 我有 htt
  • 将 JSON 驼峰式大小写转换为蛇形大小写(反之亦然)并将数值字符串化

    我必须向 Web REST 服务发送和接收 JSON 对象 这些对象由 DLL 生成 该 DLL 将属性名称序列化为大驼峰式命名法 PropertyName 而 Web 服务需要蛇形命名法 property name 另外 DLL 将数值序
  • GMaps JS 地理编码:通过异步地理编码功能使用/传递变量?

    我有一个位置对象的数组列表 我正在使用其中一些来构建完整的地址 然后对其进行地理编码 一旦我收到 OK 状态 我就会在地图上放置一个标记 这一切都很好 但是 现在我还想在每个标记上放置一个信息窗口 其中包含数组列表中的另一个属性 Locat
  • iPhone:向滚动视图添加按钮使按钮无法交互

    由于某种原因 在我的 viewController 的 addBook 方法中初始化的按钮不会响应触摸 我分配给它的选择器永远不会触发 点击图像时也不会出现 UIControlStateHighlighted 图像 在触摸到达 UIButt
  • 检查函数是否被作为 goroutine 调用

    有什么办法可以知道正在运行的函数是否被调用为 goroutine 吗 我读过 gotour 并且对使用 golang 构建 websocket 服务器感兴趣 所以我找到了这个教程https tutorialedge net golang g
  • 在 ASP.NET MVC 中以编程方式验证模型列表

    我想以编程方式一一验证模型列表 I tried 尝试验证模型但看起来它聚合了验证错误 因此当我迭代 10 个模型的列表时 如果第 5 个模型无效 则对于模型 6 10 TryValidateModel 返回false 您可以使用控制器方法V
  • 修改编辑距离以实现位置偏差

    我使用 Levenshtein 距离算法将作为用户输入提供的公司名称与已知公司名称的数据库进行比较 以找到最接近的匹配 就其本身而言 该算法工作正常 但我想构建一个偏差 以便如果字符串的初始部分匹配 则编辑距离被认为较低 例如 如果搜索条件
  • Haskell 中的类型比较

    我还在学习 Haskell 的基础知识 我试图找到这个简单问题的答案 所以我提前道歉 因为我确信它很简单 Given data Fruit Fruit Apple Orange deriving Show Eq a Apple 如何检查某个
  • 按百分比设置位置 - Android DisplayMetrics

    我喜欢对应用程序中的所有位置使用百分比 我总是使用相同的系统 我是android编程新手 这是班级 public class SCREEN DisplayMetrics dm new DisplayMetrics Point size ne
  • React/Redux 下载文件

    单击按钮时我需要从服务器下载文件 我创建了一个 MaterialUI 按钮 并在其 onclick 回调上调用容器组件的操作连接的 该操作是异步的 并执行 ajax POST export const onXlsxClick gt disp
  • 如何设置material-ui TextField 仅接受十六进制字符

    我希望我的 TextField 仅接受 0 9 和字母 A F 的值 谢谢
  • 如何更改此代码以允许附加到列表?

    我在这段代码之后附加或实际上打印任何内容时遇到问题 reversedPriv 52 27 13 6 3 2 array 9 var 0 numA for i in array for j in reversedPriv while var
  • 如何使用 awk 或 sed 递归查找/替换字符串?

    如何查找并替换每次出现的情况 subdomainA example com with subdomainB example com 在每个文本文件中 home www 目录树递归 find home www type d name git
  • Xcode 退出时找不到 Parse/Parse.h 文件

    我在我的项目中添加了 Parse SDK 一切都很好 然而 当我退出 Xcode 并打开项目时 我收到以下错误 Parse Parse h file not found 我删除了 Parse Framework 并将其重新添加到我的项目中
  • 使用委托或 lambda 封装秒表计时?

    我正在编写这样的代码 做了一些快速而肮脏的计时 var sw new Stopwatch sw Start for int i 0 i lt 1000 i b DoStuff s sw Stop Console WriteLine sw E
  • 将字节存储到寄存器 x86-64 程序集中的问题

    我正在尝试编写一个函数来确定作为第一个参数给出的字符串的长度 因此 rdi 将包含 char ptr 当我打电话时movb rdi rcx将 rdi 指向的字符移动到 rcx 中 出现以下错误 incorrect register rdx