注册 登录
编程论坛 汇编论坛

[求助]王爽《汇编语言》第六章测试点6.1第二题

skybluechen 发布于 2007-08-03 00:43, 2764 次点击

题目要求:
下面的程序实现依次用内存0:0~0:15单元中的内容改写程序中的数据,数据的传送用栈来进行。栈空间设置在程序内,完成程序:
assume cs:codesg
codesg segment
dw 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H
dw 0,0,0,0,0
start: mov ax,___
mov ss,ax
mov sp,___
mov ax,0
mov ds,ax
mov bx,0
mov cx,8
s: push [bx]
_________
add bx,2
loop s

mov ax,4c00H
int 21H
codesg ends
end start
我写出的第一个程序为:
assume cs:codesg
codesg segment
dw 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H
dw 0,0,0,0,0
start: mov ax,cs
mov ss,ax
mov sp,26
mov ax,0
mov ds,ax
mov bx,0
mov cx,8
s: push [bx]
pop cs:[bx]
add bx,2
loop s

mov ax,4c00H
int 21H
codesg ends
end start
程序的运行结果如下图:

只有本站会员才能查看附件,请 登录

从上图可以看出,程序只在第一次循环时实现数据传送。这是为什么呢?还有一个问题让我不解,某个网友给出的参考答案跟我的答案是一致的。换言之,该网友使用上述源代码在其电脑上实现了程序预期的功能。难道问题出在我的电脑上,而不是我所写的源代码?
在我看来,初时ss:sp指向栈底,push [bx]指令让一个字的数据入栈,pop [bx]指令让一个字的数据出栈。这样一进一出,也就是循环一次后,ss:sp依然指向栈底。根据这种思路,栈空间的大小为一个字就足够了。根据这种思路,我将程序修改如下:
assume cs:codesg
codesg segment
dw 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H
dw 0
start: mov ax,cs
mov ss,ax
mov sp,18
mov ax,0
mov ds,ax
mov bx,0
mov cx,8
s: push [bx]
pop cs:[bx]
add bx,2
loop s

mov ax,4c00H
int 21H
codesg ends
end start
程序的运行结果如下图:

只有本站会员才能查看附件,请 登录

从上图可以看出,我的思路有误。
以上问题,敬请高手指教,小弟不胜感激!

11 回复
#2
skybluechen2007-08-03 14:52
各位兄弟姐妹,这可是我的精心打造的求助贴哦?
怎么全是看客,没人回帖呢?
期待ing……
#3
无理取闹2007-08-03 16:50
看了好半天也没看出什么毛病来 唉 水平有限
#4
zhulei19782007-08-03 18:07
在我这里运行是正确的,没有问题呀
只有本站会员才能查看附件,请 登录

[此贴子已经被作者于2007-8-3 18:07:42编辑过]

#5
zhulei19782007-08-03 18:14
只有本站会员才能查看附件,请 登录

#6
skybluechen2007-08-04 22:09

非常感谢版主!!!!!!
看来问题真的出在我的系统上。
兄弟,再麻烦你一下,不知你没有测试一下我第二种思路是否行得通?
就是只用一个字的栈空间。
再次感谢!!!!!

#7
skybluechen2007-08-04 22:12
以下是引用无理取闹在2007-8-3 16:50:31的发言:
看了好半天也没看出什么毛病来 唉 水平有限

至少你认真看了,谢谢哈
如果你愿意,我们交个朋友,一起搞定汇编,嘿嘿……

#8
无理取闹2007-08-05 07:52
我汇编也在学习中
来这里学习的大家都是朋友啊
#9
hkbyest2007-08-11 18:16

LZ的第一个程序代码是正确的,至于显示为什么不正确可能跟你的系统环境有关,可以用command命令进入虚拟8086环境试试看。

第二个程序代码总体上来说思路是正确的,如果你不用debug的话数据应该会正确显示,问题出在我们debug调试时产生了单步中断,会把flag寄存器,ip,cs压桟,所以我们需要额外的空间来容纳。你可以试试设置4个字单元的桟空间看看就明白了。

#10
zhulei19782007-08-12 20:48
第二个程序在我这里运行也不正确,可能就是楼上说的原因
#11
skybluechen2007-08-15 00:27
非常感谢各位的回答!
#12
ping燕s2011-06-16 13:59
确定是系统问题 ???

我的和LZ的情况一样
只有本站会员才能查看附件,请 登录
啊 ?????
1