20135316王剑桥 linux第五周课实验笔记
4.1.1程序员的可见的状态
————
Y86的每条指令都会读取或修改处理器状态的某些部分,称为程序员可见状态.如图1所示.
1.程序寄存器(Program registers): %eax, %ecx, %edx, %ebx, %esi,%edi, %esp和%ebp.都是32位的.
2.条件码(Condition codes): ZF(零标志), SF(符号标志), OF(溢出标志).用来保存最近的算术或逻辑指令造成的影响.
3.程序计数器(PC):存放当前正在执行的地址.
4.存储器(Memory):在程序员看来, Y86程序使用虚拟存储器.
5.状态码(State):表明程序执行的总体状态,它指示正常运行,或者发生某种异常.
4.1.2指令集
————
图2是Y86指令集的简单描述.与IA32的AT&T指令集相似.操作的数据都是4字节的. 指令编码长度1-6个字节不等.
指令的格式大抵是: icode:ifun rA:rB D,具体如下图所示:
指令分类 |
具体指令 |
说明 |
|||||||||||||||
传送指令(XXmovl) (4种) |
|
Y86指令的寻址方式单一:基址+偏移量. |
|||||||||||||||
算术逻辑指令(opl) (4个) |
addl, subl, andl, xorl |
这4个指令的执行会设置条件码(CC). |
|||||||||||||||
跳转指令(jxx) (4个) |
jmp, jle, jl, je, jne, jge, jg |
jmp是无条件跳转指令,其他是条件跳转指令 (根据条件码选择分支). |
|||||||||||||||
条件传送指令(cmovXX) (6个) |
cmovle, cmovl, cmove, cmovne, cmovge, cmovg |
根据条件码选择是否更新目的寄存器. |
|||||||||||||||
call/ret指令 |
call/ret |
call将返回地址入栈,跳转目的地址. ret指令从过程调用中返回. |
|||||||||||||||
pushl/popl指令 |
pushl/popl |
入栈和出栈操作. |
|||||||||||||||
halt指令 |
halt |
停止执行指令指令.设置Stat位HLT. |
|||||||||||||||
nop指令 |
nop |
4.1.3指令集编码
————
Y86指令1-6个字节不等.第一个字节表明指令的类型,其中高4位是代码(code)部分,低4位是功能码(function). Y86的代码值0~0xB.
图3给出了整数操作,条件传送和条件传送指令的具体编码(第一个字节),其他指令的功能码是0(可以功能扩展).
寄存器编码
——
为了方便,每个程序寄存器使用4位编码,其中F表示无寄存器.
4.1.4状态码和异常
————
状态码(Stat)是程序员可见的状态之一,用来描述程序执行的总体状态.详见图5.
一个适用的处理器,当处理器遇到异常,会调用一个异常处理程序.在Y86,当遇到异常时,直接让处理器停止执行指令.
4.2 逻辑设计和硬件控制语言HCL
实现一个数字系统需要三个主要组成部分:位运算函数的组合逻辑、存储器元素、时钟信号。
VHDL的语法类似于Ada语言,而Verilog HDL的语法类似于C语言。
4.2.2 组合电路和HCL布尔表达式
组合电路的组成有两条限定:
1). 多个逻辑门的输出不能接在一起,否则会导致输入信号的矛盾。
2). 必须是无环的。
4.2.3 字级的组合电路和HCL整数表达式
算术/逻辑单元(ALU)是一种很重要的组合电路。
4.2.5 存储器和时钟控制
组合电路在本质上不存储任何信息,只是简单的响应输入信号,并产生某个函数输出。为了产生时序电路——就是具有状态并以状态为基础进行计算的系统,必须引入按位存储信息的设备。
两类存储设备:
时钟寄存器:存储单个字
随机访问存储器:存储多个字,用地址选择。例子包括虚拟存储器系统、寄存器堆;此处,寄存器标识符(ID)作为地址。
在硬件和机器级编程中,"寄存器"的含义有细微的差别。在硬件中,寄存器直接将其输入和输出线连接到电路的其它部分。在机器级编程中,寄存器代表CPU中为数不多的可寻址的字,这里的地址是寄存器ID。分别称这两类寄存器为硬件寄存器和程序寄存器。
4.3 Y86的顺序实现
4.3.1将处理组织成阶段
取指(fetch)
取值阶段从存储器读取指令字节,放到指令存储器(CPU中)中,地址为程序计数器(PC)的值。
它按顺序的方式计算当前指令的下一条指令的地址(即PC的值加上已取出指令的长度)
译码(decode)
ALU从寄存器文件(通用寄存器的集合)读入最多两个操作数。(即一次最多读取两个寄存器中的内容)
执行(execute)
在执行阶段会根据指令的类型,将算数/逻辑单元(ALU)用于不同的目的。对其他指令,它会作为一个加法器来计算增加或减少栈指针,或者计算有效地址,或者只是简单地加0,将一个输入传递到输出。
条件码寄存器(CC)有三个条件位。ALU负责计算条件码新值。当执行一条跳转指令时,会根据条件码和跳转类型来计算分支信号cnd。
访存(memory)
访存阶段,数据存储器(CPU中)读出或写入一个存储器字。指令和数据存储器访问的是相同的存储器位置,但是用于不同的目的。
写回(write back)
写回阶段最多可以写两个结果到寄存器文件。寄存器文件有两个写端口。端口E用来写ALU计算出来的值,而端口M用来写从数据存储器中读出的值。
更新PC(PC update)
根据指令代码和分支标志,从前几步得出的信号值中,选出下一个PC的值。
我们以SEQ(sequential 顺序的)处理器为例讲解CPU的基本原理。每个时钟周期上,SEQ执行处理一条完整指令所需的所有步骤。不过这需要一个很长的时钟周期时间,因此时钟周期频率会低到不可接受。
SEQ的时序
组合逻辑不需要任何时序或控制——只要输入变化了,值就通过逻辑门网络传播。
我们也将读随机访问存储器(寄存器文件、指令存储器和数据存储器)看成和组合逻辑一样的操作。(写随机访问存储器需要等待高电平)
由于指令存储器只用来读指令,因此我们可以将这个单元看成是组合逻辑。(内存向指令存储器中写指令是CPU外部的事件 不属于CPU内的时序)
每个时钟周期,程序计数器都会装载新的指令地址。
只有在执行整数运算指令时,才会装载条件码寄存器。
只有在执行mov、push、call指令时,才会写数据存储器。
要控制处理器中活动的时序,只需要寄存器和存储器的时钟控制。
因为指令运行计算的结果,写入寄存器或存储器中。
我们可以把取指、译码、执行等过程看做是组合逻辑的处理过程(因为它们不涉及写入寄存器)。把写回看做是另一个过程。
则整个过程可简化为下图所示:
学习中遇到的问题:
1.首先是对指令的不熟悉,有些地址变化不是很清楚,对指令的编码目前要借助书上的表格才能做到。以后要多多练习,增加熟悉程度。
2.对Y86的顺序实现只有抽象的认识,看了一遍书之后感觉很混乱,太多东西要记住,没有太多的实质认识,概念性东西太多了,通过实验操作更好的理解运用。
20135316王剑桥 linux第五周课实验笔记的更多相关文章
- 20135316王剑桥 linux第十周课实验笔记
关于who 功能说明:显示目前登入系统的用户信息. 语 法:who [-Himqsw][--help][--version][am i][记录文件] 补充说明:执行这项指令可得知目前有那些用户登入系统 ...
- 20135316王剑桥 linux第十一周课实验笔记
getenv函数 1.获得环境变量值的函数 2.参数是环境变量名name,例如"HOME"或者"PATH".如果环境变量存在,那么getenv函数会返回环境变量 ...
- 20135316王剑桥 linux第七周课实验笔记
第十章.程序间的交互和通信 输入/输出(I/O)是在主存和外部设备之间拷贝数据的过程.输入操作是从I/O设备拷贝数据到主存,而输出操作是从主存拷贝数据到I/O设备. 输入:从I/O拷贝到主存,输出:从 ...
- 20135316王剑桥 linux第六周课实验笔记
6.存储器层次结构 6.1存储技术 1.如果你的程序需要的数据是存储在CPU寄存器中的,那么在执行期间,在零个周期内就能访问到它们.如果存储在高速缓冲中,需要1-10个周期.如果存储在主存中,需要50 ...
- 20135316王剑桥 linux第三周课实验笔记
通过使用标准的字符码能够对文档中的字母和符号进行编码. 三种重要的数字表现形式: 1. 无符号数:编码基于传统的二进制表示法表示大于或等于零的数字. 2. 补码:编码是表示有符号整数的最常见方法,可以 ...
- 20135316王剑桥Linux内核学习记笔记第七周
20135316王剑桥<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC 1000029000 一.可执行程序是怎么得来的? 编译 ...
- 20135316王剑桥Linux内核学习笔记第三周
20135316王剑桥 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC 1000029000 三个法宝:存储程序计算机.函数调 ...
- 20135316王剑桥Linux内核学习笔记第四周
20135316王剑桥 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC 1000029000 1.内核态:在高执行级别,代码可 ...
- 20135316王剑桥Linux内核学习笔记
王剑桥Linux内核学习笔记 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 计算机是如何工作的 个人理 ...
随机推荐
- 谷歌浏览器 模拟微信浏览器user-agent
1.F12 2.Elments->Emulation Media: Other Network:Mozilla/5.0 (Linux; Android 4.4.4; HM NOTE 1LT ...
- Stack与Heap的区别
申明:这里所说的栈和堆是程序内存管理中的栈和堆,而不是数据结构里的栈和堆. (1)保存的内容不同:栈里保存的是局部变量,而堆里保存的是动态申请的变量. (2)栈里的内存系统自动申请和释放,程序执行出申 ...
- 谈谈JavaScript的2种主要继承方式
今天给自己巩固一下js的继承知识,基础不好,有不对的地方,请尽量拍砖,越重越好. js继承方法最主要的是2种,一种是通过原型的方式,一种是通过借用call&apply的构造函数方式. 1.原型 ...
- Git操作指令进阶
注意: 学习前请先配置好Git客户端 相关文章:Git客户端图文详解如何安装配置GitHub操作流程攻略 官方中文手册:http://git-scm.com/book/zh GIT 学习手册简介 本站 ...
- docker基础命令详解
Commands: attach Attach to a running container build Build an image from a Dockerfile commit ...
- 如何在TFS的过程模板中添加报表
在新建团队项目的过程中,TFS的"新建团队项目向导"会根据用户选择的过程模板类型(CMMI, Scrum,Agile等)自动为团队项目创建一个SSRS(SQL Server Rep ...
- WEB安全--CSRF防御
CSRF漏洞防御主要可以从三个层面进行,即服务端的防御.用户端的防御和安全设备的防御. 服务端的防御 目前服务器端防御CSRF攻击主要有5种策略(我知道的就这么多):验证HTTP Referer字段, ...
- 边工作边刷题:70天一遍leetcode: day 77
Paint House I/II 要点:这题要区分房子编号i和颜色编号k:目标是某个颜色,所以min的list是上一个房子编号中所有其他颜色+当前颜色的cost https://repl.it/Chw ...
- HDU 4941 Magical Forest --STL Map应用
题意: 有n*m个格子(n,m <= 2*10^9),有k(k<=10^5)个格子中有值,现在有三种操作,第一种为交换两行,第二种为交换两列,交换时只有两行或两列都有格子有值或都没有格子有 ...
- JMeter学习(二十五)HTTP属性管理器HTTP Cookie Manager、HTTP Request Defaults
Test Plan的配置元件中有一些和HTTP属性相关的元件:HTTP Cache Manager.HTTP Authorization Manager.HTTP Cookie Manager.HTT ...