assembly - 请解释一下下面代码中的x86汇编语言指令lds si,[bp+0]

标签 assembly x86-16

FAT16 引导扇区中的前 7 行代码如下所示。 lds 指令位于第 7 行。我阅读了有关 lds 的英特尔引用资料。我的解释是:[bp+0]处数据字节的位置将用于设置dssi寄存器的值。下面的代码中没有足够的信息来做到这一点。 (请注意在启动下面所示的代码之前运行的 MBR 代码中的 ds=0si=0x80。)

问题:请告诉我第 7 行代码运行后,dssi 的值是多少。

xor cx,cx
mov ss,cx
mov sp,0x7bfc
push ss
pop es  
mov bp,0x78
lds si,[bp+0x0]

最佳答案

xor 将 cx 设置为零。然后sssp被初始化为远指针0:7BFCh。 (在设置 ss 之后,在下一条指令中设置 sp 非常重要。)然后将 es 设置为等于 ss,即零。然后将bp设置为78h。 78小时是1Eh的4倍。这意味着 lds sidword [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/

相关文章:

linux - NASM:MOV ECX 上的段错误

assembly - 为什么 DC.W(定义常量)的数字前不需要 #,而只需要指令?

assembly - 如何查看8086中Auxiliary Flag的值

nasm - FAT12文件从0x4200还是0x4400开始?

linux - 汇编括号解释

assembly - 是否可以在 RAM 中执行一些计算?

linux - 为什么在返回 MEMORY 类型时返回 %rax 中的对象地址?

assembly - 为什么汇编语言运算时要在字符串后面加-2?

assembly - assembly 中的MUL功能

assembly - 所有数据都是有效的 x86 16 位机器代码吗?