计算机指令

程序设计层第6、7章读书笔记 rwl

夙愿已清 提交于 2019-12-01 20:33:40
程序设计层第6、7章读书笔记 第6章 低级程序设计语言与伪代码 6.1 计算机操作 计算机是能够 存储、检索和处理数据 的可编程电子设备。 要改变计算机对数据的处理,只需要改变 指令 即可。 存储、检索和处理 是计算机能够对数据执行的动作。 6.2 机器语言 计算机 真正执行 的程序设计指令是用 机器语言 编写的指令,这些指令固定在计算机的 硬盘 中。 机器语言(machine language) :由计算机直接使用的 二进制编码指令 构成的语言。 在机器语言中,处理过程中每一个微小的步骤都 必须 被明确地编码。 目前 几乎没有 程序是用 机器语言 编写的,主要是因为编写这种程序 太费时间 。 Pep/8:一台虚拟机 虚拟机(virtual computer(machine)) :为了 模拟 真实机器地重要特征而设计的假想机器。 Pep/8 有 39 个机器语言指令。这意味着每个Pep/8程序一定是由这些指令组合而成的 序列 。 Pep/8反映的 重要特征 : 1.Pep/8的内存单元由 65536 个字节的存储空间构成。这些字节从0到65535( 十进制 )进行编号。 2.Pep/8的 字长 是两字节,或者16比特。这样向算术/逻辑单元(ALU)流入的数据或从 算术/逻辑单元 流出的数据在长度上就是 16比特 。 3.Pep/8有 7 个存储器。 累加器

计算机系统基础 Fundament of Computer System ——公式记忆

血红的双手。 提交于 2019-12-01 20:06:09
计算机系统基础 Fundament of Computer System ——公式记忆 2019-10-21 Mon. ♦ 用户CPU时间 = 程序总时钟周期数 ÷ 时钟频率        = 程序总时钟周期数 × 时钟周期 ♦ 时钟频率 =1 / CPU时钟周期 ( 时钟频率 , 时钟周期 互为倒数) ♦ 程序总时钟周期数 = 程序总指令条数 × CPI ♦ 程序总时钟周期数 = ∑ n i=1 (CPI i × C i ) (已知程序有n条不同类型指令,第i种指令的条数和CPI分别为C i 和CPI i ) ♦ 程序的综合CPI = ∑ n i=1 (CPI i × F i )         = 程序总时钟周期数 ÷ 程序总指令条数 (F i 表示第 i 种指令在程序中所占的比例) ♦ 用户CPU时间 = CPI × 程序总指令条数 × 时钟周期 ♦ ♦ ♦ 来源: https://www.cnblogs.com/LinQingYang/p/11715884.html

程序员需要了解的硬核知识之CPU

有些话、适合烂在心里 提交于 2019-12-01 18:50:02
大家都是程序员,大家都是和计算机打交道的程序员,大家都是和计算机中软件硬件打交道的程序员,大家都是和 CPU 打交道的程序员,所以,不管你是玩儿硬件的还是做软件的,你的世界都少不了计算机最核心的 - CPU CPU是什么 CPU 的全称是 Central Processing Unit ,它是你的电脑中最 硬核 的组件,这种说法一点不为过。CPU 是能够让你的计算机叫 计算机 的核心组件,但是它却不能代表你的电脑,CPU 与计算机的关系就相当于大脑和人的关系。它是一种小型的计算机芯片,它嵌入在台式机、笔记本电脑或者平板电脑的主板上。通过在单个计算机芯片上放置数十亿个微型晶体管来构建 CPU。 这些晶体管使它能够执行运行存储在系统内存中的程序所需的计算,也就是说 CPU 决定了你电脑的计算能力。 CPU 实际做什么 CPU 的核心是从程序或应用程序获取指令并执行计算。此过程可以分为三个关键阶段: 提取,解码和执行 。CPU从系统的 RAM 中提取指令,然后解码该指令的实际内容,然后再由 CPU 的相关部分执行该指令。 RAM : 随机存取存储器(英语:Random Access Memory,缩写: RAM ),也叫主存,是与 CPU 直接交换数据的内部存储器。它可以随时读写(刷新时除外),而且速度很快,通常作为操作系统或其他正在运行中的程序的 临时数据存储介质 CPU 的内部结构

程序员需要了解的硬核知识之CPU

