码迷,mamicode.com
首页 > 其他好文 > 详细

五、精简指令集和复杂指令集及指令格式

时间:2019-05-24 23:52:25      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:模型   swap   字符   png   编译器   并且   http   添加   系统   

5.1 介绍

  • CISC:复杂指令集
  • RISC:精简指令集

5.1.1 CPU 模型

  • 复杂指令集和精简指令集取决于CPU 中的控制器的 N
  • N=111(8051) 复杂指令集
  • N=34 (ARM) 精简指令集
  • SWAP(1) <---> MOV (3) 2/8 定律

5.1.2 编程语言

  • 编程语言分为编译型和解释行
    • 编译型:即本地语言,直接生成机器码
    • 解释型:JAVA 语言,一次编译到处运行(JVM 本身是一个进行,去分配内存空间,将字节码转成机器码,用户程序含在此进程中)
      • 源文件--》编译器--》字节码--》JVM(解释)--》机器码

5.1.3 RISC 架构的特点

  • 采用固定长度的指令格式
  • 使用单周期指令,便于流水线操作
  • 大量使用寄存器,采用 LS 结构访问存储器
  • 采用 CISC 架构的处理器具有相反的特征, 不过功能更强大。 采用 CISC 架构的处理器有 X8

5.2 指令格式

5.2.1 指令格式

  • <指令助记符>{<执行条件>}{S}    <目标寄存器>,<操作数 1 的寄存器>{,<第 2 操作数>}
  • 注意:
    • 指令助记符就是指令
    • 执行条件可以写也可以不写,不写的话,系统会有个默认的执行条件添加
    • < >号内的项是必需的
    • { }号内的项是可选的
    • S: 是否影响 CPSR 寄存器的值,书写时影响 CPSR,不写的话不会影响 CPSR
      • 如下面的 SUBS,本身是 SUB 指令,加了 S 后就影响到 CPSR 的标志位了
    • CMP 不需要增加"S"就可改变相应的标志位
  • 例如:
  • SUBS PC,LR,#4
    MOV R0,#0x00
    LDR R0,[R1]
  • 所有指令都是 32bit,load/store 体系结构(对存储器的访问只能使用加载和存储指令实现)

5.2.2 条件码和机器码

在 ARM 状态,所有的指令都可以按照 CPSR 状态码和指令条件字段的状态来有条件地执行。
此字段(位[31:28])确定了在什么情况下哪一个指令被执行。如果 C,N,Z 和 V 标志位的状态符合字段的条件码,将执行指令,否则忽略不执行。
有 16 种可能的条件,每种表示为在指令助记符后附加两个字符后缀。例如,一个分支(汇编语言中的 B)跳转指令变成 BEQ 为“如果相等则分支跳转”,这意味着只有 Z 标志位被置位了才会执行分支跳转。
在实际应用当中,将会使用到 15 种不同的条件:如下表所列,保留第 16 种(1111),并且一定不要使用。

  技术图片

使用指令条件码可实现高效的逻辑操作, 提高代码执行效率。 例如:

if(a > b) a++;     CMP R0,R1
else b++;          ADDHI R0,R0,#1
                   ADDLS R1,R1,#1

MOV R0,#0x00 <--> MOVAL R0,#0x00

               

机器码: MOV R0,#0x00 <------> 1110 001 1101 0 0000....000 -->0xE3A00000
数据存储指令的机器码是 1110 001,1110 是条件码,

MOV 指令的机器码是 1101

0 为 S 的机器码,0 为禁用,1 为启动

0000...000 为R0,#0x00

技术图片

 

五、精简指令集和复杂指令集及指令格式

标签:模型   swap   字符   png   编译器   并且   http   添加   系统   

原文地址:https://www.cnblogs.com/kele-dad/p/10920693.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!