【发布时间】:2019-06-17 13:01:20
【问题描述】:
当我们编码时,那么我们给不同的段寄存器赋予相同的值,这样两个不同的段可能会相互混淆,并且可能会出现问题。 例如在以下给定条件下。
MOV AX, CS
MOV SS, AX
ASSUME SS: DOSGROUP
如上所述,在第 1 行中,我们将 CS 移动到 AX。紧接着我们AX到SS。这意味着此时 CS 和 SS 寄存器包含相同的值或相同的内存位置,这不是真的,当我们进一步编码时,CS 的内容将与内容 SS 一起崩溃。
【问题讨论】:
-
“崩溃”是什么意思?
-
CPU 会允许的。您需要确保代码和堆栈保持不同,并且堆栈写入命令(PUSH、CALL)不会覆盖代码。段中有 64 KB 的空间 - 如果堆栈停留在低偏移量并且代码加载到高偏移量(例如 CS:8000),它可能会工作。
-
我们如何使用相同的内存位置执行两个操作(例如,一个用于 CS,另一个用于 SS)。在这种情况下,我提到了崩溃。
-
没有任何问题。每当它需要访问内存时,cpu 将使用指令中指定的任何段执行地址映射。多个段寄存器可能指向同一个段这一事实无关紧要。管理内存使用是您的工作,以免意外覆盖内容。