【问题标题】:Assembler memory address representation汇编器内存地址表示
【发布时间】:2011-06-02 15:51:35
【问题描述】:

我正在尝试进入汇编程序,我经常遇到以下形式的数字:

org 7c00h

; initialize the stack:
mov     ax, 07c0h
mov     ss, ax
mov     sp, 03feh ; top of the stack.

7c00h, 07c0h, 03feh - 这个数字符号的名称是什么?他们的意思是什么?为什么要在“普通”十进制数字上使用它们?

【问题讨论】:

    标签: hex assembly


    【解决方案1】:

    这些是hexadecimal notation 中的数字,即以 16 为底的数字,其中 A 到 F 的数字值为 10 到 15。

    一个优点是可以更直接地转换为二进制数。稍加练习,就很容易看出数字中哪些位是 1,哪些是 0。

    另一个是内部使用的许多数字,例如内存地址,是十六进制的整数,即包含很多零。

    【讨论】:

      【解决方案2】:

      另外值得注意的是,0:7C00 是引导扇区加载地址。

      另外值得注意的是:由于分段寻址的工作方式,07C0:03FE 与 0:7FFE 的地址相同。

      这家伙给自己留下了一个 510 字节的堆栈(他在设置引导扇区的堆栈时犯了一个非常典型的 off-by-two 错误)。

      【讨论】:

        【解决方案3】:

        它是十六进制,由 0-9 和 A-F 组成的 16 位数字系统。内存地址以十六进制表示,因为它更短,更容易阅读,而且代表内存位置的数字对人类没有任何特殊意义,所以长数字没有意义。我猜在过去的某个地方,也有人不得不手动输入一些地址,还不如从那里开始。

        【讨论】:

        • 值得补充的是,每个数字末尾的“h”只是符号的一部分,而不是数字的一部分。 7c00h 是十六进制的“7c00”。您会在其他地方看到相同的数字表示为 0x7c00。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-06
        • 2015-10-27
        相关资源
        最近更新 更多