【问题标题】:Turbo assembler cs section explainTurbo 汇编器 cs 部分解释
【发布时间】:2013-02-13 15:20:20
【问题描述】:

我正在尝试跟踪我使用 turbo 汇编器搜索过的程序,但我储存了以下值:

cs:0006->8ED8           mov ds,ax
cs:0392->66B800060000   mov eax,00000600
cs:039A->66B900000000   mov ecx,00000000

有人可以帮我解释一下吗?尤其是cs部分显示的数字。

【问题讨论】:

    标签: assembly tasm


    【解决方案1】:

    “cs”指的是当前代码段,后面的数字指的是段内的偏移量。箭头后面的数字是指令的操作码。

    cs:0006->8ED8           mov ds,ax
     ^   ^     ^
     |   |     |
     |   |     +-- Opcode of the "mov ds,ax" instruction
     |   |
     |   +-- Offset of the instruction within the code segment (6 bytes)
     |
     +-- Current code segment, see contents of your CS register
    

    有关更多详细信息,另请参阅X86 Memory Segmentation

    有关 x86 操作码的列表,请参阅 http://ref.x86asm.net/

    【讨论】:

    • 我还是听不懂。你能解释一下吗?
    • 你需要更具体 :) 你的问题到底是什么?
    • 好的,我明白了,但是那个偏移量呢?我的意思是如果它是“39A”,是不是意味着它是 922 字节?对了,什么是操作码?
    • 是的,它是 922 字节。在 X86 实模式下,物理(20 位)地址由两个 16 位寄存器构成——一个段寄存器和一个偏移量(PC,程序计数器,在 CS 的情况下)。该段向左移动 4 位并添加偏移量以获得物理地址。 opcode 是 CPU 指令的二进制表示。在上面的示例中,8EMOV 指令,D8 编码操作数 (ds,ax)。
    • 它是一个不同的mov - 它使用不同的地址模式(立即数,而不是寄存器),它也是一个 32 位指令(使用扩展(32 位)AX 寄存器)。 66 是将操作数标记为 32 位的“操作数覆盖前缀”,B8 是将立即值移动到 (E)AX 寄存器的实际操作码
    猜你喜欢
    • 1970-01-01
    • 2018-03-04
    • 1970-01-01
    • 2014-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多