张国祥 发表于 2011-7-3 21:23:31

汇编检测点6.1第二题

本帖最后由 张国祥 于 2011-7-5 18:31 编辑

汇编检测点6.1第二题的第二个空,小甲鱼栈顶偏移地址是不是设置错了?

张国祥 发表于 2011-7-3 21:40:11

按道理说,sp应该先设置为36=24H,但是也不对,我单步跟踪了下,第三次入栈时,数据就不对了……

张国祥 发表于 2011-7-3 22:14:56

我在网上找了些资料,明白了第一个疑问,小甲鱼之所以写1ah是因为书的版本不同,小甲鱼的答案是第一版的,而我的书是第二版的
但是,我单步跟踪多次,问题还是没有解决,每到第三次入栈,就会出错,网上说:
   
      估计是栈空间太小,调用Int 21h中断各种压栈把正确结果覆盖了吧!

但是,我把栈调到更大后,还是有问题,望知道的人帮我解惑,谢谢!~

夜读金瓶梅 发表于 2011-7-3 22:32:39

你想转换多少字节的数据 就定义能放多少字节的栈不就得了 你把栈空间设置大了 也许你是找错栈的偏移地址出现数据转换的错误呢

king嗜血法师 发表于 2011-7-4 02:57:12

本帖最后由 king嗜血法师 于 2011-7-4 02:57 编辑

你应该把你写的代码发上来,这样很难明白你的意思。

张国祥 发表于 2011-7-4 10:29:24

夜读金瓶梅 发表于 2011-7-3 22:32 static/image/common/back.gif
你想转换多少字节的数据 就定义能放多少字节的栈不就得了 你把栈空间设置大了 也许你是找错栈的偏移地址出现 ...

绝对没错,你可以单步跟踪试试,而且小甲鱼的源码也不行。

张国祥 发表于 2011-7-4 10:32:04

本帖最后由 张国祥 于 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




king嗜血法师 发表于 2011-7-4 17:55:39

你写的我试过了能正常显示结果,可能是你的系统或编译器的问题。
其实这题不用栈的空间太大,2个字节就够了,因为是重复使用着2个字节,push SP-2 pop SP+2。
dw 0 就够用了,并不存在会越栈的可能。

张国祥 发表于 2011-7-4 19:12:13

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
我想还是有关系的,我又做了一遍,结果还是很奇怪……

张国祥 发表于 2011-7-4 19:13:15

这是我今天又做了一遍的实验:结果如初:




king嗜血法师 发表于 2011-7-5 13:15:45

本帖最后由 king嗜血法师 于 2011-7-5 13:19 编辑

感觉是你电脑的问题,建议你直接把SS:SP指向20:10(基本系统不会用到的区域)
如果没错的话,应该是其他什么的修改了那个地址的内容。
你数据段依然那样写,并且观察里面的改动,是否还是00 00 00 00.....

张国祥 发表于 2011-7-5 18:25:10

king嗜血法师 发表于 2011-7-5 13:15 static/image/common/back.gif
感觉是你电脑的问题,建议你直接把SS:SP指向20:10(基本系统不会用到的区域)
如果没错的话,应该是其他 ...

彻底晕菜鸟……我重装系统,把安全空间做栈,结果数据还是不对……

king嗜血法师 发表于 2011-7-5 21:37:53

本帖最后由 king嗜血法师 于 2011-7-5 21:40 编辑

为了这个居然把系统都重新装了,精神可嘉啊。
栈既然指向了安全空间,像你说的第3次入栈,栈里的数据还是错误的吗?
单步调试,查看栈和数据段的变化,应该不难找到原因的。

张国祥 发表于 2011-7-6 13:51:56

king嗜血法师 发表于 2011-7-5 21:37 static/image/common/back.gif
为了这个居然把系统都重新装了,精神可嘉啊。
栈既然指向了安全空间,像你说的第3次入栈,栈里的数据还是错 ...

一步一步循环,就在第三次push后,栈内的数据就是不对……

123640287 发表于 2011-7-6 18:15:08

纳尼???????

张国祥 发表于 2011-7-6 20:54:42

123640287 发表于 2011-7-6 18:15 static/image/common/back.gif
纳尼???????

{:5_94:}你想表达什么……

demon 发表于 2011-7-8 16:29:07

这样来实验
用-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]
查看完整版本: 汇编检测点6.1第二题