[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 肆 - 正负 指令 | 5. 移位
注意:本文经过原作者授权转译,转载请标明出处
原文地址:http://mrjester.hapisan.com/04_MC68/Sect04Part05/Index.html
条件允许建议阅读原文,网上非中文资料还是较多,当作锻炼英文岂不美哉
翻译若有不足之处欢迎批评指正
译文:
"向减少对环境有害的消费模式的生活方式的转变很有必要" ---- Maurice Strong
简介
接下来我将介绍的一系列的指令都会非常相像,他们都是与移位
相关的操作
为了更好的解释移位
的过程,让我们拿d0
为例,然后假定它里面是0000004C
,来康康它里面的一个字节
4C
:
0100 1100
当移位
时,有两个方向,向左移位
或者向右移位
,所以如果我们把字节
4C
向左移一位的话:
< 1001 1000 <
你可以看到所有的0
和1
都向左移动了一位,如果我们把4C
向右移动一位的话:
> 0010 0110 >
所有的位都向右移动了一位,这就是移位
的基本思路
逻辑移位和算术移位
当我们向左或者向右移位
的时候,会多出来一个新的空位,比如:
1100 1100
如果向右移动一位的话:
> ?110 0110 >
由于向右移位,最左边的那个空位 (用?
标识) 出现了,问题是,它应该被填上0
还是1
呢,这就要由它是逻辑移位
还是算术移位
来决定了
当我们使用逻辑移位
时,将永远是用0
来填充:
> 0110 0110 >
而当我们使用算术移位
时,结果将由MSB
(最高有效位) 来决定,让我们看看在移位
之前:
1100 1100
如你所见,MSB
是1
,当算术移位
之后:
> 1110 0110 >
MSB
仍然还是1
。如果MSB
原本是0
:
0100 1100
那么算术移位
之后:
> 0010 0110 >
MSB
仍然还是0
下面是一个逻辑右移
的图示:
下面是一个算术右移
的图示:
对于左移
来说,逻辑左移
和算术左移
结果是一样的,LSB
(最低有效位) 都会补充一个0
:
1111 1111
在逻辑左移
或者算术左移
之后:
< 1111 1110 <
不管LSB
是什么,都会补充一个0
目录
上一篇:[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 肆 - 正负 指令 | 4. EXT 指令
下一篇:[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 肆 - 正负 指令 | 6. LSL, LSR, ASL 和 ASR 指令