trump 发表于 2014-6-25 19:47:51

检测点6.1

(1) 下面的程序实现依次用内存0:0~0:15单元中的内容改写程序中的数据,完成程序:
assume cs:codesg

codesg segment
      
      dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
      
start:      mov ax,0
                mov ds,ax
                mov bx,0
               
                mov cx,8
               
          s:mov ax,
                mov cs:,ax
                add bx,2
                loop s
      
                mov ax,4c00h
                int 21h

codesg ends

end start



(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                        ;10个字单元用作栈空间
      
start:      mov ax,cs
                mov ss,ax
                mov sp,36
               
                mov ax,0
                mov ds,ax
                mov bx,0
                mov cx,8
               
          s:push
                pop cs:
                add bx,2
                loop s
      
                mov ax,4c00h
                int 21h

codesg ends

end start


其实栈空间只使用了1个字单元ss:22~ss:23用作数据传送。

Htbs、 发表于 2014-6-25 20:04:12

:titter::titter::titter::titter::titter::titter::titter::titter::titter:笑笑更健康!

丑小七 发表于 2014-7-16 23:29:57

本帖最后由 丑小七 于 2014-7-16 23:34 编辑

学习学习!!!

lkxlqd 发表于 2015-4-4 10:40:35

是ss:33~ss:34吧

fast 发表于 2015-6-21 03:06:50

明白了,谢谢楼主

薄情寡义 发表于 2015-7-5 12:45:17

第二题的start那边mov sp,36 36是怎么来的

初学者c123 发表于 2015-9-28 19:29:29

36是把开辟的栈空间加上上面的数据开辟的空间就得出来了

爱上小刺猬 发表于 2016-1-11 19:59:20

{:10_257:}有道理

飞翔的石牌人 发表于 2016-12-2 20:45:55

我觉得应该是 mov sp, 37 或者 mov sp, 25H, 因为第一次使用栈为空, 那么这个时候栈顶指针 sp 应该是指向栈底偏移位置的下一个位置才对。求鉴定。

huhaijun5 发表于 2017-4-20 11:39:40

应该是ss:30-ss:31

kyowjw01 发表于 2017-5-1 15:48:05

{:10_261:}为什么我觉得答案改成mov sp,18h也可以呢。奇了怪咧。实际测试可行。(6.1(2))

ranbo_q 发表于 2017-5-22 13:12:21

本帖最后由 ranbo_q 于 2017-5-22 13:14 编辑

刚才一直在想为什么不是3725H,原来字节是从地址0开始的,也就是说0~35 里面有36个字节,因为栈空,所以指向下一个字节单元,36

ranbo_q 发表于 2017-5-22 13:16:52

kyowjw01 发表于 2017-5-1 15:48
为什么我觉得答案改成mov sp,18h也可以呢。奇了怪咧。实际测试可行。(6.1(2))

你给的栈空间大小完全够装下 16个字节,------18H ----->sp= 24结果是和原来结果一样
题目要求是规定栈空间为10个字单元,也就是20个字节单元,sp指向 ---->36

CHWEI陈宏伟 发表于 2017-5-31 21:30:03

数据空间8*2个,栈空间是10*2

BellXu 发表于 2017-7-10 20:08:19

顶楼主 标准答案!

蜗牛狂飙 发表于 2017-7-17 13:22:31

楼主威武

铛铛 发表于 2017-8-5 21:23:53

答案正确。 至于为什么是36,24H,因为开始是从0开始的。所以是36.一共就不到40个数,慢慢查{:10_279:}一下就知道了。

杨kkk 发表于 2018-1-14 15:48:28

飞翔的石牌人 发表于 2016-12-2 20:45
我觉得应该是 mov sp, 37 或者 mov sp, 25H, 因为第一次使用栈为空, 那么这个时候栈顶指针 sp 应该是指向 ...

我也感觉是18个字,36个字节,应该指向栈顶下一个,应该是mov sp,37求鉴定,哈哈,

杨kkk 发表于 2018-1-14 15:49:53

ranbo_q 发表于 2017-5-22 13:12
刚才一直在想为什么不是3725H,原来字节是从地址0开始的,也就是说0~35 里面有36个字节,因为栈空,所以 ...

哦哦哦,原来是这样啊

杨kkk 发表于 2018-1-14 15:50:33

飞翔的石牌人 发表于 2016-12-2 20:45
我觉得应该是 mov sp, 37 或者 mov sp, 25H, 因为第一次使用栈为空, 那么这个时候栈顶指针 sp 应该是指向 ...

原来是从0开始,不好意思,打扰了
页: [1] 2
查看完整版本: 检测点6.1