鱼C论坛

 找回密码
 立即注册
查看: 2887|回复: 4

[已解决]为何需要 自己主动将 datasg赋值给ds 而cs则不用??

[复制链接]
发表于 2015-6-21 12:24:02 | 显示全部楼层 |阅读模式

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

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

x
assume cs:codesg,ds:datasg

datasg segment
        db 8 dup(2)
datasg ends



codesg segment
        Start:
                mov ax,datasg
                mov ds,datasg       
               
codesg ends

        end Start

请问各位一个小问题

为何 程序一开始执行时 ds的值不是等於 datasg  
而是必須要
mov ax,datasg
mov ds,datasg       
這樣子才行

但是 同樣在assume那裡假設過的 codesg
程序一开始执行时,cs就是等於codesg了  
不必再做赋值的动作

为何??


最佳答案
2015-6-21 22:28:58
因为程序执行的入口是start啊,程序编译时cs:ip会指向它。code段才是机器硬指令,其他段都是编译器翻译的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-6-21 22:28:58 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
因为程序执行的入口是start啊,程序编译时cs:ip会指向它。code段才是机器硬指令,其他段都是编译器翻译的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-6-22 08:58:39 | 显示全部楼层
you_shou 发表于 2015-6-21 22:28
因为程序执行的入口是start啊,程序编译时cs:ip会指向它。code段才是机器硬指令,其他段都是编译器翻译的

那请问一下

assume的功用是啥么啊??

我看书本里面,有時有打出

datasg segment
      
datasg ends

但在assume卻沒假設 ds:datasg

但还是依然能执行

所以我想问一说 assume的功用那底是啥??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-6-23 12:44:19 | 显示全部楼层
酒鬼 发表于 2015-6-22 08:58
那请问一下

assume的功用是啥么啊??

网上找的:编写汇编语言的程序,要用编译软件来编译。

assume,就是通知编译软件的,说明段寄存器和定义段的关系。

编译软件,比较弱智,你随便瞎写一个对应关系,它都辨别不出来真假。

程序正确与否,全靠 MOV...这种针对 CPU 的指令,和 ASSUME 基本无关。

就不用琢磨它了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-7-30 20:20:34 | 显示全部楼层
assume cs:codesg,ds:datasg是给编译器看的
mov才是汇编指令,才是给cpu看得
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-27 13:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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