鱼C论坛

 找回密码
 立即注册
查看: 2399|回复: 18

王爽汇编语言课后题检测点3.2的两个题谁能详细说一下吗?

[复制链接]
头像被屏蔽
发表于 2012-10-21 13:07:02 | 显示全部楼层 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-10-21 13:55:15 | 显示全部楼层
帮顶!!!!!!!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-10-21 14:06:04 | 显示全部楼层
啥内容了。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-10-21 14:15:08 | 显示全部楼层
题发出来啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-10-21 14:24:55 | 显示全部楼层
1题:就是让你建立一个栈段,然后依次压栈即可实现
mov  ax, 2000H
mov  ss,  ax
mov  sp,  16
2题:同理,只不过是出栈到ds的数据段去
mov  ax, 1000H
mov  ss, ax
mov  sp, 16
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-10-21 14:41:37 | 显示全部楼层
楼上正解!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
头像被屏蔽
 楼主| 发表于 2012-10-21 15:03:11 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
头像被屏蔽
 楼主| 发表于 2012-10-21 15:07:36 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-10-21 15:59:35 | 显示全部楼层
你们理解栈的原理吗?,他就像一个水杯,首先倒进去的水是先到杯底的,也就是先压的1000:0000的数据会压到底部去,也就是sp指的位置2000:000E,再压数据依次往上叠,这就叫压栈,一句话栈中的数据先进后出。跟我们往开口容器放东西的原理是一致的。

补充内容 (2012-10-21 16:07):
你mov ss,  ax就是定下了栈的段地址。
你们mov  sp, 16 就是确定了栈的容积或者深度,sp指向ss:10H,压一个字型数据就会指向ss:0EH,明白没有?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
头像被屏蔽
 楼主| 发表于 2012-10-21 16:23:18 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
头像被屏蔽
 楼主| 发表于 2012-10-21 16:37:02 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-10-21 16:46:25 | 显示全部楼层
yunfei77 发表于 2012-10-21 16:37
比如说:
int a,b,c;
a=3;

寄存器SS是堆栈段,涉及到堆栈操作pop和push时,自动引用SS内的值作为段地址

补充内容 (2012-10-21 16:53):
这是有关‘寻址方式’的内容
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-10-21 16:54:49 | 显示全部楼层
yunfei77 发表于 2012-10-21 16:23
谢谢说得这么详细和比方啊,这些是容易理解。先进后出。我只是不知道为什么(书上的图来说)左边的数据为 ...

push [0]   push就是压栈指令  [0]其实是ds:0000 这个内存地址,ds因为是默认的数据段段地址寄存器,可以省略,这个内存地址对应的字型数据是什么呢?很明显是放在数据段中的0123,因为这个程序头两句说明了ds的段地址是1000H,push [0], 就是将ds:0000H以及0001H地址的这个字节数据通过压栈的方式压到栈中,栈设置在哪里?题目要求我们压到20000H-20000FH中,我们就把栈的段地址设为2000H,也就是 mov ax, 2000H  mov ss, ax, 这两句来实现,(小甲鱼说过,ss是害羞的小姑娘,是不能不能直接赋值的,只有通过ax这个媒人寄存器来间接赋值。)而我们看到10000H到1000FH,是16个字节,因此我们设sp的时候,16就够压了,所有有一句mov sp, 16,定下了栈的栈顶在什么位置哦,OK,现在总明白了吧。

补充内容 (2012-10-21 17:26):
C语言 指针明白吧, 这个SP其实就是指针差不多,栈中未压数据时是指向栈顶得的,压相应字节,移相应的位置,压一个字型数据,就移两格,因此sp就是告诉你压到哪, [0]就是告诉你,要压的数据从哪来。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-10-21 18:08:33 | 显示全部楼层
顶了   都是会的  我这些不懂的   请教了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
头像被屏蔽
 楼主| 发表于 2012-10-22 17:16:55 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
头像被屏蔽
 楼主| 发表于 2012-10-22 17:17:56 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-10-22 18:11:37 | 显示全部楼层
push[0]是将段地址为1000偏移地址为0的数据压入栈吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-10-22 18:21:07 | 显示全部楼层
yunfei77 发表于 2012-10-22 17:16
跟据你们的总结,大概是这样子理解的,你看我理解得对不对??

是的,汇编里面,不指明段地址,只有偏移地址的时候,默认从DS寄存器去读取的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-10-22 22:54:57 | 显示全部楼层
yunfei77 发表于 2012-10-22 17:17
你看我15楼总结得对不对??是不是这样去理解?

对了,这个我也是刚学过
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 12:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表