assume cs:code
code segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
start: mov ax,cs
mov ss,ax
mov bx,30
mov sp,bx
mov bx,0
mov cx,8
s:push cs:[bx]
add bx,2
loop s
mov bx,0
mov cx,8
s0:pop cs:[bx]
add bx,2
loop s0
mov ax,4c00h
int 21h
code ends
end start
ret
因为电脑是64位的win7,所以我用的是emu8086,这个程序在我一步一步调试的时候发现mov bx,30 mov sp,bx这两步没有起作用,sp的值没有变化,请问是怎么回事啊????
------解决方案--------------------------------------------------------
首先,通过寄存器BX初始化堆栈指针SP是不符合规范的。INTEL处理器碰到初始化堆栈段段寄存器SS的指令(如mov ss,cx或者pop ss等)时,会在下一条指令执行完期间禁止中断,为的就是防止只修改了SS,还没有修改SP时,因中断而产生致使错误。所以,在一条修改SS的指令之后,应当立即跟着一条修改SP的指令,如果确定要修改SP的话。
你所遇到的情况和emu8086有关。
------解决方案--------------------------------------------------------
说清楚点吧,单步调试也是中断。但处理器不会把那两条指令分开执行滴~
------解决方案--------------------------------------------------------