首页
社区
课程
招聘
[旧帖] [求助]王爽汇编教程 0.00雪花
发表于: 2011-10-17 23:47 1846

[旧帖] [求助]王爽汇编教程 0.00雪花

2011-10-17 23:47
1846
学习王爽汇编教程中,看的是PPT。其中《汇编语言》讲稿_06中有一个练习,在CODE段中使用栈,以下是我练习的代码:
环境:win7 masm5.0
assume cs:cp
cp segment
dw 0123h,0456h,0789h,0111h,0112h
dw 0,0,0,0,0
start:
       mov ax,cs
       mov ss,ax
       mov sp,20
       mov bx,0
       mov cx,5
s:
       push cs:[bx]
       add bx,2
       loop s

       mov cx,5
       mov bx,0
as:
       pop ax
       add bx,2
       loop as
       mov ax,4c00h
       int 21h
cp ends
end start
有个地方不是很明白,本人认为CS:0000 为0123, CS:0002 为0456 CS:0004为0789
CS:0006为0111 CS:0008 为0112 然后我用debug跟踪,CS0004以及之前的都是对的,到了CS:0006就变成 0000了,然后CS:0008 变成 1476  其中AX,CS都为1476.b不是很明白为什么会这样呢?
 第一次发帖也不知道问题描述清楚了没,首先自己鼓励一下自己。
 然后请高人指点。是不是自己对于PPT看的太粗略了,哪个地方有疏漏
还有如果有什么好的学习方法和建议请不要吝啬。 
谢谢

[课程]FART 脱壳王!加量不加价!FART作者讲授!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 107
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
这个就是栈空间不够大造成的,指定的栈只有20个字节,

在执行
mov ss,ax
mov sp,20

为了保护现场,栈里已压入标志寄存器等的值,再加上程序执行后又压入0123,0456等10个字节,这样栈里原来的前10个字节被覆盖了,所以出现预想不到的结果
2011-10-18 09:58
0
雪    币: 43
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
非常感谢
2011-10-18 23:17
0
雪    币: 96
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
不错不错
2011-10-19 19:34
0
游客
登录 | 注册 方可回帖
返回
//