即使前面的示例中所示的非常简单的微处理器有一个相当大的,它可以执行的指令集。18新利最新登入指令被实现为二进制模式的集合,其中每一个都有不同的意义,当加载到指令寄存器中。人类并不是特别擅长于记忆模式,因此定义的一组短词来表示不同的二进制模式。这组词叫做汇编语言的处理器。一个汇编程序可以把这句话翻译成二进制模式很容易,然后汇编程序的输出是放置在内存中微处理器执行。
这里的汇编语言指令集的设计师可以创建简单的微处理器在我们的例子中:
- LOADA mem——从内存加载注册一个地址
- LOADB mem——从内存地址加载寄存器B
- CONB反对——一个常数值加载到寄存器B
- SAVEB mem- B寄存器保存到内存地址
- SAVEC mem- C寄存器保存到内存地址
- 添加A和B -添加并将结果存储在C
- 子A和B -减去并将结果存储在C
- MUL——用A和B并将结果存储在C
- DIVA和B -分裂并将结果存储在C
- COM——比较A和B并将结果存储在测试
- 跳addr——跳转到一个地址
- JEQ addr——跳,如果相等,地址
- JNEQaddr——跳,如果不相等,地址
- 詹addr——跳,如果大于,地址
- JGE addr——跳,如果大于或等于,地址
- JL addr——跳,如果不到,去解决
- JLE addr——跳,如果小于或等于,地址
- 停止——停止执行
如果你读过18新利最新登入C编程是如何工作的,那么你知道这简单的C代码将计算5的阶乘(5 = 5的阶乘!= 5 * 4 * 3 * 2 * 1 = 120):
= 1,f = 1;而(< = 5){f = f *;= + 1;}
在程序的执行,变量f包含5的阶乘。
汇编语言
一个C编译器这个C代码转换为汇编语言。假设内存地址开始128处理器,和罗(包含汇编语言程序)从地址0开始,然后为我们简单的微处理器的汇编语言可能会看起来像这样:
/ /假设地址128 / /假设F是地址1290 CONB 1 / / = 1; 1 SAVEB 1282 CONB 1 / / F = 1; 3 SAVEB 1294 LOADA 128 / /如果> 5跃升至175 CONB 56 COM7詹178 LOADA 129 / / F = F *; 9 LOADB 12810 MUL11 SAVEC 12912 LOADA 128 / / = + 1; 13 CONB 114 ADD15 SAVEC 12816跳/ /循环回到if17停止
罗
现在的问题是,“所有这些指令如何看罗?”18新利最新登入Each of these assembly language instructions must be represented by a binary number. For the sake of simplicity, let's assume each assembly language instruction is given a unique number, like this:
- LOADA - 1
- LOADB - 2
- CONB - 3
- SAVEB - 4
- SAVEC mem - 5
- 添加- 6
- 子- 7
- MUL - 8
- DIV - 9
- COM - 10
- 跳addr - 11
- JEQ addr - 12
- JNEQ addr - 13
- 詹addr - 14
- JGE addr - 15
- JL addr - 16
- JLE addr - 17
- 停止- 18
数字被称为操作码。罗,我们的小程序是这样的:
/ /假设地址128 / /假设F是地址129 addr操作码/ value0 3 / / CONB 11 12 1283 1284 3 / / / / SAVEB CONB 15 16 4 / / / / LOADA SAVEB 1297 1298 1289 12810 511 512 10 / / / / CONB COM13 14 / / / / LOADA詹1714 3115 12916 12917 12818 12819 8 / / / / LOADB MUL20 5 / / / / LOADA SAVEC 12921 12922 12823 12824 125 126 6 / / / / CONB ADD27 5 / / SAVEC 12828 12829 430 831 18 / / /跳/停止
你可以看到7 C代码成为18行汇编语言,这在罗成为32字节。
解码
指令译码器需要将每一个操作码成一组信号,驱动微处理器内部的不同组件。让我们来添加指令为例,看看它需要做什么:
- 在第一个时钟周期,我们需要加载指令。因此,指令译码器需要:
- 激活程序计数器的三态缓冲
- 激活RD线
- 激活数据输入三态缓冲
- 门闩指令到指令寄存器
- 在第二个时钟周期,加法指令解码。它很少需要做:
- ALU的设置操作
- 门闩ALU到C寄存器的输出
- 在第三时钟周期,程序计数器递增(理论上可以重叠到第二个时钟周期)。
每个指令都可以分解为一组这样的排序操作,操作组件的微处理器以正确的顺序。这样的一些指令,加法指令,可能需要两个或三个时钟周期。其他人可能需要5 - 6个时钟周期。