gpt4 book ai didi

assembly - NASM - 获取堆栈中的项目数

转载 作者:行者123 更新时间:2023-12-03 06:29:17 24 4
gpt4 key购买 nike

我试图弄清楚如何通过用 bp 减去 sp 寄存器来获取堆栈中的项目数。我究竟做错了什么?我得到完全错误的结果

MOV bp, 0x7E00
MOV sp, bp

PUSH 'A'
PUSH 'B'
PUSH 'C'

POP bx
MOV al, bl
CALL _printchar

POP bx
MOV al, bl
CALL _printchar

MOV bx, sp
SUB bx, bp
ADD bx, 48 ;To get ascii number
MOV al, bl
CALL _printchar

这是输出:

CB。

最佳答案

关于堆栈,一个真正令人困惑的事情是它会向下增长。

与大多数人对堆栈的心理印象相比,您在汇编中使用的堆栈是“颠倒的”。堆栈的“底部”具有最高的内存地址,“顶部”具有最低的内存地址。当您将 2 个字节压入堆栈时,会从堆栈指针中减去 2 个字节,而不是添加到其中。 (如果从内存分区的角度来考虑的话,这其实更安全)

所以 SUB 的结果是 -2,即“.”在 ASCII 中。您不能只是交换操作数,因为结果需要进入第一个操作数,因此它应该是通用寄存器。相反,请在 SUB 之前更改 MOV 操作。

关于assembly - NASM - 获取堆栈中的项目数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30143748/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com