ISA指令集

今天的内容来源于《计算机系统概论》的第4章,介绍的指令是作者根据x86指令简化设计的一个自称为LC-3(Little Computer-3 edition)的指令集。

ISA对于程序员来说是可编程的最底层的层次了,其本质就是一堆机器指令,如0001 001 010 0 00 011。

一、指令的结构

指令是计算机可执行的最小单位,格式由操作数和操作码组成。

以最简单的一个运算指令--取反操作,来看一个指令的格式。

bit[15:12]=0001表示NOT操作,bit[11:9]表示目标寄存器,用于存计算后的操作码,bit[8:6]表示来源寄存器,用于从来源寄存器取出操作数做运算。bit[5:0]设计者固定为11111并无实际意义。

NOT指令执行过程:从来源寄存器取出操作数,做NOT操作,并把结果存入目标寄存器

二、指令的执行

指令的具体执行过程是在CPU的控制单元的控制信号下,一步一步执行的。大多数计算机的指令执行都有这六步,取指令->译码->地址计算->取操作数->执行->存放结果,一次完整的执行叫一个指令周期。

每个步骤的执行通常至少要一个机器周期(时钟周期),涉及从内存读取比较慢可能需要好几个机器周期(时钟周期)。

  1. 取指令:根据PC(程序计数器)的地址,取得内存中该地址的指令。
  2. 译码:根据指令bit[15:12]决定后续的控制命令
  3. 地址计算:如果指令是存取内存的操作,这个步骤需要计算地址
  4. 取操作数:从指令的来源取操作数。
  5. 执行:做操作,比如:加减乘除的算术操作或者“与”“或”“非”的逻辑操作
  6. 存放结果:把计算结果放到目标处

原文发布于微信公众号 - 林欣哲(gh_aba6caba3ac7)

原文发表时间:2017-10-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏FreeBuf

某租车系统JAVA代码审计

前言 由于开源的JAVA WEB项目不是很多,这里找到一个没有用struct2或是spring框架的cms,希望借此cms来帮助新手敲开JAVA代码审计的大门,...

48880
来自专栏企鹅号快讯

Upspin 中的错误处理

Upspin 项目使用自定义的包 —— upspin.io/errors —— 来表示系统内部出现的错误条件。这些错误满足标准的 Go error 接口,但是使...

249100
来自专栏Crossin的编程教室

这些年,你们一起踩过的坑(1)

编程教室创建5年多了,回答的问题不说上万也有好几千了。尽管大多数的问题在过去的文章以及论坛上都有讲过不止一遍,但因为不断有新人到来,难免还是被这些小坑磕磕绊绊一...

13250
来自专栏木子昭的博客

从3000行缩减到1000行,用django类代替视图函数

11020
来自专栏程序员的知识天地

Python代码注释的一些基础知识

在编写Python代码时,确保您的代码易于被其他人理解是很重要的。给变量、函数起合适的名字以及合理地组织代码都是很好的方法。

23560
来自专栏deed博客

day01笔记

17750
来自专栏java学习

Java基础第一天学习笔记

01.01_计算机基础知识(计算机概述)(了解) * A:什么是计算机?计算机在生活中的应用举例 * 计算机(Computer)全称:电子计算机,俗称电脑。是...

37950
来自专栏编程

看书的时候如何调试书中简单的C+代码?

代码看一百遍不如写一遍来的印象深刻,不管写C++还是Python,抑或别的语言,我们在看编程类书籍的时候面对一堆代码会很痛苦,硬着头皮啃完一本书可能会有所收获,...

23460
来自专栏铭毅天下

Elasticsearch聚合优化 | 聚合速度提升5倍!

? 1、聚合为什么慢? 大多数时候对单个字段的聚合查询还是非常快的, 但是当需要同时聚合多个字段时,就可能会产生大量的分组,最终结果就是占用 Elastic...

62270
来自专栏ytkah

群用户通过微信小程序可以更好地协作了

  今天,小程序向开发者开放了群ID的接口能力。简单地说,就是当你把小程序分享在群聊中,被点击后开发者可获取群ID和群名称,也方便更好地针对群场景提供个性化服务...

54050

扫码关注云+社区

领取腾讯云代金券