风不会停息 发表于 2018-5-1 23:56:38

关于汇编语言第三章将10000H~1001FH这段内存安排为代码段,数据段和栈段的问题

代码为
mov ax, 1000H
mov ss, ax
mov sp, 0020H
mov ax, cs
mov ds, ax
mov ax,
add ax,
mov bx,
add bx,
push ax
push bx
pop ax
pop bx


cs:ip=1000:0

当执行到ip= 0013时,即mov bx, 时,图中显示的却是mov bx, ,,接下来的代码便中断了,想问下这是怎么回事?

人造人 发表于 2018-5-2 13:48:40

栈空间太小了,入栈的数据把代码段的指令覆盖了

风不会停息 发表于 2018-5-2 23:12:31

人造人 发表于 2018-5-2 13:48
栈空间太小了,入栈的数据把代码段的指令覆盖了

可是指令出错时ax,bx还没入栈啊,而且我把栈顶定在了1fff还是不行,内存数据改变是当执行完movss, ax后才改变的,是因为栈的原因吗?

风不会停息 发表于 2018-5-2 23:19:50

求解啊

人造人 发表于 2018-5-3 00:01:49

风不会停息 发表于 2018-5-2 23:19
求解啊

看图




风不会停息 发表于 2018-5-3 10:47:26

人造人 发表于 2018-5-3 00:01
看图

那我想问下我上面调试时执行完mov ss, ax后,是什么导致内存1000:0017后的数据发生的变化呢,不太明白这个地方,能不能详细解释下( ω )

人造人 发表于 2018-5-3 13:01:37

风不会停息 发表于 2018-5-3 10:47
那我想问下我上面调试时执行完mov ss, ax后,是什么导致内存1000:0017后的数据发生的变化呢,不太明白这 ...

你的栈太小了,debug调试程序时需要栈,因为栈太小,debug用栈时把1000:0017后的数据覆盖了

mingzihaonan 发表于 2018-5-3 16:22:56

风不会停息 发表于 2018-5-2 23:12
可是指令出错时ax,bx还没入栈啊,而且我把栈顶定在了1fff还是不行,内存数据改变是当执行完movss, ax ...

mov ss,ax 执行后不响应任何中断。所以看不到T命令后显示各个寄存器内容并等待输入。下面紧接着执行了mov sp,20h,响应中断。引发中断过程,中断过程中需要向当前栈中,栈顶为ss:sp=1000:0020。首先压入标志寄存器的值-01A4,和执行完mov sp,20h之后下条指令的cs的值-1000,和ip的值-0008。所以被改变了。后面学习中断过程你就懂了。
页: [1]
查看完整版本: 关于汇编语言第三章将10000H~1001FH这段内存安排为代码段,数据段和栈段的问题