[转译][马基 杰斯特(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 (跳转) 指令
 
                    
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号