在非常简单的汇编语言编程中,每个人都可能知道下面给出的行:
cli
xor ax,ax
mov ss,ax
mov sp,7c00h
push ss
pop es
我非常简单的问题是,当在第3行中我们写mov ss,ax,那么值“0000”将移入堆栈段寄存器ss。我的问题在于理解当我们使用两个指令“push ss”和“pop es”时,那么两个段ss和es是否将被创建并从地址“0000”开始的相同存储器位置开始。(因此相互重叠),或者创建两个单独的段,在它们的第一个位置包含值“0000”(绝对值)。如果后一个条件满足,则将自动创建ss和es(因为我们没有使用任何指令来创建段SS
或ES
,例如:)
stack segment stack1
end stack1
extra segment extra1
end extra1
assume stack:stack1
extra:extra1
1条答案
按热度按时间qncylg1j1#
在您的代码中,
SS
和ES
相互重叠,并指向同一个段。请务必记住,* 段 * 和 * 段寄存器 * 虽然相关,但并不相同。“段”是内存,段寄存器的值是指向相应段的指针的一部分。将两个段寄存器指向同一段内存是很常见的。没有新的创建,它们只是查看同一段内存。