鱼C论坛

 找回密码
 立即注册
查看: 1829|回复: 6

王爽 实验5 关于assume不理解

[复制链接]
发表于 2014-2-16 23:12:33 | 显示全部楼层 |阅读模式
10鱼币
assume cs:code,ds:data,ss:stack
这里不是已经把data代码段定义的数据,放入一个数据段,然后用ds寄存器指向它了
可实际编译结果并不是这样
而是要通过代码
mov ax,data
mov ds,ax

来绑定ds和这段数据


这样的话,ds:data还有什么意义呢?
我干脆assume code,data,statck
声明3个段好了,前缀cs、ds、ss干嘛用呢

最佳答案

查看完整内容

assume(假设) 是伪代码呀! 伪代码是没有机器码的,也就不存在对CPU、寄存器任何的操作。伪代码是写给编译器看的。不同的编译器伪代码也不是完全一样,个人感觉说是写给编译器看的,还不如说成是写给自己看的。增加程序的可读性,告诉自己cs是代码段、ds是数据段、ss是栈段。和你说的一样,不声明也没有关系的,也能通过编译的。但是可能会有警告信息“没有找到栈段”就是你代码中用的栈却没有声明,怕你栈段和别的段冲突。你看 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-16 23:12:34 | 显示全部楼层
assume(假设) 是伪代码呀! 伪代码是没有机器码的,也就不存在对CPU、寄存器任何的操作。伪代码是写给编译器看的。不同的编译器伪代码也不是完全一样,个人感觉说是写给编译器看的,还不如说成是写给自己看的。增加程序的可读性,告诉自己cs是代码段、ds是数据段、ss是栈段。和你说的一样,不声明也没有关系的,也能通过编译的。但是可能会有警告信息“没有找到栈段”就是你代码中用的栈却没有声明,怕你栈段和别的段冲突。你看到后面可以发现很多王爽的例题中就没有声明ds、ss。他偷懒啦~{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-17 10:39:43 | 显示全部楼层
assume 的作用只是把寄存器和相应的名称关联起来, 并没有往寄存器放入具体的内容, 在代码段中必须自己放入的哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-17 12:06:15 From FishC Mobile | 显示全部楼层
上面说得很对。伪指令没机器码头不是汇编指令。写给编译器的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-17 12:39:50 | 显示全部楼层
assume ds:data只是告诉编译器ds与data段关联,而段地址送给ds是必须要通过通用寄存器中转。、·
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-17 14:55:49 | 显示全部楼层
楼主啊,请你注意,你随便写个汇编代码然后用";"注释掉"assume"试试
我家用的masm5.0,编译无法通过,并且没有生成.obj文件,论坛不能传bmp文件,所以没法给你看我测试的结果。
不过你选的正确答案这位朋友说的可能有些口误。
assume虽然是伪指令,不生成机器码,但也不是可有可无的,而是必须有的。
assume的作用是把段和段寄存器关联起来。具体的说,就是系统在初始化分配空间的时候用的。
每个段根据其长度会分配空间。
不知道你看没看第六章的教程。系统给段分配空间,不是用多少给多少的。
比如说,你的data用的dw,那么你有N个数据就有N个字,一个字就是16位,那么系统非配给你这个段的空间大小是16*(N/16+1),而不是N。
在分配空间的同时,系统在exe头文件中会进行关联。但是只有机器码才能操作CPU执行指令。
所以运行时系统并不会把段地址直接分配给段寄存器,所以需要手动用
mov  ax,data
mov  ds,ax
这样的指令手动将地址送入段寄存器。
另外,这是我看小甲鱼的视频看到这一段自己看各类书籍和baidu各种答案自己思考的结果,不一定对,不对的地方也欢迎来纠正


最后,做个声明:我个人是技术控,只对纯技术的东西感兴趣
                            言语有冒犯提供答案的朋友的地方请谅解,本人"绝对!!!"没有其他的意思。

评分

参与人数 1鱼币 +5 贡献 +5 收起 理由
vvqboy + 5 + 5 哦哦,原来这样,非常感谢

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-19 16:09:51 | 显示全部楼层
intel的汇编语法过于死板了! 别的汇编根本不需要assume伪指令
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-29 23:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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