忽忘我 发表于 2012-4-25 20:37:22

第六章 检测点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

wouiwhbn 发表于 2012-7-30 19:22:19

24h是16进制,36是十进制

哈喇子淌一手 发表于 2012-8-24 23:25:21

那是因为栈为空的时候,栈顶应该指向sp+2(字),所以不是32,是36

Seandor 发表于 2012-8-25 17:37:43

木有发现这个刚好占36字节吗?dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
dw 0,0,0,0,0,0,0,0,0,0 mov sp, 24h是为了使栈顶指针指向栈底。

邪恶的非非 发表于 2012-8-25 20:24:30

Seandor 发表于 2012-8-25 17:37 static/image/common/back.gif
木有发现这个刚好占36字节吗?mov sp, 24h是为了使栈顶指针指向栈底。

这道题目的意思可不可以这样理解啊

将内存0:0~0:15中的内容(这个内容是系统随机的,题目没告诉)给程序中数据(也就是dw的内容)
是不是这个意思啊

Seandor 发表于 2012-8-25 21:45:29

邪恶的非非 发表于 2012-8-25 20:24 static/image/common/back.gif
这道题目的意思可不可以这样理解啊

将内存0:0~0:15中的内容(这个内容是系统随机的,题目没告诉)给程 ...

对啊,内存0:0~0:15中的内容没人知道。

邪恶的非非 发表于 2012-8-27 10:21:50

Seandor 发表于 2012-8-25 21:45 static/image/common/back.gif
对啊,内存0:0~0:15中的内容没人知道。

前天靠着百度找了些答案,把题目完成了,今天想来温习下,尼玛到循环那里的时候就做不来了!
看来我还是没怎么弄明白push和pop啊,感觉这程序运行的原理始终没搞明白啊~。
重新复习一下push和pop   对了哥们,有什么好的建议没?(我自己是一直看书学的,没怎么去看小鱼的教程,感觉看书比看教程速度快很多啦!)

Seandor 发表于 2012-8-27 11:32:34

邪恶的非非 发表于 2012-8-27 10:21 static/image/common/back.gif
前天靠着百度找了些答案,把题目完成了,今天想来温习下,尼玛到循环那里的时候就做不来了!
看来我还是 ...
看书确实很快,但是看完一章后最好还是看下视频加深理解(视频可以快进看啊),另外书上的检测点,试验什么的都要亲自动手去做。这样学习已经很快了,我花了一个月学完,不算快,但掌握的还不错。

邪恶的非非 发表于 2012-8-27 12:00:40

Seandor 发表于 2012-8-27 11:32 static/image/common/back.gif
看书确实很快,但是看完一章后最好还是看下视频加深理解(视频可以快进看啊),另外书上的检测点,试验什 ...

呵呵~谢了{:5_102:}

阿飞-祁磊 发表于 2012-12-20 21:12:29

24H是为了指向栈底的,但我觉得这道题的push和pop在整个循环中连续使用,没有必要使用这么大的栈段,两个字节做栈应该就够了吧。

laoqian 发表于 2012-12-20 21:39:50

数据段一共定义了18各字单元,占用36(24H)个字节的内存单元,内存地址为CS:0000H~CS:0023H,由于ss=cs,所以栈底单元内存地址为ss:0024H,即sp=24H。

shdfsbgfjks 发表于 2012-12-21 00:22:31

我认为36确实多了2个字,32就可以了,不过堆栈可以用不完的,剩下俩个字可以不用
页: [1]
查看完整版本: 第六章 检测点6.1(2)