gpt4 book ai didi

assembly - 学习 x86 指令集的最简单/最佳方式?

转载 作者:行者123 更新时间:2023-12-03 17:50:06 25 4
gpt4 key购买 nike

就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the help center为指导。




9年前关闭。




我想学习 x86 指令集架构。我的意思不是学习 x86 的程序集。我想了解机器码宝贝。

原因是我想为 x86 编写一个汇编程序。然后我想编写一个编译器来编译该程序集。

我知道有Intel manuals以及涵盖 x86 指令集的 AMD 手册。但那些是非常大和密集的。

我想知道是否有更平易近人(可能是教程)的方法来学习 x86 指令集架构。

最佳答案

好吧,我不同意你的看法。 x86 的复杂性被误解并因此被夸大了。我并不是说它不复杂。确实如此,但只有在想要编写一个完整的编译器或汇编器时才会出现这种情况。如果你只是想学习汇编。没那么复杂。

让我们分解 x86-64 架构来证明我的观点。

寄存器:

x86-64 指定了几个寄存器。具体有多少?让我们一一列举

  • 16 个通用寄存器(RAX、RBX、RCX、RDX、RSI、RDI、RBP、RSP + R8、R9、R10、R11、R12、R13、R14、R15)
  • 6 段寄存器(CS、DS、SS、ES、FS、GS)
  • 64 位 RFlags 和 64 位 RIP
  • 8 个 80 位浮点 (x87) 寄存器 (FPR0-FPR7) 别名为 64 位 MMX 寄存器 (MM0-MM7)
  • 16 个 128 位扩展媒体寄存器 (XMM0-XMM7 + XMM8-XMM16)
  • 一些特殊/杂项寄存器,例如控制寄存器(CR0 到 4)、调试寄存器(DR0 到 3,加上 6 和 7)、测试寄存器(TR4 到 7)、描述符寄存器(GDTR、LDTR、IDTR)和任务寄存器(TR) 我们几乎不需要关心。

  • alt text http://www.viva64.com/content/articles/64-bit-development/amd64_em64t/01-big.png

    寻址模式:

    如何引用任何内存位置?

    来源: http://en.wikipedia.org/wiki/X86#Addressing_modes

    32 位或 64 位 x86 处理器上 32 位地址大小的寻址模式可以通过以下公式总结:

    alt text

    64 位 x86 处理器上 64 位代码的寻址模式可以用以下公式总结:

    alt text



    RIP + [位移]

    操作模式:

    这些是它可以运行的模式:
  • 实模式
  • 保护模式
  • 虚拟 8086 模式
  • 长模


  • 指令集:

    你听到人们说它是一个大指令集。嗯,大约有 500-600 条指令。但其中一些是相同的指令,变化很小,如 CMPS/CMPSB/CMPSW/CMPSD/CMPSQ。如果您像这样将它们分组,那么这个数字可以归结为 400 条指令。

    你觉得它很大吗?然后我有几个问题。 C 标准库有多少个函数? POSIX 库有多少个函数? .NET 和 Java 怎么样?他们有多少类和方法?我们是否必须知道所有的函数/方法/类?我们采用什么方法来学习这些库?

    只需从每个人身上学到一些东西。大致通过所有这些。感受他们的存在,并在需要时使用引用。

    我们可以从逻辑上将这些指令分为以下几类:
  • 通用说明
  • 基本数据操作(移动和复制)
  • 控制转移(跳转、调用、中断)
  • 算术和逻辑指令(加、减、和、异或等)
  • 面向字符串和位的指令
  • 系统调用
  • 系统说明
  • x87 浮点指令
  • 64 位媒体 (MMX) 说明
  • 128 位媒体 (SSE) 说明


  • 就是这样!!这就是你需要知道的全部。现在坦白告诉我。有那么复杂吗?

    随便找一本关于 x86 架构的汇编语言好书就行了。我个人建议“ Assembly Language Programming in GNU/Linux for IA32 Architectures”,作者是 Rajat Moona,因为它简短而中肯。不会浪费你太多时间。但它不包括 X86-64。

    熟悉 IA32 for x86-64 后阅读 http://csapp.cs.cmu.edu/public/1e/public/docs/asm64-handout.pdf

    关于assembly - 学习 x86 指令集的最简单/最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2470739/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com