当前位置: 代码迷 >> 汇编语言 >> 求汇编高手解答~感激(小弟我是菜鸟)
  详细解决方案

求汇编高手解答~感激(小弟我是菜鸟)

热度:3724   发布时间:2013-02-26 00:00:00.0
求汇编高手解答~感激(我是初学者)
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有关。
------解决方案--------------------------------------------------------
说清楚点吧,单步调试也是中断。但处理器不会把那两条指令分开执行滴~
------解决方案--------------------------------------------------------
探讨

assume cs:codesg
codesg 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 sp,30h
mov bx,0
mov cx,8
s:push cs:[bx]
……
  相关解决方案