汇编检测点6.1第二题
本帖最后由 张国祥 于 2011-7-5 18:31 编辑汇编检测点6.1第二题的第二个空,小甲鱼栈顶偏移地址是不是设置错了? 按道理说,sp应该先设置为36=24H,但是也不对,我单步跟踪了下,第三次入栈时,数据就不对了…… 我在网上找了些资料,明白了第一个疑问,小甲鱼之所以写1ah是因为书的版本不同,小甲鱼的答案是第一版的,而我的书是第二版的
但是,我单步跟踪多次,问题还是没有解决,每到第三次入栈,就会出错,网上说:
估计是栈空间太小,调用Int 21h中断各种压栈把正确结果覆盖了吧!
但是,我把栈调到更大后,还是有问题,望知道的人帮我解惑,谢谢!~ 你想转换多少字节的数据 就定义能放多少字节的栈不就得了 你把栈空间设置大了 也许你是找错栈的偏移地址出现数据转换的错误呢 本帖最后由 king嗜血法师 于 2011-7-4 02:57 编辑
你应该把你写的代码发上来,这样很难明白你的意思。 夜读金瓶梅 发表于 2011-7-3 22:32 static/image/common/back.gif
你想转换多少字节的数据 就定义能放多少字节的栈不就得了 你把栈空间设置大了 也许你是找错栈的偏移地址出现 ...
绝对没错,你可以单步跟踪试试,而且小甲鱼的源码也不行。 本帖最后由 张国祥 于 2011-7-4 10:32 编辑
king嗜血法师 发表于 2011-7-4 02:57 static/image/common/back.gif
你应该把你写的代码发上来,这样很难明白你的意思。
这个是我写的:
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 ;10个字单元做栈空间
start: mov ax,cs
mov ss,ax
mov sp,36 ;设栈顶
mov ax,0
mov ds,ax
mov bx,0 ;DS:=0:0
mov cx,8
s: push
pop cs:
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,0,0,0,0,0,0,0,0,0,0,0,0 ;增加的栈空间
start: mov ax,cs
mov ss,ax
mov sp,50 ;设栈顶
mov ax,0
mov ds,ax
mov bx,0 ;DS:=0:0
mov cx,8
s: push
pop cs:
add bx,2
loop s
mov ax,4c00h
int 21h
codesg ends
end start
你写的我试过了能正常显示结果,可能是你的系统或编译器的问题。
其实这题不用栈的空间太大,2个字节就够了,因为是重复使用着2个字节,push SP-2 pop SP+2。
dw 0 就够用了,并不存在会越栈的可能。 king嗜血法师 发表于 2011-7-4 17:55 static/image/common/back.gif
你写的我试过了能正常显示结果,可能是你的系统或编译器的问题。
其实这题不用栈的空间太大,2个字节就够了 ...
你的说法让我想起了汇编语言(第一版),当时题目设了dw 0,0,0,0,0
但是第二版却设为了dw 0,0,0,0,0,0,0,0,0,0
我想还是有关系的,我又做了一遍,结果还是很奇怪……
这是我今天又做了一遍的实验:结果如初:
本帖最后由 king嗜血法师 于 2011-7-5 13:19 编辑
感觉是你电脑的问题,建议你直接把SS:SP指向20:10(基本系统不会用到的区域)
如果没错的话,应该是其他什么的修改了那个地址的内容。
你数据段依然那样写,并且观察里面的改动,是否还是00 00 00 00..... king嗜血法师 发表于 2011-7-5 13:15 static/image/common/back.gif
感觉是你电脑的问题,建议你直接把SS:SP指向20:10(基本系统不会用到的区域)
如果没错的话,应该是其他 ...
彻底晕菜鸟……我重装系统,把安全空间做栈,结果数据还是不对…… 本帖最后由 king嗜血法师 于 2011-7-5 21:40 编辑
为了这个居然把系统都重新装了,精神可嘉啊。
栈既然指向了安全空间,像你说的第3次入栈,栈里的数据还是错误的吗?
单步调试,查看栈和数据段的变化,应该不难找到原因的。
king嗜血法师 发表于 2011-7-5 21:37 static/image/common/back.gif
为了这个居然把系统都重新装了,精神可嘉啊。
栈既然指向了安全空间,像你说的第3次入栈,栈里的数据还是错 ...
一步一步循环,就在第三次push后,栈内的数据就是不对…… 纳尼??????? 123640287 发表于 2011-7-6 18:15 static/image/common/back.gif
纳尼???????
{:5_94:}你想表达什么……
这样来实验
用-u
找到这条指令 movax,4c00h的偏移地址
-g 偏移地址
然后
-d 0:0 f
0000:0000xx xx xx xx xx xx xx xx - xx xx xx xx xx xx xx xx
-d cs:0 f
cs : 0000xx xx xx xx xx xx xx xx - xx xx xx xx xx xx xx xx
页:
[1]