[转译][马基 杰斯特(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
FFD0的MSB是1,所以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
7FF4的MSB是0,所以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) 程序计数器
浙公网安备 33010602011771号