初学汇编,关于stack的问题
Assembler:TASM5.0
Platform: Window98
STK SEGMENT
DW 128 DUP(0)
TOS LABEL WORD
STK ENDS
...
CODE SEGMENT
..
MOV AX,STK
MOV SS,AX
MOV SP,OFFSET TOS
...
DEBUG的时候,执行了MOV SS,AX之后,SP=0100,但是,SS:00F0-00FF并不都是预计的0,而是出现了一些寄存器的内容,比如CS,AX等
请问:是不是载入实例的时候系统在stack中压入了东西?可是自定义的stack应该与系统无关的呀,那么那些东西是怎么进入stack的呢?
谢谢!
执行mov sp,offset tos之后呢??sp的值指的是stack的最后的地址,比如stack地址是0000:1000,stack的大小是1000,则sp的值为2000,可以使用的范围是:1000----1ffff,2000的位置不会是0,当使用一次push时,sp会减小,直到为0.
我记得书中好像是这么一种意思,时间久了,也记不清是不是这样
你的TOS在STK SEGMENT 里面,装入栈的时候,
MOV AX,STK ;是不是包括TOS这一部分,
;前面的部分FF就是256个字节是0,后面的呢?
MOV SS,AX ;装入到段中
???你装入到SS中,然后又让栈指针指到TOS的位置是不是?
本来想试验一下,我是在W2K,MASM 后,想 DEBUG看一下,但
是装不成,没看成。也不好说什么了。呵呵~只是觉得你应该看
SS的前256字节,而不是看从SP开始……你说呢??
(因为你说的都觉得奇怪,明明是清零了)
----------------
研究研究
从SS:0000 到 SS:00ff都应该是0,不会错的.
你确定在查看SS:00f0之前用 -T 跟踪执行了 "MOV AX,STK" "MOV SS,AX" 语句了吗?
我确定的确跟踪了mov ax,stk,以及mov ss,ax
但是mov sp,offset tos没有跟踪到,因为t的时候自动跳过了,所以我怀疑系统初始化了一些东西