注意:本文经过原作者授权转译,转载请标明出处
原文地址: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 指令