繁体   English   中英

使用 masm 编译器在程序集 8086 中初始化数据段寄存器

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM