【发布时间】:2015-05-09 18:48:47
【问题描述】:
我试图弄清楚如何通过用 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。
【问题讨论】:
-
你能发布输出吗?
-
@1.618 我添加了输出
-
建议:SP中不要放具体的数字。你在要求灾难。如果这对你有用;伟大的。还有一百万种其他(更安全的)方法可以找出堆栈的实际位置。同样,如果这对您有用;呃;好的。我看到很多担忧。
-
@User.1 好吧,我正在尝试创建一个自己的操作系统,所以我需要将它放在一个特定的位置,这样它就不会覆盖我的代码
-
@ErikW:我鼓励你,在这种情况下,如果没有其他人的话,相信链接器。他非常擅长这一点;他真的是。