FAT16 引导扇区中的前 7 行代码如下所示。 lds
指令位于第 7 行。我阅读了有关 lds
的英特尔引用资料。我的解释是:[bp+0]
处数据字节的位置将用于设置ds
和si
寄存器的值。下面的代码中没有足够的信息来做到这一点。 (请注意在启动下面所示的代码之前运行的 MBR 代码中的 ds=0
和 si=0x80
。)
问题:请告诉我第 7 行代码运行后,ds
和 si
的值是多少。
xor cx,cx
mov ss,cx
mov sp,0x7bfc
push ss
pop es
mov bp,0x78
lds si,[bp+0x0]
最佳答案
xor
将 cx 设置为零。然后ss
和sp
被初始化为远指针0:7BFCh。 (在设置 ss
之后,在下一条指令中设置 sp
非常重要。)然后将 es
设置为等于 ss
,即零。然后将bp
设置为78h。 78小时是1Eh的4倍。这意味着 lds si
将 dword [0:78h]
处的远指针加载到 ds:si
寄存器对中。 0:78h 是中断 1Eh 的中断向量所在的位置。这恰好是used as a pointer to a DPT .
关于assembly - 请解释一下下面代码中的x86汇编语言指令lds si,[bp+0],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65519112/