[转译][马基 杰斯特(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
的内容变成了0000
3FFA
好了,答案就是00003FFA
,请记住一点,我并不期望你能够通过心算得到这个答案,如果你想要用计算器的话没有问题。这些家庭作业的目的只是确保你还记得这每个指令是怎么工作的,并不是想要测试你的数学能力
目录
上一篇:[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 肆 - 正负 指令 | 9. DIVU 和 DIVS 指令
下一篇:[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 伍 - 程序流程控制 | 1. PC (Program Counter) 程序计数器