[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 肆 - 正负 指令 | 3. NEG 指令
注意:本文经过原作者授权转译,转载请标明出处
原文地址:http://mrjester.hapisan.com/04_MC68/Sect04Part03/Index.html
条件允许建议阅读原文,网上非中文资料还是较多,当作锻炼英文岂不美哉
翻译若有不足之处欢迎批评指正
译文:
"对立,或者说是作用与反作用,在自然界中随处可见:在光与影之中,在暖与寒之间,在潮起潮落,在男和女,在万物生息,在每一次心跳,在流水与声音的波动,在向心力与离心力,在电与化学的亲和力。" ---- 拉尔夫 沃尔多 爱默生 (Ralph Waldo Emerson, 1803-1882),美国思想家、文学家,诗人
简介
NEG - 否定 (NEGate)
这条指令会把目的操作数
变成它的相反数,从正数变成负数,从负数变成正数
例子
在上一节中,我们康了正数和负数的表示方法。这条指令可以让你把一个正数变成它对应的负数,反之亦然
好了,先来康康这个例子:
neg.b d0
d0
中的一个字节
被取相反数了
- 如果
d0
原本是00220002
,指令执行后,d0
的内容会变成002200FE
你可能注意到d0
中的最后一个字节
从02
变成了FE
,即从+2
变成-2
- 如果
d0
原本是FED0C4E4
,指令执行后,d0
的内容会变成FED0C41C
你可能注意到d0
中的最后一个字节
从E4
变成了1C
,即从-1C
变成+1C
正数变负数,负数变正数,基本就是这样,然而,在一些特殊的情况下,这条指令并不会起作用:
- 如果
d0
原本是0890F300
,指令执行后,d0
的内容会变成0890F300
- 如果
d0
原本是0890F380
,指令执行后,d0
的内容会变成0890F380
首先第一个例子里用了00
,而00
是无所谓符号的,所以并没有对应的相反数,保持不变。对于第二个80
的例子也差不多,不过解释起来有点复杂:
- 如果去取
7E
的相反数,它就会变成82
(-7E
),而82
的相反数是7E
- 如果去取
7F
的相反数,它就会变成81
(-7F
),而81
的相反数是7F
- 如果去取
80
的相反数,它就会变成80
(-80
),而80
的相反数是80
你可以看到,80
似乎也有它类似于00
的定位那样
... FC FD FE FF 00 01 02 03 04 ...
... 7C 7D 7E 7F 80 81 82 83 84 ...
当然还是要记住00
仍然在技术上是个正数,而80
是个负数
neg
指令还可以用在内存上,或者通过地址寄存器用在内存上:
neg.w $00004000
neg.l (a2)
neg.w (a2)+
neg.b -(a2)
neg.w $0C(a2)
注意:你不能把
neg
直接用在地址寄存器上:
neg.l a2 ✖
目录
上一篇:[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 肆 - 正负 指令 | 2. 有符号 和 无符号
下一篇:[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 肆 - 正负 指令 | 4. EXT 指令