[英]Initializing the data segment Register in assembly 8086 using masm compiler
以下两条语句用于初始化数据段寄存器
mov AX, @Data
mov DS, AX
但实际的数据段地址只有在加载程序将程序加载到内存中时才知道。
- 汇编程序用什么来代替@data?
- 当加载程序获取实际数据段基地址时,它是否用 mov AX, Actual Base Address 替换指令 mov AX, @data?
- 在加载阶段之前不知道实际基址时,为什么要写这个语句?
每次编写像mov AX, @Data
这样的指令时mov AX, @Data
编译器/汇编器都会在程序中插入 3 个字节:
AX
,它将是 0B8h
- 汇编程序用什么来代替@data?
该数字表示可执行文件的开头(加载到内存中时)和数据部分的开头之间的距离。 这个数字用段落表示,也就是 16 字节的块。
- 当加载程序获取实际数据段基地址时,它是否将指令 mov AX, @data 替换为 mov AX, Actual Base Address?
加载器只更新第 2 个和第 3 个字节。 它永远不会触及第一个字节!
- 为什么在加载阶段之前不知道实际基址时需要写这个语句?
在你写这些指令的任何地方(可能有很多),你为 DOS 提供了占位符,DOS 加载程序可以在其中插入正确的地址。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.