【问题标题】:Understanding 8086 assembler debugger了解 8086 汇编调试器
【发布时间】:2019-04-26 21:46:11
【问题描述】:

我正在学习汇编程序,我需要一些帮助来理解调试器中的代码,尤其是标记部分。

mov     ax, a
mov     bx, 4

我知道上述指令是如何工作的,但在调试器中我有“2EA10301”和“BB0400”。

它们是什么意思?
第一条指令将变量 a 从数据段移动到 ax 寄存器,但在调试器中我有 cs:[0103]

这些括号和这些数字是什么意思?

感谢您的帮助。

【问题讨论】:

  • 首先,我相信那是“2EA10301”,它是十六进制的。

标签: debugging assembly x86-16


【解决方案1】:

2EA10301BB0400 数字是突出显示的两条指令的 opcodes

2ECode Segment (CS) prefix 并指示 CPU 使用 CS 段而不是默认的 DS 段来访问内存。
A1MOV AX, moffs16 的操作码,0301little endian 中的直接 0103h,要读取的地址。
所以2EA10301mov ax, cs:[103h]
方括号是表示memory access through one the addressing mode 的首选方式,但一些汇编程序支持不带方括号的令人困惑的语法。
由于这种语法在不同的汇编程序中比其他的不明确且标准化程度较低,因此不鼓励使用。

在汇编期间,汇编器会为每个发出的字节保持一个位置计数器递增(每个“节”/段都有自己的计数器,即计数器在每个“节”的开头重置)。
这为每个变量提供了一个偏移量,用于访问它并制作指令,变量名称供人类使用,CPU 只能从地址、数字中读取。

文件加载后,此偏移量将在稍后存储在内存中。
汇编器、链接器和加载器合作,there are various tricks at play,以确保最终指令在内存中正确形成,并将偏移量转换为正确的地址。
在您的示例中,他们的努力最终得到了值 103h,即内存中 a 的地址。
同样,在您的示例中,如果文件是 COM(顺便说一下,不要将变量放入执行流程中),由于 COM 文件的特殊结构,偏移量仍为 103h。
但总的来说,它可能是另一个数字。

BBMOV r16, imm16 与寄存器BX。基本形式是B8,低 3 位表示要使用的寄存器,BX 用值 3(二进制的 011b)表示,实际上是 0B8h + 3 = 0BBh。
在操作码之后,又是 WORD 立即数 0400,它以小端序对 4 进行编码。


您现在可以意识到,汇编源代码并不总是提供完整的信息,因为汇编器实现了某种形式的语法糖。
指令mov ax, a,其语法与mov bx, 4 相同,技术上是将a 地址给出的立即 值移动到@ 987654349@,而是被解释为a内容(内存中存在且只能通过内存访问读取的值)移动到ax因为a 已知是一个变量。

这种现象在 x86 中是有限的,为 CISC,而在 RISC 世界中更为普遍,其中缺少常用的指令由 pseudo-instructions 来弥补。

【讨论】:

    【解决方案2】:

    首先,汇编程序是 x86 汇编程序。汇编器是将指令转换为机器代码的东西。

    当你反汇编程序时,它可能会使用十六进制值(如 90 是 NOP 指令或 B8 将某些东西移动到 AX)。

    方括号复制寄存器指向的内存地址。 旁边的十六进制称为地址。

    【讨论】:

      【解决方案3】:

      一切都很简单。命令 mov ax, cx: [0103] 表示将 000Ah 的值加载到寄存器 ax 中。该值取自 0103h 处的代码段。您可以在图片中看到此值略高。 CX:0101 0B900A00。因此,地址0101h为0Bh,0102h为90h,0103h为0Ah,0104h为00h。事实证明,AL 寄存器从地址 0103h 加载的值等于 0Ah。事实证明,AH 寄存器从地址 0104h 加载值等于 00h,结果 ax = 000Ah。如果不是 ax 命令 cx: [0103] 而是 ax 命令 cx: [0101],则 ax = 900Bh 或 ax 命令 cx: [0102],则 ax = 0A90h。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-01-04
        • 2014-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多