1

我试图找出一个 MBR 代码(实模式下的 16 位汇编代码),我有这些行:

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

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

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

4

1 回答 1

3

第二行

lods   al,BYTE PTR ds:[si]

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

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

从地址 DS:SI 加载一个字节到字节寄存器 AL,然后增加 SI

关于段问题DS:当然访问的地址是通过公式计算的(segment * 16 + offset),但是您可以设置DS为任何您想要的内容,并且只能 SI通过指令递增(读取后)。

DS可以有任何价值。

于 2016-11-28T20:54:23.083 回答