柔情痞子 提交于 2019-12-01 18:46:47
大家都是程序员,大家都是和计算机打交道的程序员,大家都是和计算机中软件硬件打交道的程序员,大家都是和 CPU 打交道的程序员,所以,不管你是玩儿硬件的还是做软件的,你的世界都少不了计算机最核心的 - CPU CPU是什么 CPU 的全称是 Central Processing Unit ,它是你的电脑中最 硬核 的组件,这种说法一点不为过。CPU 是能够让你的计算机叫 计算机 的核心组件,但是它却不能代表你的电脑,CPU 与计算机的关系就相当于大脑和人的关系。它是一种小型的计算机芯片,它嵌入在台式机、笔记本电脑或者平板电脑的主板上。通过在单个计算机芯片上放置数十亿个微型晶体管来构建 CPU。 这些晶体管使它能够执行运行存储在系统内存中的程序所需的计算,也就是说 CPU 决定了你电脑的计算能力。 CPU 实际做什么 CPU 的核心是从程序或应用程序获取指令并执行计算。此过程可以分为三个关键阶段: 提取,解码和执行 。CPU从系统的 RAM 中提取指令,然后解码该指令的实际内容,然后再由 CPU 的相关部分执行该指令。 RAM : 随机存取存储器(英语:Random Access Memory,缩写: RAM ),也叫主存,是与 CPU 直接交换数据的内部存储器。它可以随时读写(刷新时除外),而且速度很快,通常作为操作系统或其他正在运行中的程序的 临时数据存储介质 CPU 的内部结构

程序员需要了解的硬核知识之CPU

柔情痞子 提交于 2019-12-01 18:45:39
大家都是程序员,大家都是和计算机打交道的程序员,大家都是和计算机中软件硬件打交道的程序员,大家都是和 CPU 打交道的程序员,所以,不管你是玩儿硬件的还是做软件的,你的世界都少不了计算机最核心的 - CPU CPU是什么 CPU 的全称是 Central Processing Unit ,它是你的电脑中最 硬核 的组件,这种说法一点不为过。CPU 是能够让你的计算机叫 计算机 的核心组件,但是它却不能代表你的电脑,CPU 与计算机的关系就相当于大脑和人的关系。它是一种小型的计算机芯片,它嵌入在台式机、笔记本电脑或者平板电脑的主板上。通过在单个计算机芯片上放置数十亿个微型晶体管来构建 CPU。 这些晶体管使它能够执行运行存储在系统内存中的程序所需的计算,也就是说 CPU 决定了你电脑的计算能力。 CPU 实际做什么 CPU 的核心是从程序或应用程序获取指令并执行计算。此过程可以分为三个关键阶段: 提取,解码和执行 。CPU从系统的 RAM 中提取指令,然后解码该指令的实际内容,然后再由 CPU 的相关部分执行该指令。 RAM : 随机存取存储器(英语:Random Access Memory,缩写: RAM ),也叫主存,是与 CPU 直接交换数据的内部存储器。它可以随时读写(刷新时除外),而且速度很快,通常作为操作系统或其他正在运行中的程序的 临时数据存储介质 CPU 的内部结构

计算机基础之编程语言

只愿长相守 提交于 2019-12-01 17:37:54
编程语言分类 一、机器语言 只要谈到计算机基础,有一个东西是我们无法避免的,那就是编程到底是什么? 现在想象这样一个场景,如果奴隶来自不同的国家,作为尊贵而又穷逼买不起管家的奴隶主的我们则需要和奴隶有一定的沟通才能控制奴隶。 如果把奴隶换成计算机,由于计算机以二进制的形式存储数据的,如果我们想要奴役计算机,则需要使用二进制编写程序。也就是说,如果我们需要和计算机沟通,那我们必须得会二进制代码编程。而这个二进制编码则是使用机器语言编程,直接操作硬件。它的优缺点如下: 优点:执行效率高(还能再快吗?不能了。) 缺点:开发的效率低 1.1机器语言编程 由于计算机内部只能接受二进制代码,因此,用二进制代码0和1描述的指令称为机器指令,全部机器指令的集合构成了计算机的机器语言,用机器语言编程的程序陈伟目标程序。只有目标程序才能被计算机直接识别和执行。但是机器语言编程的程序无明显特征,难以记忆,不便阅读和书写,且依赖于具体机种,局限性大,机器语言属于低级语言。 用机器语言编写程序,编程人员要首先熟记所使用计算机的全部指令代码和代码的涵义。手编程序时,程序员得自己处理每条指令和每一条数据的存储分配和输入输出,还得记住编程过程中每步所用的工作单元处在何种状态。这是一件十分繁琐的工作。编写程序花费的时间往往是十几运行时间的几十倍或几百倍。而且,编程的程序全部是0和1的指令代码,直观性差,还容易出错

