debug 出错
assume cs:codesgcodesg 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: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 jackz007 发表于 2020-3-28 22:28
堆栈的栈顶被安排在代码区,堆栈的每一次活动都会直接破坏代码指令,必须把二者隔开。
谢谢 看你的程序并没有问题。是把上面数据倒过放置。你说的后面变成cs地址是什么意思?后面两个数据应该变成最前面两个啊。一个是0123h,一个是0456h。
页:
[1]