[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 叁 - 位 指令 | 6. 家庭作业答案 - 3
注意:本文经过原作者授权转译,转载请标明出处
原文地址:http://mrjester.hapisan.com/04_MC68/Sect03Part06/Index.html
条件允许建议阅读原文,网上非中文资料还是较多,当作锻炼英文岂不美哉
翻译若有不足之处欢迎批评指正
译文:
"当维基百科收录了你的家庭作业,无比尴尬" ---- 未知作者
简介
那么,上一节我们留了一个家庭作业 (或许应该换个叫法,'家庭作业' 好像显得我好为人师,不过..算了就这样吧),答案在这里:
答案
move.b #$24, d0
bclr.l #$02, d0
ori.b #$03, d0
move.b #$F8, d1
and.b d0, d1
not.w d1
eori.w #$FF00, d1
move.b d1, $00002200
bset.b #$05, $00002200
bchg.b #$01, $00002200
所有寄存器的初始值都是00000000
move.b #$24, d0
d0
的内容现在是00000024
bclr.l #$02, d0
第02
位
被擦除为0
:
0000 0000 0000 0000 0000 0000 0010 0000
d0
的内容现在是00000020
ori.b #$03, d0
03
OR 20
:
03 OR 20 = 23
0 OR 0 = 0
0 OR 0 = 0
0 OR 1 = 1
0 OR 0 = 0
0 OR 0 = 0
0 OR 0 = 0
1 OR 0 = 1
1 OR 0 = 1
结果是23
,所以d0
的内容现在是00000023
move.b #$F8, d1
d1
的内容现在是000000F8
and.b d0, d1
23
OR F8
:
23 AND F8 = 20
0 AND 1 = 0
0 AND 1 = 0
1 AND 1 = 1
0 AND 1 = 0
0 AND 1 = 0
0 AND 0 = 0
1 AND 0 = 0
1 AND 0 = 0
结果是20
,所以d1
的内容现在是00000020
not.w d1
d1
中的字0020
做逐位翻转:
0000 0000 0010 0000
|||| |||| |||| ||||
vvvv vvvv vvvv vvvv
1111 1111 1101 1111
结果是FFDF
,所以d1
的内容现在是0000FFDF
eori.w #$FF00, d1
FF00
XOR (异或) FFDF
:
FF00 XOR FFDF = 00DF
1 XOR 1 = 0
1 XOR 1 = 0
1 XOR 1 = 0
1 XOR 1 = 0
1 XOR 1 = 0
1 XOR 1 = 0
1 XOR 1 = 0
1 XOR 1 = 0
0 XOR 1 = 1
0 XOR 1 = 1
0 XOR 0 = 0
0 XOR 1 = 1
0 XOR 1 = 1
0 XOR 1 = 1
0 XOR 1 = 1
0 XOR 1 = 1
结果是00DF
,所以d1
的内容现在是000000DF
move.b d1, $00002200
把数据寄存器d1
中的DF
复制到内存中00002200
的位置:
偏移量 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
... | ||||||||||||||||
00002200 | DF | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 |
... |
内存地址00002200
处字节
的内容现在是DF
bset.b #$05, $00002200
DF
(内存中地址为00002200
的字节
) 的第05
位
被设置为1
:
1111 1111
偏移量 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
... | ||||||||||||||||
00002200 | FF | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 |
... |
现在内存中地址为00002200
的字节
的内容从DF
变成了FF
bchg.b #$01, $00002200
FF
(内存中地址为00002200
的字节
) 的第01
位
被翻转:
1111 1101
那一位原本是1
,被翻转成了0
,所以:
偏移量 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
... | ||||||||||||||||
00002200 | FD | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 |
... |
综上所述,内存中地址为00002200
处的字节
现在是FD
,恭喜你答对了!(真答对了?)
目录
上一篇:[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 叁 - 位 指令 | 5. BSET, BCLR 和 BCHG 指令
下一篇:[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 肆 - 正负 指令 | 1. 有效位