从堆栈寄存器弹出时,高 8 位寄存器会发生什么变化?

What happens to the high 8 bit register when popping from stack register?

当像这样从堆栈寄存器弹出时: pop bx 在 x86_64 系统中 运行 在 16 位模式下,bh 寄存器会发生什么,因为当我尝试从那里访问 bh 寄存器,它 returns 什么也没有。但是当访问 bl 寄存器时,我得到了我压入寄存器的值。 我的代码:

mov ah, 0x0e

mov bp, 0x8000
mov sp, bp

push 'A'
push 'B'

pop bx
mov al, bl
int 0x10

但是假设我在倒数第二行中放置了 bh 寄存器而不是 bl,我没有得到任何返回。

由于pop bx将当前字(16位)写入bx,bh被该字的高位字节覆盖。 在您的情况下,您将 'B' 推入堆栈,扩展为 0x0042 而不仅仅是 0x42,因此它具有一个单词的长度。 如果你然后 pop bx 它会将 0x0042 ((word) 'H') 写入 bx ,这会将 0x00 写入 bh 并将 0x42 写入 bl.