我刚刚开始编程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]
只显示没有任何定义,我无法理解。
任何信息都会有所帮助和赞赏,谢谢!
答案 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文件中。