shaliuyu 发表于 2020-3-28 22:22:37

debug 出错

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,32
        mov bx,0
        mov cx,8
s:       
        push cs:
        ADD bx,2
        loop s
       
        mov bx,0
        mov cx,8
s0:
        pop cs:
        add bx,2
        loop s0
       
        mov ax,4c00H
        int 21H
codesg ends
end start执行几次循环后0cbaH,0987H 会变成cs 地址cs:0000


jackz007 发表于 2020-3-28 22:28:55

本帖最后由 jackz007 于 2020-3-28 22:41 编辑

       堆栈的栈顶被安排在代码区,堆栈的每一次活动都会直接破坏代码指令,必须把二者隔开。
assume cs:codesg , ds:codesg
stack segment stack
      dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
stack ends
codesg segment
      dw 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H      
start:
      mov ax,codesg
      mov ds,ax
      xor bx,bx
      mov cx,8
s:      
      push
      ADD bx,2
      loop s
      
      xor bx,bx
      mov cx,8
s0:
      pop
      add bx,2
      loop s0
      
      mov ax,4c00H
      int 21H
codesg ends
end start

shaliuyu 发表于 2020-3-28 22:53:59

jackz007 发表于 2020-3-28 22:28
堆栈的栈顶被安排在代码区,堆栈的每一次活动都会直接破坏代码指令,必须把二者隔开。

谢谢

405794672 发表于 2020-3-30 19:48:01

看你的程序并没有问题。是把上面数据倒过放置。你说的后面变成cs地址是什么意思?后面两个数据应该变成最前面两个啊。一个是0123h,一个是0456h。
页: [1]
查看完整版本: debug 出错