为什么 mov %ax, %ds 汇编+反汇编为 mov %eax,%ds,与原来不一致?

2024-05-26

test.S

.text
.global _start
    _start:
        xor %ax, %ax
        mov %ax, %ds
        mov %ax, %ss
        mov %ax, %es
        mov %ax, %fs
        mov %ax, %gs

我通过这样做得到了反汇编代码文件

$ x86_64-elf-gcc -g -c -O0 -m32 -fno-pie -fno-stack-protector -fno-asynchronous-unwind-tables .\test.S
$ x86_64-elf-ld .\test.o -m elf_i386  -Ttext=0x7c00 -o test.elf
$ x86_64-elf-objdump -x -d -S -m i386 ./test.elf > test_dis.txt

测试_dis.txt


./test.elf:     file format elf32-i386
./test.elf
architecture: i386, flags 0x00000112:
EXEC_P, HAS_SYMS, D_PAGED
start address 0x00007c00

Program Header:
    LOAD off    0x00000000 vaddr 0x00007000 paddr 0x00007000 align 2**12
         filesz 0x00000c0d memsz 0x00000c0d flags r-x

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         0000000d  00007c00  00007c00  00000c00  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .debug_aranges 00000020  00000000  00000000  00000c10  2**3
                  CONTENTS, READONLY, DEBUGGING
  2 .debug_info   00000049  00000000  00000000  00000c30  2**0
                  CONTENTS, READONLY, DEBUGGING
  3 .debug_abbrev 00000014  00000000  00000000  00000c79  2**0
                  CONTENTS, READONLY, DEBUGGING
  4 .debug_line   0000003b  00000000  00000000  00000c8d  2**0
                  CONTENTS, READONLY, DEBUGGING
SYMBOL TABLE:
00007c00 l    d  .text  00000000 .text
00000000 l    d  .debug_aranges 00000000 .debug_aranges
00000000 l    d  .debug_info    00000000 .debug_info
00000000 l    d  .debug_abbrev  00000000 .debug_abbrev
00000000 l    d  .debug_line    00000000 .debug_line
00007c00 g       .text  00000000 _start
00008c0d g       .text  00000000 __bss_start
00008c0d g       .text  00000000 _edata
00008c10 g       .text  00000000 _end



Disassembly of section .text:

00007c00 <_start>:
.text
.global _start
    _start:
        xor %ax, %ax
    7c00:   66 31 c0                xor    %ax,%ax
        mov %ax, %ds
    7c03:   8e d8                   mov    %eax,%ds
        mov %ax, %ss
    7c05:   8e d0                   mov    %eax,%ss
        mov %ax, %es
    7c07:   8e c0                   mov    %eax,%es
        mov %ax, %fs
    7c09:   8e e0                   mov    %eax,%fs
    7c0b:   8e e8                   mov    %eax,%gs



我的问题

我想知道为什么我得到这样的代码mov %eax,%ds,这不适合我原来的汇编代码?为什么 objdump 输出矛盾的结果

我的期望

我预计mov %eax,%ds应该mov %ax,%ds,而且我不认为%eax(32位)适合%ds(16 位)


说明mov %eax, %ds and mov %ax, %ds做完全相同的事情(你可以说它们实际上是相同的指令),除了前者由于缺少而具有更短的编码66前缀字节。汇编器会为您选择较短的编码,而反汇编器则通过不同的寄存器大小人为地区分两者。

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

为什么 mov %ax, %ds 汇编+反汇编为 mov %eax,%ds,与原来不一致? 的相关文章

