关于监测点3.2的问题
对于该题目,首先我题目就没有看懂!非常之郁闷。其次,对答案不能够理解,特别是特别是第二小问,中的几个空!因为我不明白当程序运行时是怎样的一种顺序,因为,pop或者push 后面的偏移地址到底是先执行数据段的还是执行栈段的,到底是怎么样的顺序执行操作的!求详细指教 本帖最后由 莫名其妙 于 2012-3-3 18:56 编辑首先你要先明白 什么是栈 栈空间栈顶 栈低push pop 进出的数据的方式 方向 以及sp 的指向执行push pop以后sp的指向
mov ax,2000Hmov ds,ax ;这就不说了设定数据段地址将20000-2000f设置成数据段 数据存放是从0-f 这个顺序mov ax,1000H mov ss,ax mov sp,0 这里设置 10000-1000f为栈段栈顶应该是1000f 现在sp 指向0号内存单元位置栈底的位置!~pop 这里执行pop 指令执行的是将栈中数据 取出来放到 ds:[] 内存单元里 (附带说一句 push ax或者push[] 是将axpop 或者内存单元中中数据放进去pop ax或者pop []呢 是将栈中数据取出来放进 ax 或者[]内存单元pop 现在这一路pop 都是执行出栈那么现在sp指向0号内存单元 按照 出栈的说法 先将当前sp指向的数据放进[]内存单 元 然后sp=sp+2 费点劲给你写个图 pop pop pop pop pop
按照颜色你也应该看明白了吧 如果真的 不明白就可以掉头看看 内存中数据的存放 栈 那些章节的内容别继续看后面了!~ 借用王爽老师的一句话没用通过检测点的不要继续往下进行学习!~
10000 sppop 2000010001 ↓ 2000110002 sp+2 pop 2000210003 ↓ 2000310004sp在加2pop 2000410005 下面就不写了一样的 1000610007. 2000a. 2000b. 2000c. 2000d.1000e 2000e .1000f 2000f
第1题目意思是:用PUSH压栈的命令把10000H---10000FH里的内容移到20000H-2000FH里
第2题的意思是:用POP出栈的命令把10000H---10000FH里的内容移到20000H-2000FH里
1:
mov ax,1000H
mov ds,ax (先用 mov ds,ax把数据段寄存器DS置成段地址为1000H )
.....
......
......
push (把DS指向1000:0的字入栈,但是没有设置栈段与初始化栈顶,计算机找不到位置存放,所以在空处应补上mov ax ,2000 mov ss,ax mov sp ,10 才可以把1000:0里内容0123H 存放到2000E-2000F中 ) PUSH与POP后面的中括号[]都是数据段DS中的 偏移地址单元。PUSH与POP只是把DS指向内存数据存放到SS:SP所指向另一段内存空间。
有帮助,楼主加油 学习学习 首先你要明白栈是用户自己定义的,push就是把数据放到栈里,pop就是把数据从栈里取出来
1.先要把左边的数据设置为栈,段地址,也就是起始地址为ss:1000,偏移地址就是F + 1 = 10H,即栈顶为空间的最后一个字节地址+1 或者最后一个字地址 +2
mov ax,1000H
mov ss,ax
mov sp,10H
2.现在左边所有数据都在栈里了,只要pop到数据段就能实现要求
pop 将栈底数据,也就是最上面一个数据出栈并赋值给ds:, 栈顶指针sp+2,移动到下面一个数据
pop
...
页:
[1]