1. call问题
;此处省略头
.code
push 0
push offset szCap
push offset szText
push 0
call dword ptr [offset MessageBox]
;此处省略尾
调试发现,本应该是push 0是句柄,但是之后又添加了一个push cs?? 为何?
2. 堆栈问题
stack segment
db 8 dup (?)
stack ends
...
code segment
...
mov ax, stack
mov ss, ax
mov sp, 10H
Debug一下,查看SS:SP发现里边保存了ax等好几个寄存器的值,为何?加载过程是?
------解决思路----------------------
1. 可能是你的 call dword ptr [MessageBox] 的写法被汇编程序误解了吧,应该是写成 call MessageBox 的,如下面的 call ExitProcess 似的,因为 MessageBox 就是系统函数的入口,不是另外个变量保存了这个函数入口的地址;不过误解成这样,也属异常,不大好理解,甚至可能是 masm 的 bug 了。
2. 这几个,应该是debug 的 t 单步功能使用了的吧,除了触发中断的那三个 word 之外,其它的就看 debug 的单步功能代码部分怎么做的了,究竟是 ax 还是 ss 其实都没什么关系;对规范的堆栈使用来说,低于 sp 的区间是不可靠的,可信任的只是 sp 指向的后面的部分(bug 除外)。