pl213311 发表于 2013-11-7 13:03:04

王爽汇编实验五,第六题

图1
图2
在做王爽的实验五的第六小题,我是想把a数据段中的所有数据逆序push到b中,然后就报错,之后找到原因发现是代码的顺序出现错误。。。求大神解答这个问题。。如图,别的代码我都没改,就是把画红圈的代码颠倒了一个位置,结果完全不一样,如果先给ss赋值,后面的ds就无法更改为a的段地址,所以会把psp里面的内容push到b中。。。如果颠倒了一个位置,ds就可以获取a的段地址,所以可以把a中所有数据都push到b里。。我是新手,请问这是什么原因啊,感谢大神!!
(我用debug中的U指令,已经查看了内存中的指令,发现图1后从第四行指令开始都是乱的)


仰望天上的光 发表于 2013-11-7 13:03:05

你的堆栈段只有8个字,却把sp设为32.于是紧跟在堆栈段后面的代码段就悲惨了。当你一push数据,代码段的数据就被修改了。你可以看看你截图中数据段和代码段手段地址是不是只相差1?

羊羽生 发表于 2013-11-8 12:13:22

本帖最后由 羊羽生 于 2013-11-8 12:15 编辑

sp应该是16吧,你才定义了8个字形数据,就是16个字节,mov sp,16(或者10H)

1236 发表于 2013-11-9 15:24:14

入栈是从栈顶开始压入的,你设置的栈顶sp是32,那么数据就被压入到这里喽,不信,你可以d ss:0查看20H的出数据   机器就是机器,你给他什么指令,他就只知道执行

pl213311 发表于 2013-11-11 02:46:53

是是是。。我没考虑到这一点,谢谢啊!我还一直纳闷为啥换个位置就正确了!!差距啊:ton:

pl213311 发表于 2013-11-11 02:47:26

1236 发表于 2013-11-9 15:24 static/image/common/back.gif
入栈是从栈顶开始压入的,你设置的栈顶sp是32,那么数据就被压入到这里喽,不信,你可以d ss:0查看20H的出 ...

嗯嗯,我知道哪错了!谢谢你啦

pl213311 发表于 2013-11-11 02:48:42

仰望天上的光 发表于 2013-11-7 13:03 static/image/common/back.gif
你的堆栈段只有8个字,却把sp设为32.于是紧跟在堆栈段后面的代码段就悲惨了。当你一push数据,代码段的数据 ...

是是是。。我没考虑到这一点,谢谢啊!我还一直纳闷为啥换个位置就正确了!!差距啊:ton:
页: [1]
查看完整版本: 王爽汇编实验五,第六题