我试图找出一个MBR代码(实模式下的16位汇编代码),我有这些代码:
mov si,0x7cd8
lods al,BYTE PTR ds:[si]
实时发生的是,物理地址是'D8' - 我怎么知道?因为这用于加载字符串并将其打印到字符串。这是我运行这个程序时可以看到的第一件事,这些是代码的第一行。
我的问题是关于第二行,是因为我得到的物理地址是为了获得物理地址(段* 16 +偏移)或者BYTE PTR告诉SI地址将是BYTE的类型和我们将读取的数据类型是byte类型吗?
答案 0 :(得分:3)
第二行
lods al,BYTE PTR ds:[si]
只是指令LODSB
的反汇编输出(从地址DS:SI
和INC SI
加载一个字节)。
在汇编程序中,您可以简单地编写LODSB
,这意味着
将地址DS:SI中的一个字节加载到字节寄存器AL,然后增加SI
关于DS
的细分问题:当然,访问的地址是按公式(segment * 16 + offset)
计算的,但您可以将DS
设置为您想要的任何内容,而仅> 然而,em> SI
被指令递增(后读)。
DS
可以有任何价值。