电脑的处理机可能是人类从古至今所制造出来的最神奇的机器, 在一块小小的硅质芯片上每秒可以完成数亿次的计算。而管理这台神奇的机器也成为了人类历史上最难以解决的问题之一。
Y86处理机的指令结构
对于每一条指令而言, 它们都可以去访问或者更改一些内存或者寄存器的内容, 这样的地方叫做指令可视地带。
一般指令可视的地带有下面几种:
- 8个通用寄存器
- PC指向下一条指令的存储地址
- 内存: 我们可以把内存看作一个巨大的由字节而组成的数组。计算机一般采用虚拟地址的策略来管理这些内存空间。
- 记录上一条指令执行结果的指针
-
内存地址的寻址规则
一般的寻址规则是基地址+偏移量。不能使用二维寻址或者放大寄存器中地址的值来寻址。另外, 不支持两个内存之间的内容直接参加运算, 也不支持直接将常量复制到内存当中去。
指令的分类
- 数的算术操作, 包括加减, 与或操作等(会改变FLAGS寄存器的值)
- 跳转指令, 有些是无条件的跳转, 有些是有条件的跳转。(根据FLAGS寄存器中的值而确定)
- 调用函数: 将当前的执行位置储存并去执行所要跳转的目标函数
- push, pop栈操作, 很简单
- halt: 停机, 即停止执行, 结束程序
-
指令的编码
指令编码的组成结构:
- 为了让机器识别对应的指令, 采用了哈希表的方式储存相应的指令, 称为初始子节。初始子节又分为两块, 分别是代码子节和函数字节。
- 寄存器字节, 对于含有寄存器的指令, 含有一或多个字节来表示这条指令所对应的寄存器。
- 有些指令还会有一个附加的字节来存储所要用到的常数(一般为4个字节)。