指令集

RV64I基础整数指令集

匿名 (未验证) 提交于 2019-12-02 23:49:02
slli, srli,srai )也进行小小的改动。 ld 双字加载 ( L oad D oubleword). I-type, RV64I. 从地址 x[rs1] + sign-extend(offset)读取八个字节,写入 x[rd]。 压缩形式: c.ldsp rd, offset; c.ld rd, offset(rs1) imm 11 10 9 8 7 6 5 4 3 2 1 0 rs1 func3 rd opcode name type 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ld I 0 1 1 0 0 0 0 0 1 1 例子: to do lwu 无符号字加载 ( L oad W ord, U nsigned). I-type, RV64I. 从地址 x[rs1] + sign-extend(offset)读取四个字节,零扩展后写入 x[rd]。 imm 11 10 9 8 7 6 5 4 3 2 1 0 rs1 func3 rd opcode name type 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

处理器架构 (一)发展历史

六月ゝ 毕业季﹏ 提交于 2019-12-02 11:14:15
目前已存的指令集架构有 4 种 : 复杂指令集运算 ( Complex Instruction Set Computing,CISC ) ; 精简指令集运算 ( Reduced Instruction Set Computing,RISC ) ; 显式并行指令集运算 ( Explicitly Parallel Instruction Computing,EPIC ) ; // EPIC是Intel和HP从VLIW中发展出来的,目前好像只有Intel的IA-64架构下的纯64位微处理器的Itanium/Itanium 2采用EPIC。 超长指令字指令集运算 ( VLIW ) // 基于VLIW研发的CPU架构主要用于早期的小型机,现在已基本消亡 // 目前比较流行的指令集只剩下:CISC和RISC 历史发展 cisc的发展及问题 CISC在 20 世纪 90 年代前被广泛的使用,其特点是通过存放在只读存储器中的微码 ( microcode ) 来控制整个处理器的运行。早期的计算机部件比较昂贵,主频低,运算速度慢。为了提高运算速度,人们不得不将越来越多的复杂指令加入到指令系统中,以提高计算机的处理效率。随着需求的不断增加,设计的指令越来越多,为支持这些新增的指令并保持兼容以前的指令,计算的体系结构越来越复杂。 然而,在CISC指令集的各种指令中,其使用频率却相差悬殊,大约有 20 %

[转载]xcode5时代如何设置Architectures和Valid Architectures

六眼飞鱼酱① 提交于 2019-12-01 19:31:27
xcode5时代如何设置Architectures和Valid Architectures 目前ios的指令集有以下几种: 1,armv6,支持的机器iPhone,iPhone2,iPhone3G及对应的iTouch 2,armv7,支持的机器iPhone4,iPhone4S 3,armv7s,支持的机器iPhone5,iPhone5C 4,arm64,支持的机器:iPhone5S 机器对指令集的支持是向下兼容的,因此armv7的指令集是可以运行在iphone5S的,只是效率没那么高而已~ ======================== Architecture : 指你想支持的指令集。 Valid architectures : 指即将编译的指令集。 Build Active Architecture Only : 只是否只编译当前适用的指令集。 ======== 现在是2014年初,其实4和4S的用户还是蛮多的,而iphone3之类的机器几乎没有了,所以我们的指令集最低必须基于armv7. 因此,Architecture的值选择:armv7 armv7s arm64(选arm64时需要最低支持5.1.1,这块不太明白) 1,如果想自己的app在各个机器都能够最高效率的运行,则需要将Build Active Architecture Only改为NO,Valid

体系结构

别说谁变了你拦得住时间么 提交于 2019-12-01 12:14:51
原文地址: https://zhuanlan.zhihu.com/p/19893066 随着智能设备的广泛普及,这几年媒体上越来越多的出现关于“架构”“ARM vs x86”“芯片研发”的相关内容。很多消费者和爱好者面对这些以往不太常见的信息时就会迷惑甚至产生误解。其中一组比较容易被混淆的概念就是CPU、架构、指令集与芯片。本文试图用较浅显的文字阐明它们的关系与区别,纠正一些常见的错误认识与观点。 学过计算机基础知识的朋友都知道CPU的含义,亦即中央处理器,是负责计算机主要运算任务的组件。一般习惯把CPU比喻为人的大脑。而了解略深的用户会听说CPU有x86、ARM等分类,前者主要用于PC而后者主要用于手机平板等设备。那么这里的x86、ARM指的是什么呢? CPU执行计算任务时都需要遵从一定的规范,程序在被执行前都需要先翻译为CPU可以理解的语言。这种规范或语言就是指令集(ISA,Instruction Set Architecture)。程序被按照某种指令集的规范翻译为CPU可识别的底层代码的过程叫做编译(compile)。x86、ARM v8、MIPS都是指令集的代号。指令集可以被扩展,如x86增加64位支持就有了x86-64。厂商开发兼容某种指令集的CPU需要指令集专利持有者授权,典型例子如Intel授权AMD,使后者可以开发兼容x86指令集的CPU。

