[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 肆 - 正负 指令 | 4. EXT 指令

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

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

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

译文:

"我发明了无线的延长线" ---- 史蒂夫 赖特 (Steven Wright, 1955- ),美国演员、编剧、导演、制片人

简介

EXT (扩展) - 把数据寄存器做符号扩展

这条指令能够把目的操作数中的一个字节MSB (最高有效位)扩展到一个,或者把目的操作数中的一个MSB扩展到一个长字

例子

从现在看是,你应该已经清楚符号数,还有它的正负数的表示,为了演示EXT指令的用法,让我们先从一个数据寄存器d0开始,假设它里面的内容是000000FC

如果我们以字节长度来读取d0,那么我们会得到FC,也就是-4,然而如果我们以的长度去读取,得到的是00FC,是个正数

这时EXT指令就要派上用场了,它能把符号数的符号从字节扩展到,或者从扩展到长字,比如:

    ext.w      d0

这条指令执行后,d0的内容会变成0000FFFC

这时,如果我们再以的长度去读取d0,获得的就是FFFC,也就是-4,然而,如果此时我们用长字的长度去读取d0,得到的是0000FFFC,还是个正数。那么让我们再在长字长度 (.l) 下用一次EXT指令:

    ext.l      d0

现在d0的内容是FFFFFFFC,这时再以长字长度读取d0的话,就会得到FFFFFFFC,就仍是-4

最后再来看看一个正数的例子,假设d0的内容是7FC0E024

  • 如果你以字节读取d0,得到的是24 (正数)
  • 如果你以读取d0,得到的是E024 (负数)
  • 如果你以长字读取d0,得到的是7FC0E024 (正数)

执行这条指令:

    ext.w      d0

为单位做了正扩展,现在d0的内容是7FC00024,其中的一个变成了正数0024,而以长字来读的话变成了7FC00024,还是正数,只是不是+24,然后:

    ext.l      d0

符号从扩展到了长字,现在d0的内容是00000024,也就是+24

注意:这条指令只能用在数据寄存器

过程

这条指令主要通过读取MSB来工作,比如,如果d0的内容是FEDCBA14,然后我们执行:

    ext.w      d0

此时d0中的字节 14被读取:

    0001 0100

如你所见,MSB0,那么这一就被往左扩展,如果我们看一下d0中的 BA14

    1011 1010 0001 0100

ext.w 指令执行后,它会变成:

    0000 0000 0001 0100

你会发现,MSB被扩展并且往左覆盖,直到一个的长度,现在d0的内容变成了 FEDC0014

如果d0的内容是C1208489,执行下面这条命令:

    ext.l      d0

那么 8489会被读取:

    1000 0100 1000 1001

它的MSB1,指令执行后,这一会被向左扩展覆盖,直到一个长字的长度,从而使d0的内容从:

    1100 0001 0010 0000 1000 0100 1000 1001

变成:

    1111 1111 1111 1111 1000 0100 1000 1001

此时d0的内容变成了 FFFF8489

目录
上一篇:[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 肆 - 正负 指令 | 3. NEG 指令
下一篇:[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 肆 - 正负 指令 | 5. 移位

[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 肆 - 正负 指令 | 4. EXT 指令

上一篇:Android Studio 如何快速添加override或者implements方法


下一篇:Xcode查看iOS崩溃与崩溃日志分析