|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 66642319 于 2011-3-1 15:09 编辑
assume cs:abc
abc segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h ;申请一段程序前的地址来存放数据
dw 0,0,0,0,0,0,0,0 ;申请一段程序前的地址来为栈
start: mov ax,abc ;将CS的段地址传给AX寄存器
mov ss,ax ;在将AX的值传给SS栈段寄存器
mov sp,20H ;设置SP也就是栈空间的大小,栈为空时,栈顶指向栈空间的下一内存单元
mov cx,8 ;循环次数
mov bx,0 ;将内存偏移地址传给偏移地址寄存器
s: push cs:[bx] ;将CS:bx的值入栈
add bx,2 ;存放的数据为字型数据,占用2个内存单元16个字节所以偏移地址加2
loop s ;开始循环
mov cx,8
mov bx,0
s0: pop cs:[bx]
add bx,2
loop s0
mov ax,4c00H
int 21H
abc ends ;ABC段结束
end start ;程序结束
这是6.2例题的源代码!也就是老师视频里的P118.ASM的源码
编译后,在DEBUG中调试后出现问题,麻烦老师帮忙看看,
debug加载后 CS指向13d2 源代码是在CS:IP的前面定义的也是就把13D2:0到F存放着 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
BX的值是0008的时候都正常向SS:SP栈中压入了 过了这次循环后,13D2:C D E F 中的值不知道哪里跑来其他几个不相关的数值,导致后面的结果不是
像要的结果,试了很久找不出出错的原因,麻烦老师解答下好吗
看了下书把栈段定义为:DW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 16个字节单元,问题得到解决了
但是老师还是来解答下为什么栈段中多了一些不数据是什么
栈中从13D2:16到1F中那段数据是什么东西,谢谢老师 |
|