【问题标题】:What is the last address of data segment in an assembly 8086 program? [duplicate]汇编 8086 程序中数据段的最后地址是什么? [复制]
【发布时间】:2018-09-29 20:17:21
【问题描述】:

如果8086汇编程序中数据段的首地址是0000,那么末地址是多少(十六进制)?

如果这取决于安装的 ram 数量,那么我说的是 dosbox。

【问题讨论】:

  • 你的问题有点混乱。 8086 上没有单个数据段。您可以通过将段寄存器指向它来使用您喜欢的任何段。请尝试澄清您的问题。请注意,您可以使用int 12h 向 BIOS 询问您有多少 RAM。

标签: assembly x86 x86-16


【解决方案1】:

8086 中的一个段总是只有 65536 个字节
因此数据段的最高地址为 65535 或十六进制的 0FFFFh。

这与安装的 RAM 数量无关!

【讨论】:

  • 但地址的有效性确实取决于物理地址指向的位置,即在具有 256kB RAM 的 PC 上使用 9F00:C000 将无法正常工作。它与segment:offset 方案无关,它总是采用两个 16 位值 (0000-FFFF)
  • 地址部分的技术术语是“偏移量”(即相对于段基的偏移量)。是的,0xFFFFh 是实际 8086 的最高可能偏移量,但实模式下的 386 可以有更高的段限制(又名“虚幻”模式)。 Segment size in x86 real mode,可能是重复的。
【解决方案2】:

8086 架构可以寻址从 0x00000 到 0xfffff 的 1MB 内存。

重要的是,您不能使用单个段一次访问整个地址空间。当您使用ds 段寄存器(或任何其他)时,您可以一次操作多达 64kB 的 RAM。

【讨论】:

  • 并且0000页在16b中保留给中断向量/处理程序表,然后一些页被BIOS、驱动程序、DOS使用,然后加载可执行文件,可执行文件可以在PSP区找到应用程序可用的最大页面数,通常为 9FFF,但也可以更少。 A000-C000 的页面通常用于映射 VGA 视频内存,并且 BIOS 上方的某处有一些进一步的数据和/或卷影副本,因此 1MB 的 DOS 应用程序的实际可用范围大约是 0400-9F00 (~620kB) ,要使用完整的 1MiB RAM,您需要使用“高内存”管理器,例如 XMS/EMS 或 32b 模式。
猜你喜欢
  • 2019-06-21
  • 2017-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多