微处理器工作原理

[09-12 12:26:20]   来源:http://www.88dzw.com  电路基础   阅读:8928

文章摘要:以下是设计人员可以为例子中的微处理器建立的一组汇编语言指令: LOADA mem——将某个内存地址的数据加载到寄存器A中 LOADB mem——将某个内存地址的数据加载到寄存器B中 CONB con——将一个常量值加载到寄存器B中 SAVEB mem——将寄存器B的内容保存到某个内存地址 SAVEC mem——将寄存器C的内容保存到某个内存地址 ADD——将A和B相加并将结果保存在C中 SUB——将A和B相减并将结果保存在C中 MUL——将A和B相乘并将结果保存在C中 DIV——将A和B相除并将结果保存在C中 COM——将A和B进行比较并将结果保存在测试寄存器中 JUMP addr——跳转到某

微处理器工作原理,标签:电子电路基础,模拟电路基础,http://www.88dzw.com

以下是设计人员可以为例子中的微处理器建立的一组汇编语言指令:

  • LOADA mem——将某个内存地址的数据加载到寄存器A中
  • LOADB mem——将某个内存地址的数据加载到寄存器B中
  • CONB con——将一个常量值加载到寄存器B中
  • SAVEB mem——将寄存器B的内容保存到某个内存地址
  • SAVEC mem——将寄存器C的内容保存到某个内存地址
  • ADD——将A和B相加并将结果保存在C中
  • SUB——将A和B相减并将结果保存在C中
  • MUL——将A和B相乘并将结果保存在C中
  • DIV——将A和B相除并将结果保存在C中
  • COM——将A和B进行比较并将结果保存在测试寄存器中
  • JUMP addr——跳转到某个地址
  • JEQ addr——如果相等则跳转到某个地址
  • JNEQ addr——如果不相等则跳转到某个地址
  • JG addr——如果大于则跳转到某个地址
  • JGE addr——如果大于或等于则跳转到某个地址
  • JL addr——如果小于则跳转到某个地址
  • JLE addr——如果小于或等于则跳转到某个地址
  • STOP——停止执行

如果你读过C语言入门教程一文,那么会知道下面这段简单的C代码可计算5的阶乘(5的阶乘=5!=5X4X3X2X1=120):

    a=1; 
    f=1;
    while (a<=5)
    {
    f=f*a;
    a=a+1;
    }

在程序执行末尾,变量f中包含了5的阶乘。

汇编语言

C编译器可将这段C代码编译为汇编语言。假定此处理器中RAM的地址从128开始,而ROM(包含汇编语言程序)的地址从0开始,那么对于我们这个简单的微处理器来说,该汇编语言看起来如下所示:

    // 假定a位于地址128处
    // 假定F位于地址129处
    0 CONB 1 // a=1;
    1 SAVEB 128
    2 CONB 1 // f=1;
    3 SAVEB 129
    4 LOADA 128 // 如果a>5,则跳转到17
    5 CONB 5
    6 COM
    7 JG 17
    8 LOADA 129 // f=f*a;
    9 LOADB 128
    10 MUL
    11 SAVEC 129
    12 LOADA 128 // a=a+1;
    13 CONB 1
    14 ADD
    15 SAVEC 128
    16 JUMP 4 // 进行循环,返回到比较部分
    17 STOP

ROM

那么,现在的问题是:所有这些指令在ROM中是什么样的?所有这些汇编语言指令必须以二进制数字的形式表示。为了简单起见,我们假定每条汇编语言指令具有一个唯一的编号,如下所示:

  • LOADA-1
  • LOADB-2
  • CONB-3
  • SAVEB-4
  • SAVEC mem-5
  • ADD -6
  • SUB -7
  • MUL -8
  • DIV -9
  • COM -10
  • JUMP addr -11
  • JEQ addr -12
  • JNEQ addr -13
  • JG addr -14
  • JGE addr -15
  • JL addr -16
  • JLE addr -17
  • STOP -18

这些数字称作opcode(优化代码)。在ROM中,我们的小程序看起来如下所示:

    // 假定a位于地址128处
    // 假定F位于地址129处
    地址 opcode/值
    0 3 // CONB 1
    1 1
    2 4 // SAVEB 128
    3 128
    4 3 // CONB 1
    5 1
    6 4 // SAVEB 129
    7 129
    8 1 // LOADA 128
    9 128
    10 3 // CONB 5
    11 5
    12 10 // COM
    13 14 // JG 17
    14 31
    15 1 // LOADA 129
    16 129
    17 2 // LOADB 128
    18 128
    19 8 // MUL
    20 5 // SAVEC 129
    21 129
    22 1 // LOADA 128
    23 128
    24 3 // CONB 1
    25 1
    26 6 // ADD
    27 5 // SAVEC 128
    28 128
    29 11 // JUMP 4
    30 8
    31 18 // STOP

您可以看到,七行C代码变成了18行汇编语言,并且变成了ROM中的32个字节。

解码

指令解码器需要将每个opcode转变为一组能够驱动微处理器内部各个部件的信号。让我们以ADD指令为例,看看解码器都执行了哪些工作:

上一页  [1] [2] [3] [4] [5]  下一页


Tag:电路基础电子电路基础,模拟电路基础电路基础