检测点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用作数据传送。
:titter::titter::titter::titter::titter::titter::titter::titter::titter:笑笑更健康! 本帖最后由 丑小七 于 2014-7-16 23:34 编辑
学习学习!!! 是ss:33~ss:34吧 明白了,谢谢楼主 第二题的start那边mov sp,36 36是怎么来的
36是把开辟的栈空间加上上面的数据开辟的空间就得出来了 {:10_257:}有道理 我觉得应该是 mov sp, 37 或者 mov sp, 25H, 因为第一次使用栈为空, 那么这个时候栈顶指针 sp 应该是指向栈底偏移位置的下一个位置才对。求鉴定。 应该是ss:30-ss:31 {:10_261:}为什么我觉得答案改成mov sp,18h也可以呢。奇了怪咧。实际测试可行。(6.1(2)) 本帖最后由 ranbo_q 于 2017-5-22 13:14 编辑
刚才一直在想为什么不是3725H,原来字节是从地址0开始的,也就是说0~35 里面有36个字节,因为栈空,所以指向下一个字节单元,36 kyowjw01 发表于 2017-5-1 15:48
为什么我觉得答案改成mov sp,18h也可以呢。奇了怪咧。实际测试可行。(6.1(2))
你给的栈空间大小完全够装下 16个字节,------18H ----->sp= 24结果是和原来结果一样
题目要求是规定栈空间为10个字单元,也就是20个字节单元,sp指向 ---->36 数据空间8*2个,栈空间是10*2 顶楼主 标准答案! 楼主威武 答案正确。 至于为什么是36,24H,因为开始是从0开始的。所以是36.一共就不到40个数,慢慢查{:10_279:}一下就知道了。 飞翔的石牌人 发表于 2016-12-2 20:45
我觉得应该是 mov sp, 37 或者 mov sp, 25H, 因为第一次使用栈为空, 那么这个时候栈顶指针 sp 应该是指向 ...
我也感觉是18个字,36个字节,应该指向栈顶下一个,应该是mov sp,37求鉴定,哈哈, ranbo_q 发表于 2017-5-22 13:12
刚才一直在想为什么不是3725H,原来字节是从地址0开始的,也就是说0~35 里面有36个字节,因为栈空,所以 ...
哦哦哦,原来是这样啊
飞翔的石牌人 发表于 2016-12-2 20:45
我觉得应该是 mov sp, 37 或者 mov sp, 25H, 因为第一次使用栈为空, 那么这个时候栈顶指针 sp 应该是指向 ...
原来是从0开始,不好意思,打扰了
页:
[1]
2