【发布时间】:2016-11-28 20:40:54
【问题描述】:
我正在尝试找出一个 MBR 代码(实模式下的 16 位汇编代码),我有这些行:
mov si,0x7cd8
lods al,BYTE PTR ds:[si]
实时发生的事情是物理地址是“D8” - 我怎么知道?因为这用于加载字符串并将其打印到字符串。这是我运行这个程序时看到的第一件事,这些是代码的第一行。
我的问题是关于第二行的,我得到的物理地址是因为计算得到的物理地址(段 * 16 + 偏移量)还是 BYTE PTR 告诉 SI 地址将是BYTE 类型,我们将读取的数据类型是 byte 类型?
【问题讨论】:
-
类型无所谓,因为
segment*16+offset。物理地址是0x7cd8和ds=0,否则它不起作用;) -
BYTE PTR仅在目标大小不明显时才需要。而你的lods ...通常写成lodsb。最后,ds无论如何都是lodsxx的默认段寄存器,所以段覆盖是不必要的。
标签: pointers assembly x86 bootloader mbr