哮月苍狼 发表于 2011-7-22 21:40:22

第六章程序6.3求解

本帖最后由 哮月苍狼 于 2011-7-25 08:49 编辑

书上128页,程序6.3
assume cs:codesg
codesg segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h      (0-f)
dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0                                             (10-2f)
start:mov ax,cs
   mov ss,ax
   mov sp,30h
甲鱼老师的视频第二行的DW是8个字
assume cs:codesg
codesg segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h      (0-f)
dw 0,0,0,0,0,0,0,0                                 (16-31)
start:mov ax,cs
   mov ss,ax
   mov sp,32h
甲鱼老师说两行DW的大小是(0-F)(16-31),所以SP=32
那按照这种思路书上的程序6.3,他的SP为什么会等于30呢?按甲鱼老师说的,应该等于42吧?
书上下面的讲解是CS:10--CS:2F的内存空间当栈使用,栈空时,SS:SP指向栈底,2E+2=30,所以书上认为SP=30,我就想不明白我一直认为SP应该是42,作者怎么得出30这个结论的?
如果按照作者的思路那么甲鱼老师的第二行DW大小是(10-1F),1E+2=20,那么甲鱼老师所写的程序SP就应该等 于20吧,为什么又会是32呢?
这两个疑问我很是头疼!!!!!!

linha0 发表于 2011-7-22 22:10:44

你应该在Debug中仔细看看栈的变化,看看栈的变化对程序的功能有没有影响!{:1_1:}
指向栈底,应该算是一个很标准的做法。但是,标准不代表不能变化………………:lol
为什么一定要给自由的思想附加上“枷锁”呢!:loveliness:
如果,实在是转不过弯来,你应该亲自问问小甲鱼!想多了也没用:Q

tmlnsc 发表于 2011-7-24 18:00:14

那按照这种思路书上的程序6.3,他的SP为什么会等于30呢?按甲鱼老师说的,应该等于42吧?
这一句请你注意:它是30h,而不是30,加了h表示是十六进制.要用十进制的话应该是48,也不是你说的42.

tmlnsc 发表于 2011-7-24 18:05:53

书上下面的讲解是CS:10--CS:2F的内存空间当栈使用,栈空时,SS:SP指向栈底,2E+2=30,所以书上认为SP=30,我就想不明白我一直认为SP应该是42,作者怎么得出30这个结论的?
如果按照作者的思路那么甲鱼老师的第二行DW大小是(10-1F),1E+2=20,那么甲鱼老师所写的程序SP就应该等 于20吧,为什么又会是32呢?
这两个疑问我很是头疼!!!!!!

说来说出,产生这几个问题的关键是你没有把十六进制和十进制的转换搞清楚,sp等于30H,不是30
第二行dw的大小是32,那是十进制的32,你看它的后而没加h,你要把它写成20也对,但是要加上h,写成20h.
十六进制的20h不就是十进制的32么?

现在不知你明白了没有?
页: [1]
查看完整版本: 第六章程序6.3求解