[转译][马基 杰斯特(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 指令

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