Y86-64指令集体系结构1

╄→尐↘猪︶ㄣ 提交于 2019-12-01 10:06:32
一. 乱糟糟的概念 指令集体系结构(ISA ):一个处理器支持的指令和指令的字节级编码(每条指令被编码成由一个字节序列或多个字节序列组成的二进制格式) 不同的处理器家族有不同的ISA(例如Intel IA32和x86-64、IBM/Freescale Power和ARM处理器家族)有不同的ISA 同一处理器家族的不同处理器有相同的ISA ISA为编译器编写者和处理器设计人员之间提供了一个概念抽象层:编译器编写者只需知道允许哪些指令,指令的字节级编码是什么;而处理器设计者只需建造出执行这些指令对应的二进制编码的处理器。 计算机科学的重要思想:用巧妙的方法在提高性能的同时又保持一个更简单、更抽象模型的功能。 数字硬件设计:基本构件块,如何连接以及操作,硬件控制语言(硬件系统控制部分的简单语言,用它来描述处理器设计) 二. 创建Y86-64指令集 较x86-64处理器支持的指令集而言,Y86-64指令集的 数据类型 、 指令 、 寻址方式 较少。 好处在于: 字节级编码简单,CPU译码逻辑简单 。 可以实现一些处理整数的程序。 在这一章中,我们会学习到如何用这个新定义出来的Y86-64指令集来设计处理器,并自己设计出来一个处理器, CMU设计了一些研究和测试处理器设计的工具,包括:Y86-64的汇编器,以及运行Y86-64程序的模拟器

JVM---汇编指令集

女生的网名这么多〃 提交于 2019-12-01 09:52:23
1、 栈和局部变量操作     1.1  将常量压入栈的指令          aconst_null 将null对象引用压入栈 iconst_m1 将int类型常量-1压入栈 iconst_0 将int类型常量0压入栈 iconst_1 将int类型常量1压入栈 iconst_2 将int类型常量2压入栈 iconst_3 将int类型常量3压入栈 iconst_4 将int类型常量4压入栈 iconst_5 将int类型常量5压入栈 lconst_0 将long类型常量0压入栈 lconst_1 将long类型常量1压入栈 fconst_0 将float类型常量0压入栈 fconst_1 将float类型常量1压入栈 dconst_0 将double类型常量0压入栈 dconst_1 将double类型常量1压入栈 bipush 将一个8位带符号整数压入栈 sipush 将16位带符号整数压入栈 ldc 把常量池中的项压入栈 ldc_w 把常量池中的项压入栈(使用宽索引) ldc2_w 把常量池中long类型或者double类型的项压入栈(使用宽索引)    1.2   从栈中的局部变量中装载值的指令   iload 从局部变量中装载int类型值 lload 从局部变量中装载long类型值 fload 从局部变量中装载float类型值 dload

计算机系统导论——读书笔记——第四章 处理器体系结构(持续更新)

