[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 伍 - 程序流程控制 | 1. PC (Program Counter) 程序计数器

注意:本文经过原作者授权转译,转载请标明出处

原文地址:http://mrjester.hapisan.com/04_MC68/Sect05Part01/Index.html

条件允许建议阅读原文,网上非中文资料还是较多,当作锻炼英文岂不美哉
翻译若有不足之处欢迎批评指正

译文:

"勇敢的反义词不是懦弱,而是从众,即便是一只死鱼也能随着水流游动" ---- 吉姆 海托尔 (Jim Hightower, 1943-),美国专栏作者,激进派政客,作家

简介

有一些指令能够改变 m68k 读取指令的位置,能做到这一点主要是因为有两个寄存器PCSP

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.wd0,之后就是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 (跳转) 指令

posted @ 2020-03-06 10:45  草帽过客  阅读(569)  评论(0编辑  收藏  举报