Java多线程之线程安全(0)Java内存区域与Java内存模型

自作多情 提交于 2019-12-01 15:25:05
概况 本文内容 1.Java内存区域划分 2.Java内存模型JMM 3.硬件内存架构与Java内存模型 4.Jvm中线程实现机制 5.线程安全问题的原因 一.理解Java内存区域与Java内存模型 看下图 1.1Java内存区域 各个区域的解释和功能 方法区(Method Area): 方法区属于线程 共享 的内存区域,又称Non-Heap(非堆),主要用于 存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码 等数据,根据Java 虚拟机规范的规定,当方法区无法满足内存分配需求时,将抛出OutOfMemoryError 异常。值得注意的是在方法区中存在一个叫 运行时常量池(Runtime Constant Pool)的区域,它主要用于存放编译器生成的各种字面量和符号引用 ,这些内容将在类加载后存放到运行时常量池中,以便后续使用。 JVM堆(Java Heap): Java 堆也是属于线程 共享 的内存区域,它在虚拟机启动时创建,是Java 虚拟机所管理的内存中最大的一块,主要用于存放对象实例, 几乎所有的对象实例都在这里分配内存 ,注意Java 堆是垃圾收集器管理的主要区域,因此很多时候也被称做 GC 堆 ,如果在堆中没有内存完成实例分配,并且堆也无法再扩展时,将会抛出OutOfMemoryError 异常。 程序计数器(Program Counter

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

别等时光非礼了梦想. 提交于 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:28:24
机器级代码 在计算机中最终执行的都是机器代码,汇编代码、C 语言代码和高级语言的代码都需要转换成机器代码来执行。文章涉及的机器语言主要指 Intel IA32。 如下一段 C 语言代码: 1 int accum = 0; 2 3 int sum(int x, int y) 4 { 5 int t = x +y; 6 accum += t; 7 return ; 8 } 通过 gcc -m32 -O1 -o code.o -c code.c 生成二进制格式的目标代码文件 code.o,通过 hexdump 查看文件内容,在计算机中最终执行的字节指令是: 通过 objdump -d code.o 反汇编查看这段二进制对应的汇编内容: 这里的指令 55 对应了汇编代码 push %ebp,汇编代码非常接近于机器代码,它用可读性更好的文本表示处理器执行的指令。 除了像上面那样通过反汇编目标文件查看对应的汇编代码,还可以通过 gcc 查看 C 编译器产生的汇编代码,如下命令会产生一个汇编文件 code.s 。 # -m32 表示用 32 位模式编译 gcc -O1 -m32 -S code.c 数据格式 虽然 C 语言可以在存储器中声明和分配各种数据类型的对象,但是机器代码只是简单地将存储器看成是一个很大的、按字节寻址的数组。C 语言中的聚合数据类型,例如数组和结构

2019-2020-1 20175320 《信息安全系统设计基础》第五周学习总结

倾然丶 夕夏残阳落幕 提交于 2019-12-01 07:23:15
2019-2020-1 20175320 《信息安全系统设计基础》第五周学习总结 一、教材学习内容总结 本周我们了解了在计算机系统中程序的机器级表示。通过反汇编器可以将机器码转化为类似汇编代码的格式,而该章节内容的主要介绍了在x86-64中的汇编指令以及汇编指令与c代码之间的转化。虽然同样是汇编,但与我们上学期学习的8086中的汇编语句有着一定的区别,以下是本章节需要注意的内容: objdump命令:通过 objdump -d 文件名+后缀 可以将机器码转化为汇编代码,这是进行分析的重要前提条件。 寄存器的前缀不同,对应的存储长度不同。%r是64位、%e是32位、%是16位及以下的寄存器,在进行算术和逻辑操作时,必须通过前缀选择正确长度的寄存器。 操作数有多种寻址方式,我们需要熟悉各种虚拟地址的寻址方式。 x86-64中的数据传送指令以及各种算术和逻辑操作指令的两个操作数的关系相较于8086是相反的,这是与8086最大的区别。 各种操作指令可以通过后缀来指定数据的位数,或者进行数据长度之间的转换,但操作指令规定的长度一定要与寄存器长度相匹配,比如movq、movabsq、movswl等指令。 在使用mov指令时,不可以两个操作数同为存储器,且立即数不能作为目的地址。 在x86-64中,栈操作指令总是以四字作为出以及入栈的单位。 在移位操作中,左移与右移的效果有所区别