使用数据段时使用BYTE PTR确定地址大小

时间:2016-11-28 20:40:54

标签: pointers assembly x86 bootloader mbr

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

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

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

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

1 个答案:

答案 0 :(得分:3)

第二行

lods   al,BYTE PTR ds:[si]

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

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

  

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

关于DS的细分问题:当然,访问的地址是按公式(segment * 16 + offset)计算的,但您可以将DS设置为您想要的任何内容,而 SI被指令递增(后读)。

DS可以有任何价值。