[转译][马基 杰斯特(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
这条指令会把内存中地址为000048C0
和000048C1
处的位
都翻转过来,比如指令执行前内存内容是这样的:
偏移量 | 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 0101
,not
指令会把位
都翻转过来:
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 指令