鱼C论坛

 找回密码
 立即注册
查看: 4845|回复: 5

[争议讨论] 关于assume cs:code,ds:data,ss.stack的一点问题

[复制链接]
发表于 2011-11-5 10:16:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我知道伪指令是编译器用来认识的,可是cpu已经通过指令 mov ax,data  mov ds,data  mov ax,stack
mov ss,ax  指定的各个指定的段与相应的段联系起来 ,可编译器为什么还要通过题目的伪指令将他们联系起来?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
头像被屏蔽
发表于 2011-11-5 10:26:09 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-5 13:11:31 | 显示全部楼层
:L 不知道 假设嘛。。
我直接不用assume

开始就code segment 都正常编译运行调试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-7 05:05:17 | 显示全部楼层
本帖最后由 kane080824 于 2011-11-7 05:07 编辑

我打个比喻吧:比如电脑是你的一个佣人,你呢又很懒,有天回家对佣人说,我将要写作业你把准备工作给我做好,给我找定一个写作业的桌子(即在内存里开辟出数据段或栈段等等),然后上面给我放好课本,笔,作业本等等(段中的数据),这些做好后,你就可以开始写作业了.
  回过头来说,assume ds:data,data segment db ...ends的含义是:让计算机做好准备工作,让它给你开辟一段内存空间,里面预先放好数据,并且告诉它,你给我指定的这个段的段地址以后是要保存在ds里面的.
于是你开始写作业了,中途你会去倒点水喝或者出去放松下,为了防止自己回来找不到写字桌,你就干脆把地址保存起来,于是(mov ax,data  mov ds,ax),这样你来回n次寻你的工作区,你都能找到,这是你自己要做的事,不是佣人做的,所以在源程序里面要先写这两句,而assume ...这些不用你操心,是编译器让计算机预先处理的(当然也是你让编译器做滴,但他不在你的工作内容中,是佣人的工作而已,所以不位于程序里面),你要做的就是刚开始就保存一下段地址,这个段地址是多少由佣人提供的,但保存是需要你自己保存的,保存在哪里也是你自己定的,因为你一开始就告诉assume ds:data,意思是对佣人说,以后我要保存地址是保存在ds里,如果我弄错了,你就提醒我一下,佣人的作用是提示你data地址和ds保存的对应关系而已
  有天你良心发现,勤快了,对佣人说你休息下,准备工作我自己做了,于是乎:mov ax,2000H  mov ds,ax... 就直接热火朝天干起来了,因为佣人休息了,所以你只好自己给出桌子的位置,比如段地址2000H,然后照例保存段地址在ds中,可是笔,书本什么的还没没有,咋办,那还用说,开始给数据吧,比如mov bx,0
    mov word ptr [bx].0,0BEH
    mov word ptr [bx].2,6h
    mov word ptr [bx].4,0     -   ----给段内赋一些数据等价于dw BE,00,06,00,00,00

这样你的桌子上就有东西了,即段中就有了数据,那么这些工作本来不就是assume....事先做的吗

为了说明问题,罗素很多,不知道大概意思是否理解,当然一般还是建议用编译器做预处理,好处多多.
本人是新手,说错了莫怪
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-11-7 11:17:08 | 显示全部楼层

非常感谢,明白了!以后多多交流 。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-9 11:21:14 | 显示全部楼层
kane080824 发表于 2011-11-7 05:05
我打个比喻吧:比如电脑是你的一个佣人,你呢又很懒,有天回家对佣人说,我将要写作业你把准备工作给我做好,给我 ...

顶一下,比喻很生动
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-19 10:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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