注意:本文经过原作者授权转译,转载请标明出处
原文地址:http://mrjester.hapisan.com/04_MC68/Sect02Part05/Index.html
条件允许建议阅读原文,网上非中文资料还是较多,当作锻炼英文岂不美哉
翻译若有不足之处欢迎批评指正
译文:
"有三件事是确定的: 死亡,税收和数据丢失。猜猜看哪个先发生了?" ---- 大卫 迪克逊 (David Dixon) 1998 年由Salon.com 赞助的 Haiku Error Message 21st 挑战的优胜者
简介
CLR (清除) - 清除一个操作数
这条指令会把目的操作数
里的内容擦除,变成 0
例子
这条指令很简单:
clr.b d0
- 如果
d0
原本的内容是01234567
,指令执行后d0
的内容会变成01234500
- 如果
d0
原本的内容是ABCB9989
,指令执行后d0
的内容会变成ABCB9900
因为上面我们使用的是字节
长度 (.b
),所以最后一个字节
被清除为 0 了
再比如:
clr.w d0
- 如果
d0
原本的内容是01234567
,指令执行后d0
的内容会变成01230000
- 如果
d0
原本的内容是ABCB9989
,指令执行后d0
的内容会变成ABCB0000
因为上面我们使用的是字
长度 (.w
),所以最后一个字
被清除为 0 了
同理:
clr.l d0
- 如果
d0
原本的内容是01234567
,指令执行后d0
的内容会变成00000000
- 如果
d0
原本的内容是ABCB9989
,指令执行后d0
的内容会变成00000000
因为上面我们使用的是长字
长度 (.l
),所以最后一个长字
被清除为 0 了
你也可以把这条指令用在内存地址上 (直接使用,或是通过地址寄存器间接使用),比如:
clr.w $00201000
clr.b $00201FFF
clr.w (a4)
clr.l $1C(a2)
然而,你不能把它直接用在地址寄存器上:
clr.l a0 ✖
当然有可以代替的操作:
clr.l d0
move.l d0, a0
这里难道不是应该使用 movea.l 吗?或者干脆直接movea.l #$00000000, a0 也是一样的擦除效果
家庭作业
下面是一系列指令,我希望你能够一条一条的过一遍:
move.w #$0010, d0
move.w d0, $00000040
move.w d0, d1
add.w d1, d1
add.w d0, d1
sub.w $00000040, d1
swap d1
move.w d0, d1
movea.l #$00000040, a4
add.w (a4), d1
move.w d1, (a4)
exg.l d1, d0
swap d0
clr.w d0
每个数据寄存器初始值都是00000000
,这串指令执行后,d0
里的内容会是多少呢?
答案见下一节,记得先自己做一遍再看答案哦
目录
上一篇:[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 贰 - 基本指令 | 4. EXG 指令
下一篇:[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 贰 - 基本指令 | 6. 家庭作业答案 - 2