CS段中内存被神奇修改,有木有??!!

且看王爽老师《汇编语言》第二版程序6.3,先完整抄录如下:

 

;实现0123h, 0456h, 0789h, 0abch, 0defh, 0fedh, 0cbah, 0987h的逆序存储

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, 30h

       

        mov bx,0

        mov cx,8

s:     push cs:[bx]

        add bx,2

        loop s

    

        mov bx,0

        mov cx,8

s0:   pop cs:[bx]

        add bx,2

        loop s0

      

        mov ax,4c00h

        int 21h

codesg ends

end start

 

注意程序申请了内存空间,共32个字节(值全为0),用来作为临时空间。程序本身没有什么问题,内存的动作也合情合理。

 

但是,如果临时内存空间改为16个字节,问题就来了!用debug.exe单步执行的话,会发现在执行 mov ss, ax后,存储数据的内存空间被神奇修改,甚是诡异。照理说,ss的赋值和内存没有联系。原因没想清楚,先占个坑,后头再来想吧。莫非是数据保护,或是字节对齐???望达人赐教!

 

内存变为16字节后:

        dw 0123h, 0456h, 0789h, 0abch, 0defh, 0fedh, 0cbah, 0987h

        dw 0, 0, 0, 0,    0, 0, 0, 0

        mov ax, cs

        mov ss, ax

        mov sp, 20h

       

执行情况

mov ax, cs

mov ss, ax

的内存情况见图1,2。

 

图1 执行mov ss,ax前

 

 

图2 执行mov ss,ax后

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值