以下两个用于初始化数据段寄存器的语句
mov AX, @Data
mov DS, AX
但实际数据段地址仅在加载程序将程序加载到内存中时才知道
- 汇编程序用什么代替@data?
- 当加载程序获取实际数据段基址时,是否将指令mov AX,@ data替换为mov AX,实际基址?
- 为什么有必要在加载阶段之前知道实际基址时写这个语句?
答案 0 :(得分:1)
每次编写像mov AX, @Data
这样的指令时,编译器/汇编器会在程序中插入3个字节:
AX
则为0B8h
- 汇编程序用什么代替@data?
此数字表示可执行文件的开头(在内存中加载时)与数据部分的开头之间的距离。这个数字用段落表示,也就是16字节的块。
- 当加载程序获取实际数据段基地址时,是否将指令mov AX,@ data替换为mov AX,实际基址?
加载程序仅更新第2个和第3个字节。它永远不会触及第一个字节!
- 为什么在加载阶段之前未知实际基址时需要编写此语句?
你写这些指令的所有地方(可能有很多这些指令),你为DOS提供占位符,DOS加载器可以插入正确的地址。