assume cs:code,ds:data,ss:stack
data segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
data ends
stack segment
dw 0,0101H,0202H,0303H,0404H,0505H,0606H,0707H ;这里是栈中的初始化内容
stack ends
code segment
start: mov ax,stack ;stack中保存的是栈段的段地址,对吧?我调试的时候看到的是0B42
mov ss,ax ;为什么一执行这条指令后栈中的内容就变了?
mov sp,16
mov ax,data
mov ds,ax
push ds:[0]
push ds:[2]
pop ds:[2]
pop ds:[0]
mov ax,4c00h
int 21h
code ends
end start
我把它编译后debug.在debug的时候发现程序刚载入时,用D命令查看栈中的内容是程序代码中的初始内容,
可是一当执行mov ss,ax后栈中的内容就变了呢?
没执行mov ss,ax前我观察的0b42:0段的内容,设置ss的值为0b42后我观察的还是0b42:0 10的内容
7 个解决方案
#1
DEBUG需要用栈来保存调试信息的
上面你只要看看就能看出里面的东西就是你正在执行的地址
上面你只要看看就能看出里面的东西就是你正在执行的地址
#2
我也发现了,那这样的话,我要用栈 它也要用,那不冲突吗?
#3
你把stack段寄存器改了,内容能不变吗?
#4
我只是把 stack段地址告诉了ss寄存器,为什么会变呢?
登记一下怎么会变呢?
登记一下怎么会变呢?
#5
既然你知道了,只能你自己衡量好了。要不你就换个调试器
#6
地址变了,内容能不变吗!
#7
地址木有变啊 亲,只是登记了一下
#1
DEBUG需要用栈来保存调试信息的
上面你只要看看就能看出里面的东西就是你正在执行的地址
上面你只要看看就能看出里面的东西就是你正在执行的地址
#2
我也发现了,那这样的话,我要用栈 它也要用,那不冲突吗?
#3
你把stack段寄存器改了,内容能不变吗?
#4
我只是把 stack段地址告诉了ss寄存器,为什么会变呢?
登记一下怎么会变呢?
登记一下怎么会变呢?
#5
既然你知道了,只能你自己衡量好了。要不你就换个调试器
#6
地址变了,内容能不变吗!
#7
地址木有变啊 亲,只是登记了一下