80x86汇编:MOV__CS,AX,是对?还是错?
标签:
it |
分类: 80x86 |
这个问题,是网友在百度知道上面提出来的:
https://zhidao.baidu.com/question/441939103
MOV CS,
AX,这条指令,是用 AX 对代码段寄存器赋值。
在 8088/8086
汇编语言课程中,往往都会讲到:CS,不能当做目的操作数。
很多人都信了。
不信的,就用 MASM
编译一下,出现错误提示,也就不得不信了。
问题就出在这里!!!
是编译软件认为,不能用 CS
作为目的操作数。
编译不过去,我们就以为是自己的程序有错?
其实,是编译软件有毛病。
换一个编译软件,试试看,CS,就可以当做目的操作数。
就用微软的 DEBUG
吧,编译如下所示:
可见,MOV CS,
AX,是正确的指令,可以进行编译。
编译出来的机器码是 8EC8。
如果先填入机器码,然后再反汇编,也可以成立。
这就是说,MOV CS,
AX,并没有错,CPU 可以执行该指令。
呵呵,谁说它是错的?你才是错的。
关键是你不会用。
很多写书的作者,也是以讹传讹,误导初学者。
如果你需要这条指令,写成 MOV CS,
AX,确实是会报错。
但是,你写成:DB 8EH,
0C8H,这不就行了?
------------------------
另外还有一个题目:
https://zhidao.baidu.com/question/433676679403976364
微机原理中
段寄存器可以作目的操作数吗?还是只有cs不能?
--都可以。
MOV DS 2000H对吗?
--错。
--源操作数,不能是立即数。
本回答由网友推荐 赞 3、踩 58
评论(2)
依然潇洒 2018-7-21
15:13
你还理直气壮,误人子弟,
CS与IP共同使用,指向下一条将要执行的地址,不能做目的操作数。
如果CS可以随便改,那操作系统还不乱套?
做而论道 2017-6-15
16:10
竟然有 28 人“踩”本答案!--现在已经是 58
人了!
呵呵,一帮傻帽!不知道本答案,是唯一正确的吗?
说明:
做而论道,是本博主在百度开博时用的网名。但是,这个昵称,在新浪这里,不让用。
只能另外起名为:黄渤之间,以纪念行走多年的地方。

加载中…