[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 伍 - 程序流程控制 | 1. PC (Program Counter) 程序计数器
注意:本文经过原作者授权转译,转载请标明出处
原文地址:http://mrjester.hapisan.com/04_MC68/Sect05Part01/Index.html
条件允许建议阅读原文,网上非中文资料还是较多,当作锻炼英文岂不美哉
翻译若有不足之处欢迎批评指正
译文:
"勇敢的反义词不是懦弱,而是从众,即便是一只死鱼也能随着水流游动" ---- 吉姆 海托尔 (Jim Hightower, 1943-),美国专栏作者,激进派政客,作家
简介
有一些指令能够改变 m68k 读取指令的位置,能做到这一点主要是因为有两个寄存器PC
和SP
PC (Program Counter) 程序计数器
PC
是又一个 m68k 的寄存器,它用来存储 m68k 当前读取的程序的位置,到目前为止你所学习的所有的指令都是存放在内存中的某些位置的,比如:
move.w #$0F20, d0
add.l d1, d0
lsr.w #$02, d0
add.l d1, d0
我把每条指令都用不同的颜色区分开了,这些指令都保存在内存中 m68k 能够读取到的相应位置,假设他们存放在以00001000
位置开始的地方:
偏移量 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
... | ||||||||||||||||
00001000 | 30 | 3C | 0F | 20 | D1 | 81 | E4 | 48 | 33 | C0 | 00 | 20 | 00 | 00 | 00 | 00 |
00001010 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 |
00001020 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 |
00001030 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 |
... |
正如我之前所说过,m68k 以二进制形式读取指令,你可能已经看出一些线索了,比如上面的move
指令,其中303C
表示的是move.w
和d0
,之后就是0F20
PC
是个24
位
的寄存器,也就是说它只保存地址 (偏移量) 的后三个字节
比如我们上面的那个例子,PC
一开始时的内容应该是001000
- m68k 会首先读取
PC
的内容,然后定位到偏移量00001000
,然后它就开始读取指令move.w #$0F20,d0
(303C0F20
) - 执行完这条指令后,
PC
会增加到001004
- m68k 会再次读取
PC
的内容,然后定位到偏移量00001004
,然后它就开始读取指令add.l d1,d0
(D081
) - 执行完这条指令后,
PC
会增加到001006
- m68k 会再次读取
PC
的内容,然后定位到偏移量00001006
,然后它就开始读取指令lsr.w #$02,d0
(E448
) - 执行完这条指令后,
PC
会增加到001008
- m68k 会再次读取
PC
的内容,然后定位到偏移量00001008
,然后它就开始读取指令move.w d0,$00200000
(33C000200000
) - 执行完这条指令后,
PC
会增加到00100E
如你所见,PC
就是 m68k 读取程序的关键所在,在这一章,我们会一起来康康一些关于跳转和分支的指令,它们能让你改变PC
内容或是说改变 m68k 读取程序的位置
目录
上一篇:[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 肆 - 正负 指令 | 10. 家庭作业答案 - 4
下一篇:[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 伍 - 程序流程控制 | 2. JMP (跳转) 指令