[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 肆 - 正负 指令 | 10. 家庭作业答案 - 4

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

原文地址:http://mrjester.hapisan.com/04_MC68/Sect04Part10/Index.html

条件允许建议阅读原文,网上非中文资料还是较多,当作锻炼英文岂不美哉
翻译若有不足之处欢迎批评指正

译文:

"一篇好文章应该有 10% 的灵感,15% 的汗水,和 75% 的绝望" ---- 未知作者

简介

上一节我留给大家一串指令来试着算出最终d0的内容,让我们来康康你做的对不对吧

答案

    move.w     #$0010, d0
    mulu.w     #$0003, d0
    neg.w      d0
    ext.l      d0
    asr.l      #$01, d0
    ror.w      #$01, d0
    ext.l      d0
    divu.w     #$0002, d0

d0初始内容是00000000

    move.w     #$0010, d0

d0的内容现在是00000010

    mulu.w     #$0003, d0

    0010 x 0003 = 00000030

于是d0的内容变成了00000030

    neg.w      d0

0030取相反数为FFD0 (-0030),现在d0的内容变成了0000FFD0

    ext.l      d0

d0中的FFD0被符号扩展到长字长度,这条指令执行前d0内容是:

    0000 0000 0000 0000 1111 1111 1101 0000

FFD0MSB1,所以d0会被扩展成:

    1111 1111 1111 1111 1111 1111 1101 0000

于是d0的内容变成了FFFFFFD0

    asr.l      #$01, d0

d0向右算术移位 1

  > 1111 1111 1111 1111 1111 1111 1110 1000 >

于是d0的内容变成了FFFFFFE8

    ror.w      #$01, d0

d0中的FFE8循环右移01

  > 0111 1111 1111 0100 v
  ^ < < < < < < < < < < <

于是d0的内容变成了FFFF7FF4

    ext.l      d0

d0中的7FF4被符号扩展到长字长度,这条指令执行前d0内容是:

    1111 1111 1111 1111 0111 1111 1111 0100

7FF4MSB0,所以d0会被扩展成:

    0000 0000 0000 0000 0111 1111 1111 0100

于是d0的内容变成了00007FF4

    divu.w     #$0002, d0

    00007FF4 ÷ 0002 = 3FFA r0000

于是d0的内容变成了00003FFA

好了,答案就是00003FFA,请记住一点,我并不期望你能够通过心算得到这个答案,如果你想要用计算器的话没有问题。这些家庭作业的目的只是确保你还记得这每个指令是怎么工作的,并不是想要测试你的数学能力

目录
上一篇:[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 肆 - 正负 指令 | 9. DIVU 和 DIVS 指令
下一篇:[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 伍 - 程序流程控制 | 1. PC (Program Counter) 程序计数器

posted @ 2020-03-05 10:03  草帽过客  阅读(277)  评论(0编辑  收藏  举报