别等时光非礼了梦想. 提交于 2019-12-01 08:03:09
2019年10月14日 1.指令集体系结构(Instruction-Set Architecture, ISA):一个处理器支持的指令和指令的字节级编码. 2.硬件控制语言(Hardware Control Language, HCL):一种描述硬件系统控制部分的简单语言. 4.1 Y86-64指令集体系结构 状态单元、指令集和他们的编码、一组编程规范、异常事件处理 4.1.1 程序员可见的状态 4.1.2 Y86-64指令 1. Y86-64 vs x86-64 : Y86-64指令集是x86-64的子集,只包含8字节(q)操作 前者简单,后者紧凑(常数值编码灵活、字段不固定) 2. Y86-64指令 (1)movq指令:irmovq,rrmovq,mrmovq,rmmovq(格式为: 源+目的+movq,源和目的包括i(instant number),r(register),m(memory);注意,不允许immovq或mmmovq) (2)4个整数操作:addq,subq,andq,xorq(注意,只对寄存器操作,同时设置条件码ZF、SF、OF) (3)7个跳转指令:jmp,jle,jl,je,jne,jge,jg (4)6个条件传送指令:cmovle,cmovl,cmove,cmovne,cmovge,cmovg(注意:只能寄存器->寄存器) (5)call,ret (6

第二周学习总结

泪湿孤枕 提交于 2019-12-01 07:25:54
学习总结 《计算机概论》 第一张 +计算机的分类 1超级计算机 (Supercomputer) 2大型计算机 (Mainframe Computer) 3迷你计算机 (Minicomputer) 4工作站 (Workstation) 5微电脑(个人计算机) (Microcomputer) +计算机的定义 接受用户输入指令与数据,经由中央处理器的数据与逻辑单元运算处理后,以产生或存储成有用的信息 +什么是CPU 全称: Central Processing Unit 分为算数逻辑单元和控制逻辑单元。 CPU使用的数据都是从内存中获取的。 里面含有微指令集,其实现CPU的功能。 微指令集又分为精简指令集和复杂指令集。 精简指令集 (Reduced Instruction Set Computing,RISC) ,典型CPU就是 ARM 。 复杂指令集 (Complex Instruction Set Computer,CISC) ,典型的CPU就是 AMD、Intel 等的x86架构的CPU。 x86架构名称的由来:最早的 intel 开发的 CPU 的代号为 8086 ,后来依此架构又开发出80286、80386等,因此这种架构的 CPU 就被称为x86架构了。 64位的 intel 和 AMD 的 CPU 被称为 x86_64 的架构。

关于CPU、指令集、架构、芯片的基本认识

风流意气都作罢 提交于 2019-12-01 01:41:56
  学过计算机基础知识的朋友都知道CPU的含义,亦即中央处理器,是负责计算机主要运算任务的组件。一般习惯把CPU比喻为人的大脑。而了解略深的用户会听说CPU有x86、ARM等分类,前者主要用于PC而后者主要用于手机平板等设备。那么这里的x86、ARM指的是什么呢?   CPU执行计算任务时都需要遵从一定的规范, 程序在被执行前都需要先翻译为CPU可以理解的语言。这种规范或语言就是指令集 (ISA,Instruction Set Architecture)。程序被按照某种指令集的规范翻译为CPU可识别的底层代码的过程叫做编译(compile)。 x86、ARM v8、MIPS都是指令集的代号 。指令集可以被扩展,如x86增加64位支持就有了x86-64。厂商开发兼容某种指令集的CPU需要指令集专利持有者授权,典型例子如Intel授权AMD,使后者可以开发兼容x86指令集的CPU。   CPU的基本组成单元即为核心(core)。多个核心可以同时执行多件计算任务,前提是这些任务没有先后顺序。   核心的实现方式被称为 微架构 (microarchitecture)。 微架构的设计影响核心可以达到的最高频率、核心在一定频率下能执行的运算量、一定工艺水平下核心的能耗水平等等。 此外,不同微架构执行各类程序的偏向也不同,例如90年代末期Intel的P6微架构就在浮点类程序上表现优异

JVM 指令集

时光毁灭记忆、已成空白 提交于 2019-11-30 19:18:08
指令码 助记符 说明 0x00 nop 什么都不做 0x01 aconst_null 将null推送至栈顶 0x02 iconst_m1 将int型-1推送至栈顶 0x03 iconst_0 将int型0推送至栈顶 0x04 iconst_1 将int型1推送至栈顶 0x05 iconst_2 将int型2推送至栈顶 0x06 iconst_3 将int型3推送至栈顶 0x07 iconst_4 将int型4推送至栈顶 0x08 iconst_5 将int型5推送至栈顶 0x09 lconst_0 将long型0推送至栈顶 0x0a lconst_1 将long型1推送至栈顶 0x0b fconst_0 将float型0推送至栈顶 0x0c fconst_1 将float型1推送至栈顶 0x0d fconst_2 将float型2推送至栈顶 0x0e dconst_0 将double型0推送至栈顶 0x0f dconst_1 将double型1推送至栈顶 0x10 bipush 将单字节的常量值(-128~127)推送至栈顶 0x11 sipush 将一个短整型常量值(-32768~32767)推送至栈顶 0x12 ldc 将int,float或String型常量值从常量池中推送至栈顶 0x13 ldc_w 将int,float或String型常量值从常量池中推送至栈顶(宽索引)