第六章 检测点6.1(2)
检测点6.1(2)下面的程序实现依次用内存0:0~0:15单元中的内容改写程序中的数据,数据的传送用栈来进行。栈空间设置在程序内。完成程序:
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
start:mov ax, codesg ;或mov ax, cs
mov ss,ax
mov sp, 24h ;或mov sp, 36 // 主要是这个的 24H 是怎么得来的求大牛解释
mov ax,0
mov ds,ax
mov bx,0
mov cx,8
s:push
pop cs: ;或 pop ss:
add bx,2
loop s
mov ax,4c00h
int 21h
codesg ends
end start
24h是16进制,36是十进制 那是因为栈为空的时候,栈顶应该指向sp+2(字),所以不是32,是36 木有发现这个刚好占36字节吗?dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
dw 0,0,0,0,0,0,0,0,0,0 mov sp, 24h是为了使栈顶指针指向栈底。 Seandor 发表于 2012-8-25 17:37 static/image/common/back.gif
木有发现这个刚好占36字节吗?mov sp, 24h是为了使栈顶指针指向栈底。
这道题目的意思可不可以这样理解啊
将内存0:0~0:15中的内容(这个内容是系统随机的,题目没告诉)给程序中数据(也就是dw的内容)
是不是这个意思啊 邪恶的非非 发表于 2012-8-25 20:24 static/image/common/back.gif
这道题目的意思可不可以这样理解啊
将内存0:0~0:15中的内容(这个内容是系统随机的,题目没告诉)给程 ...
对啊,内存0:0~0:15中的内容没人知道。 Seandor 发表于 2012-8-25 21:45 static/image/common/back.gif
对啊,内存0:0~0:15中的内容没人知道。
前天靠着百度找了些答案,把题目完成了,今天想来温习下,尼玛到循环那里的时候就做不来了!
看来我还是没怎么弄明白push和pop啊,感觉这程序运行的原理始终没搞明白啊~。
重新复习一下push和pop 对了哥们,有什么好的建议没?(我自己是一直看书学的,没怎么去看小鱼的教程,感觉看书比看教程速度快很多啦!) 邪恶的非非 发表于 2012-8-27 10:21 static/image/common/back.gif
前天靠着百度找了些答案,把题目完成了,今天想来温习下,尼玛到循环那里的时候就做不来了!
看来我还是 ...
看书确实很快,但是看完一章后最好还是看下视频加深理解(视频可以快进看啊),另外书上的检测点,试验什么的都要亲自动手去做。这样学习已经很快了,我花了一个月学完,不算快,但掌握的还不错。 Seandor 发表于 2012-8-27 11:32 static/image/common/back.gif
看书确实很快,但是看完一章后最好还是看下视频加深理解(视频可以快进看啊),另外书上的检测点,试验什 ...
呵呵~谢了{:5_102:} 24H是为了指向栈底的,但我觉得这道题的push和pop在整个循环中连续使用,没有必要使用这么大的栈段,两个字节做栈应该就够了吧。 数据段一共定义了18各字单元,占用36(24H)个字节的内存单元,内存地址为CS:0000H~CS:0023H,由于ss=cs,所以栈底单元内存地址为ss:0024H,即sp=24H。 我认为36确实多了2个字,32就可以了,不过堆栈可以用不完的,剩下俩个字可以不用
页:
[1]