加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

80x86汇编:MOV__CS,AX,是对?还是错?

(2018-12-29 23:07:57)
标签:

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 人了!
呵呵,一帮傻帽!不知道本答案,是唯一正确的吗?


说明:
做而论道,是本博主在百度开博时用的网名。但是,这个昵称,在新浪这里,不让用。
只能另外起名为:黄渤之间,以纪念行走多年的地方。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有