组装IA-32 mov [bootdrv],dl

时间:2014-01-02 18:18:44

标签: bootloader

我刚刚开始编程IA-32汇编和启动加载程序,我无法理解一个命令:mov [bootdrv], dl。 dl是数据寄存器的低8位,但我不知道什么是[bootdrv]。它是变量还是什么?如何将寄存器放在[bootdrv]中?

start:
    mov ax,0x7c0    ; BIOS puts us at 0:07C00h, so set DS accordinly
    mov ds,ax       ; Therefore, we don't have to add 07C00h to all our data

    mov [bootdrv], dl ; quickly save what drive we booted from

这是启动加载程序的第3行,[bootdrv]只显示没有任何定义,我无法理解。

任何信息都会有所帮助和赞赏,谢谢!

2 个答案:

答案 0 :(得分:0)

mov [bootdrv], dl表示段:偏移内存访问。在上一条指令中,您使用地址配置了数据段寄存器,因此mov [bootdrv], dl指令会写入segment:offset地址0x7c0:bootdrv,无论bootdrv可能是什么。

答案 1 :(得分:0)

[bootdrv]是绝对内存地址的规范。代码:

mov [bootdrv], dl

将8位DL寄存器的内容复制到内存中的一个字节,地址为DS乘以16的地址,然后加上值{ {1}}。 bootdrv本身就是一个标签,它表示当前数据段中位于内存位置的位置。

另一方面,必须在某处定义符号bootdrv。否则,汇编器将以“未定义符号”错误停止。也许它是通过代码定义的(汇编器通过源代码完成两次以获取所有符号,因此即使它们是在使用它们的代码序列之后定义的,也可以使用它们)。也许它在一个单独的.INC文件中。