注意:本文经过原作者授权转译,转载请标明出处
原文地址:http://mrjester.hapisan.com/04_MC68/Sect02Part06/Index.html
条件允许建议阅读原文,网上非中文资料还是较多,当作锻炼英文岂不美哉
翻译若有不足之处欢迎批评指正
译文:
"当我小的时候,父母告诉我'吃完别浪费,中国和印度的孩子还在饿肚子',现在我跟我的女儿们说:'快把作业做完,中国和印度的人们正在如狼似虎地抢走你们的工作'" ---- 托马斯 弗里德曼 (Thomas Friedman),《世界是平的》的作者
简介
在上一节,我给大家留了一串指令。在这一节,让我们康康答案与你的解答是否有出入
答案
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
move.w #$0010, d0
字
0010
被写入到d0
中,d0
现在的内容是00000010
move.w d0, $00000040
d0
中的一个字
被复制到内存中地址为00000040
的地方,0010
被复制了,00
被复制到内存地址00000040
,10
被复制到内存地址00000041
move.w d0, d1
d0
中的一个字
被复制到d1
,d1
现在的内容是00000010
add.w d1, d1
d1
中的一个字
被加到d1
中 (加自己),0010
+ 0010
= 0020
,d1
现在的内容是00000020
add.w d0, d1
d0
中的一个字
被加到d1
中,0020
+ 0010
= 0030
,d1
现在的内容是00000030
sub.w $00000040, d1
内存中00000040
位置的一个字
被复制出来并且去减d1
,内存中00000040
和00000041
位置的00
和10
被读取为0010
,然后去减d1
,0030
- 0010
= 0020
,d1
现在的内容是00000020
swap d1
交换d1
,d1
现在的内容是00200000
move.w d0, d1
d0
中的一个字
被复制到d1
,d1
现在的内容是00200010
movea.l #$00000040, a4
把00000040
写入到地址寄存器a4
中
add.w (a4), d1
内存中a4
内容所指向的那个字
被加到d1
中。a4
中的内容是00000040
,所以内存中00000040
和00000041
位置的00
和10
被读取为0010
,再去加上d1
, 0010
+ 0010
= 0020
,d1
现在的内容是00200020
move.w d1, (a4)
一个d1
中的字
被复制到a4
的内容所指向的内存中。0020
被复制了,所以00000040
位置变成了00
,00000041
位置变成了20
exg.l d1, d0
交换d1
和d0
的内容,现在d1
的内容是00000010
,d0
的内容是00200020
swap d0
交换d0
,d0
现在的内容是00200020
(内容没有发生变化,因为它里面高位和低位字
的内容是一样的)
clr.w d0
擦除d0
中的一个字
,现在d0
的内容是00200000
好了,结果就是00200000
,你做对了吗?如果没有的话没关系,只要你知道每个指令都是干什么的,做对是早晚的事
目录
上一篇:[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 贰 - 基本指令 | 5. CLR 指令
下一篇:[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 叁 - 位 指令 | 1. NOT 指令