注意:本文经过原作者授权转译,转载请标明出处
条件允许建议阅读原文,网上非中文资料还是较多,当作锻炼英文岂不美哉
翻译若有不足之处欢迎批评指正
"我发明了无线的延长线" ---- 史蒂夫 赖特 (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
如你所见,MSB是0,那么这一位就被往左扩展,如果我们看一下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
它的MSB是1,指令执行后,这一位会被向左扩展覆盖,直到一个长字的长度,从而使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 指令
原文:https://www.cnblogs.com/strawhatboy/p/12370624.html