[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 叁 - 位 指令 | 1. NOT 指令

注意:本文经过原作者授权转译,转载请标明出处

原文地址:http://mrjester.hapisan.com/04_MC68/Sect03Part01/Index.html

条件允许建议阅读原文,网上非中文资料还是较多,当作锻炼英文岂不美哉
翻译若有不足之处欢迎批评指正

译文:

"我认为自动演奏钢琴是电脑爸爸的爸爸,是我们如今全部梦魇的祖先,是黑白分明无所逃避的二进制世界的开端" ---- 威廉 盖迪斯 (William Gaddis, 1922-1998),美国最重要的后现代主义作家之一

简介

NOT () - 逻辑互补数

这条指令能够把目的操作数里的每一都翻转。原本是 0 的会变成 1,原本是 1 的会变成 0

例子

第一章第一节 我们提到的第一件事就是二进制和数据长度,你应该知道,一个有两种状态: 0 和 1,这条指令的目的就是把所有的都设置为其相反的值,就是翻转了结果

比如:

    not.b      d0

目的操作数d0,比如现在d0的内容是FE800174,由于指令中用.b指明了有效长度是字节,所以只有后一个字节会被修改 (你应当很清楚这一点了)。最后一个字节74,让我们来康康它的二进制是什么样:

        0111 0100

        |||| ||||
        VVVV VVVV

        1000 1011

由上可知,74的二进制是0111 0100,经过指令执行后,所有的0都变成了1,所有的1都变成了0,所以0111 0100就变成了1000 1011

1000 1011换算成十六进制8B,所以写入到d0之后,d0的内容是FE80018B

同样的这个指令也可以被用在内存上,比如:

    not.w      $000048C0

这条指令会把内存中地址为000048C0000048C1处的都翻转过来,比如指令执行前内存内容是这样的:

偏移量 0 1 2 3 4 5 6 7 8 9 A B C D E F
...
000048B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
000048C0 22 35 78 88 90 00 00 00 00 00 00 00 00 00 00 11
000048D0 00 00 00 00 00 00 00 00 00 43 F8 8F EE CC C0 00
000048E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
...

所以读取到的2235,在二进制中是0010 0010 0011 0101not指令会把都翻转过来:

        0010 0010 0011 0101

        |||| |||| |||| ||||
        VVVV VVVV VVVV VVVV

        1101 1101 1100 1010

1101 1101 1100 1010换算成十六进制DDCA,所以它被写回到内存中:

偏移量 0 1 2 3 4 5 6 7 8 9 A B C D E F
...
000048B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
000048C0 DD CA 78 88 90 00 00 00 00 00 00 00 00 00 00 11
000048D0 00 00 00 00 00 00 00 00 00 43 F8 8F EE CC C0 00
000048E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
...

当然,这个指令也可以通过地址寄存器间接寻址而用到内存中:

    not.w      (a0)
    not.b      $0B(a0)
    not.l      (a0)+

但是,它不能被直接用在地址寄存器上:

    not.w      a0         

目录
上一篇:[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 贰 - 基本指令 | 6. 家庭作业答案 - 2
下一篇:[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 叁 - 位 指令 | 2. AND 指令

posted @ 2020-02-18 10:31  草帽过客  阅读(544)  评论(0编辑  收藏  举报