对于伪指令和指令,我还是很明白的。既然assume定义过段的类型了,编译后cpu就应该知道将各段地址装入对应的段寄存器啊,代码段不就是自动装入的么 - 3 -
追答我懒汉你看没有看完,或是没有理解,也可能是一楼误导你了,伪指令只是编译器中定义的段,这根本不是运行程序中的段或段装入,当然还还可以这样理解:在开发的应该程序中根本不存在“段”,段只是人为的一个划分,数据只是从DS:SP中取出的,他并不管你哪个是段还是不是段,且定义有相应的操作,但不可能半段地址直接装入到DS中,因为运行时,不同的运行所占用的地址是不同的,要装入段地址的是相对于内存的绝对地址,上次运行与下次运行同一程序可能就会使用不同的内址地址。而定义段只是一个相同地址,也就是说,数据相对于运行程序所占用的内存的地址,但该应用程序会每次装入不同的内存地址。换句话来说,mov ax,data这些语句是在程序运行时才开始运行,而不是程序装载时直接运行的。这种情况下,比尔又能如何?
现在一个问题是:相对地址在程序未运行时如何将程序装入内存后的绝对地址装载?显然是不可能的!
assume定义段的作用不就是告诉cpu哪个段对应哪个段寄存器么,代码段的地址不是没有手动加载么,数据段为什么就要多此一举呢
追答assume,是伪指令,是对编译软件下的命令,没有给CPU下命令。
程序开始时,DS需要用指令来装入段地址,CS不需要指令来装入段地址。
这些指令、伪指令的用法,都是当年微软公司规定的方法、步骤。
比尔●盖茨当年还很年轻,没有想到这些;
微软后来研发出来的,在WINDOWS环境下的编程软件,就没有这些让人质疑的地方。
我们作为使用者,按照它们规定的做法来做,就行了,不理解的,也不要瞎猜。
某些人的留言,好像是很懂,其实说的都是言而无据的话,误导他人而已。