[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 贰 - 基本指令 | 6. 家庭作业答案 - 2

注意:本文经过原作者授权转译,转载请标明出处

原文地址: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被复制到内存地址0000004010被复制到内存地址00000041

    move.w     d0, d1

d0中的一个被复制到d1d1现在的内容是00000010

    add.w      d1, d1

d1中的一个被加到d1中 (加自己),0010 + 0010 = 0020d1现在的内容是00000020

    add.w      d0, d1

d0中的一个被加到d1中,0020 + 0010 = 0030d1现在的内容是00000030

    sub.w      $00000040, d1

内存中00000040位置的一个被复制出来并且去减d1,内存中0000004000000041位置的0010被读取为0010,然后去减d10030 - 0010 = 0020d1现在的内容是00000020

    swap       d1

交换d1d1现在的内容是00200000

    move.w     d0, d1

d0中的一个被复制到d1d1现在的内容是00200010

    movea.l    #$00000040, a4

00000040写入到地址寄存器a4

    add.w      (a4), d1

内存中a4内容所指向的那个被加到d1中。a4中的内容是00000040,所以内存中0000004000000041位置的0010被读取为0010,再去加上d10010 + 0010 = 0020d1现在的内容是00200020

    move.w     d1, (a4)

一个d1中的被复制到a4的内容所指向的内存中。0020被复制了,所以00000040位置变成了0000000041位置变成了20

    exg.l      d1, d0

交换d1d0的内容,现在d1的内容是00000010d0的内容是00200020

    swap       d0

交换d0d0现在的内容是00200020 (内容没有发生变化,因为它里面高位和低位的内容是一样的)

    clr.w      d0

擦除d0中的一个,现在d0的内容是00200000

好了,结果就是00200000,你做对了吗?如果没有的话没关系,只要你知道每个指令都是干什么的,做对是早晚的事

目录
上一篇:[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 贰 - 基本指令 | 5. CLR 指令
下一篇:[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 叁 - 位 指令 | 1. NOT 指令

posted @ 2020-02-17 10:43  草帽过客  阅读(402)  评论(0编辑  收藏  举报