一段汇编代码(初级),有点问题,高人指点。
我将10000h-1001fh安排为代码段,并在里面存储如下代码:
mov ax,1000h
mov ss,ax
mov sp,0020h
mov ax,cs
mov ds,ax
mov ax,[0]
add ax,[2]
mov bx,[4]
add bx,[6]
push ax
push bx
pop ax
pop bx
为什么执行到mov bx,[4]时就变成了mov bx,[c804]了呢,下面的代码也变了。不知为什么,好像这里面没有对内存的写操作呀,为什么会这样呢,高手指点一下,指教了。
[解决办法]
将堆栈设置在了 20h, 这个在调试时会影响到指令的. 换个地方做堆栈吧
[解决办法]
还有就是指令后面跟的操作数是不是一定要是16进制表示的?比如mov ax,1122h和mov ax,1122实际上是一样的,我在debug中只能输入mov ax,1122而debug也把它认成16进制,不知是不是这样,还有要是想要输入2进制,10进制,8进制怎么办呢?
===============================
MASM 里你可以输入 mov ax,1122 这是十进制,当然也可以mov ax,1122d
mov ax,1122h 这是十六进制
mov ax,1100b 这是二进制
mov ax,1122o 这是八进制
[解决办法]
呃? 上面不是说了么. 将 mov sp, 0020h 改为 mov sp, 0040h 试试了
[解决办法]
唉, 调试时发生的中断产生的压栈造成的. 你看下中断后的各寄存器的内容, 就知道是哪个了. 从你说的来看, 中断部分还只使用了 16-1f 共 5 个 word, 其中最后的三个 word 分别是返回的 ip 和 cs 以及当时的 FlagReg; 至于前两个, 看其和哪些个寄存器内容相同, 大致就是谁了, 有雷同的话, 就改变下再试试看