使用Data Segment时使用BYTE PTR确定地址大小

Using BYTE PTR to determine the address size when using Data Segment

我正在尝试找出 MBR 代码(实模式下的 16 位汇编代码)并且我有这些行:

mov    si,0x7cd8
lods   al,BYTE PTR ds:[si]

实时发生的事情是,物理地址是 'D8' - 我怎么知道的?因为这是用于加载字符串并将其打印到字符串中。这是我在 运行 这个程序时看到的第一件事,这些是代码的第一行。

我的问题是关于第二行,我得到的物理地址是因为计算得到物理地址(段 * 16 + 偏移量)还是 BYTE PTR 告诉 SI 地址将是 BYTE 类型,我们将读取的数据类型是 byte ?

第二行

lods   al,BYTE PTR ds:[si]

只是指令 LODSB 的反汇编程序输出(从地址 DS:SIINC SI 加载一个字节)。

在汇编程序中你可以简单地写成 LODSB 这意味着

load a byte from the address DS:SI to the byte register AL and increment SI afterwards

关于DS的段问题:访问地址当然是通过公式(segment * 16 + offset)计算出来的,但是DS可以任意设置,[=31=尽管如此,仅 SI 被指令递增(post-读取)。

DS 可以是任意值。