同步人生 发表于 2017-8-31 16:12:56

【已加代码】求教谢谢第六章程序6.3

本帖最后由 同步人生 于 2017-9-1 11:27 编辑

assume cs:meng
meng segment
        dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cdah,0987h
        dw 0,0,0,0,0,0,0,0
       
w:        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
m: pop cs:
        add bx,2
        loop m
       
        mov ax,4c00h
        int 21h
meng ends
end w
如何继续入栈,打错字了!!!应该是如果继续入栈

同步人生 发表于 2017-8-31 16:14:09

如何继续入栈,打错字了!!!应该是如果继续入栈

xiongwenxuan 发表于 2017-8-31 16:21:35

这个应该还是栈中的初始数据吧,你栈还没入完吧,感觉还要执行2次才真正入完栈了

同步人生 发表于 2017-8-31 16:31:34

是的,还有两步。可到这里的时候。栈里的这两个数据变了。你没看到吗。如果继续的话也就出错了

erh 发表于 2017-8-31 21:57:35

贴一下你的完整代码才好分析啊

同步人生 发表于 2017-9-2 15:03:37

谁来帮忙分析下

erh 发表于 2017-9-2 22:15:18

栈段不要和代码段放在一起。
前一段调试程序在时候发现,系统会把代码段的地址,IP,还有一个估计是状态字放到栈里面。在网上也没有找到原因。

3-3 发表于 2017-9-6 09:09:34

单步执行的时候产生了内中断,内中断在执行过程串,要将标志位以及CS:IP存入栈中, 所以如果栈空间不足,就会出现出栈的数据与自己想象中的不同这一现象,在这样的情况下最后出栈的数据分别为 ip,cs    以及标志位。

同步人生 发表于 2017-9-6 13:57:30

如何解决。

同步人生 发表于 2017-9-6 13:59:41

3-3 发表于 2017-9-6 09:09
单步执行的时候产生了内中断,内中断在执行过程串,要将标志位以及CS:IP存入栈中, 所以如果栈空间不足, ...

谢谢,这种如何解决

3-3 发表于 2017-9-6 15:34:14

设置一个大的栈空间就可以了,比如你要用8个字节的栈空间,就把它变成16个字节的盏空间就好了。当然,扩大多少由你自己决定,现在的硬件条件决定了栈空间的设置不需要那么精确哦。

同步人生 发表于 2017-9-6 15:59:55

3-3 发表于 2017-9-6 09:09
单步执行的时候产生了内中断,内中断在执行过程串,要将标志位以及CS:IP存入栈中, 所以如果栈空间不足, ...

如何解决。是增加栈空间吗?如何加。。。

3-3 发表于 2017-9-6 16:09:21

以你的代码为例。


assume cs:meng
meng segment
      dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cdah,0987h
      dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
      
w:      mov ax,cs
      mov ss,ax
      mov sp,48
……
页: [1]
查看完整版本: 【已加代码】求教谢谢第六章程序6.3