[转译][马基 杰斯特(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
如你所见,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. 移位