随机推荐

  • Angular2 - Keyup 需要澄清

    在我的应用程序中 我有条件地添加一个类 当用户输入某些内容时 我正在检查该值 并相应地添加类名称 效果很好 但它只更新一组 keyup 0 设置一些值keyup 这不像angular 1 here 所以有人解释一下为什么我们要设置 keyu
  • 如何在 pygame 中水平翻转图像?

    这是在 pygame 如何翻转图像 假设一个图像 猪向右看 时向左看 我按向左箭头键 然后保持这样 即使我不按任何键或者按向上和向下箭头键 那么 当我按向右箭头键时 如何再次将其切换回向右看 并使其保持这种状态 即使我不按任何键或按向上和向
  • 如何将excel文件(XLSX)导入mongoDB [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有一组数据作为输入以 XLSX 格式提供给 MongoDB 我该如何将 Excel 文件作为输入导入
  • 如何创建具有动态数量的网格列的 TailwindCSS 网格?

    我正在使用 Vue3 和 TailwindCSS 并希望创建一个具有动态的网格grid cols n 班级 我知道 TailwindCSS 默认情况下最多支持 12 列 但我无法自定义主题 因为列的数量完全是动态的 给出以下纯 HTML J
  • NSExceptionDomains xcode 8 不工作

    我正在使用 UIWebView 来显示电子邮件订阅注册页面 它不是 https 页面 所以我显然需要破例 我不想将其设置为 NSAllowsArbitraryLoads 因为它只是整个应用程序中的一页 应用程序可能会被拒绝 所以我在 inf
  • 如何读取COM端口? navigator.serial.getPorts 返回空列表

    我连接了少量 USB 串行接口 一个 HF 收发器 基于 Arduino 的 CW 键控器 和两个蓝牙端口 我从未使用过它们 并且不确定它们来自哪里 可能是某些应用程序 在我的 SPA 中 我需要阅读端口列表 以便能够选择连接哪个端口作为哪
  • 是否有可能改变整个恐慌消息?

    NUnit 是一个 C 单元测试框架 允许您编写如下代码 Assert That someInt Is EqualTo 42 Assert That someList Has Member someMember 我喜欢这种代码 因为它看起来
  • 如何在不同位置显示验证错误消息?

    我在用knockout js knockout validation插件 我正在添加示例小提琴 http jsfiddle net hsnCW 1 http jsfiddle net hsnCW 1 在此示例中 对数组进行了自定义验证以检查
  • 纹理映射 C++ OpenGL

    我已经阅读了相关内容 包括 Nehe 和此处的解决方案 但我找不到具体的答案 我正在尝试加载一张名为stars jpg 的照片 我想通过使用 uv 坐标映射它来使其成为场景的背景 方法是 glBegin GL QUADS glTexCoor
  • .NET 4.0 代码可以与 .NET 2.0 代码互操作吗?

    NET 4 0 程序集调用 NET 2 0 程序集中的代码是否存在兼容性障碍 反之亦然 更具体地说 我正在研究在使用基于 NET 2 0 的第三方应用程序时升级到 Visual Studio 2010 该应用程序可通过引用我的自定义代码的挂
  • React hooks 需要返回值吗?

    我最近开始在我的 React 应用程序中构建自定义挂钩 并一直在关注 React 网站上的文档 然而 我正在构建的钩子不需要返回值 因为它们在初始化时为 Redux 设置数据 Example custom hook export const
  • 如何在生成的 HTML 页面中隐藏 JavaScript 注释? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 有没有办法隐藏生成的页面源中的 JS
  • 如何使用 purrr::pmap 在nested.data.frame中绘制多个ggplot

    我对 purrr pmap 在nested data frame中制作多个ggplot图有一些疑问 我可以使用 purrr map2 毫无问题地运行下面的代码 并且可以在nested data frame中制作多重图 2个图 作为示例 我在
  • 如何使用 ffmpeg 设置默认流

    我有一些 m4v 文件 我想用 ffmpeg 添加字幕 我知道我需要映射流以将它们放入输出文件中 但如何确保此字幕流将是默认流 字幕是 srt 人们似乎说它们与 mp4 容器不兼容 我需要先将字幕转换为什么 另外 各种流的顺序重要吗 视频流
  • MigraDoc 项目符号列表(漏洞)

    在我的解决方案中 我在 PDF 文件中使用项目符号列表 它看起来像这样 Solcellepaneler kr ver hverken autoriseret service eller tidskr vende vedligehold So
  • 你将如何在 Haskell 中(重新)实现迭代?

    iterate a gt a gt a gt a 你可能知道 iterate是一个接受函数和起始值的函数 然后它将函数应用于起始值 然后将相同的函数应用于最后的结果 依此类推 Prelude gt take 5 iterate 2 2 2
  • 在 MatDialog Content Angular 7 中添加新行

    我正在使用 MatDialog 并尝试在内容定义中添加新行 两个都 n and 没有这样做 有没有另一种方法无需手动进入 html 并更改它 因为它是可重用的组件 var status MatDialogRef
  • Mac 上的 iOS 7 模拟器无法使用自定义位置(也不请求许可)

    我正在尝试制作一个使用设备当前位置的 iOS7 应用程序 我在 Mac 上使用 iPhone 模拟器 但遇到了一些问题 每次出现位置管理器所在的视图时 即使在我设置了自定义位置 从模拟器 gt 调试 gt 位置 之后 它也会打印出纬度和经度
  • 使用 'vendored_frameworks' 和 'source_files' 对于 cocoapod 使用 'use_frameworks!'

    我正在构建一个 cocoapod 它基本上包含一个框架 私有源 和一个依赖于该框架的视图 开源 所有这些都是用 Objective C 制作的 在 podspec 中我有以下几行 spec vendored frameworks MyPod
  • 为什么 mov %ax, %ds 汇编+反汇编为 mov %eax,%ds,与原来不一致?

    test S text global start start xor ax ax mov ax ds mov ax ss mov ax es mov ax fs mov ax gs 我通过这样做得到了反汇编代码文件 x86 64 elf g