zoukankan      html  css  js  c++  java
  • 第七周学习总结

    •与x86-64相比,Y86-64指令集的数据类型、指令和寻址方式都要少一些。它的字节级编码也比较简单,机器代码没有相应的x86-64代码紧凑。

    程序员可见状态
    •定义一个指令集体系结构(例如Y86-64)包括定义各种状态单元、指令集和它们的编码、一组编程规范和异常事件处理。

    •Y86程序中的每条指令都会读取或者修改处理器状态的某些部分。这称为程序员可见状态。

    •15个程序寄存器:%rax、%rcx、%rdx、%rbx、%rsp、%rbp、%rsi、%rdi、%r8-%r14。每个程序寄存器存储一个64位的字。%rsp被入栈、出栈、调用和返回指令作为栈指针。

    •有3个一位的条件码:ZF、SF和OF,它们保存最近的算术或逻辑指令所造成影响的有关信息。程序计数器(PC)存放当前正在执行指令的地址。

    •Y86-64程序用虚拟地址来引用内存位置。

    •序状态的最后一个部分是状态码Stat,它表明程序执行的总体状态。它会指示是正常运行,还是出现了某种异常。

    Y86-64指令
    •Y86-64指令集基本上是x86-64指令集的一个子集。它只包括8字节整数操作,寻址方式较少,操作数也较少。

    •movq指令分成了4个不同的指令:irmovq、rrmovq、mrmovq和rmmovq。分别显示地指明源和目的的格式:
    1.源操作数:立即数(i)、寄存器(r)或内存(m)。
    2.目的操作数:寄存器(r)、内存(m)。
    •指令名字的第一个字母就表示了源的类型、指令名字的第二个字母指明了目的的类型。

    •两个内存传送指令中的存储器引用方式是简单的基址和偏移量形式。
    •在地址计算中,我们不支持第二变址寄存器和任何寄存器值的伸缩。

    •不允许从一个内存地址直接传送到另一个内存地址。也不允许将立即数传送到内存。

    •4个整数操作指令:addq、subq、andq和xorq。

    •7个跳转指令:jmp、jle、jl、je、jne、jge和jg,根据分支指令的类型和条件代码的设置来选择分支。

    •6个条件传送指令:cmovle、cmovl、cmove、cmovne、cmovge和cmovg。

    •call指令将返回地址入栈,然后跳到目的地址。ret指令从这样的过程调用中返回。

    •pushq和popq实现入栈和出栈的操作。

    •halt指令停止指令的执行。
    •执行halt指令会导致处理器停止,并将状态码设置为HLT。

    指令编码
    •每条指令的第一个字节表明指令的类型。这个字节分为两个部分,每部分4位:高4位是代码部分,低4位是功能部分。功能值只有在一组相关指令共用一个代码时才会有用。

    •指令的字节级编码规则:每条指令的第一个字节表明指令的类型。分为两个部分,高4位是代码部分,低4位是功能部分。代码值为0~0xB,功能值只有在一组相关指令共用一个代码时才有用。
    •15个程序寄存器当中,每个都有一个相对应的0~0xE之间的寄存器标识符。

    •程序寄存器存在CPU中的一个寄存器文件中,这个寄存器文件就是一个小的、以寄存器ID作为地址的随机访问存储器。

    •分支指令和call指令,就没有寄存器指示符字节。

    •只需要一个寄存器操作数的指令(irmovq、pushq、popq)将另一个寄存器指示符设为0xF。

    •指令集的一个重要性质就是字节编码必须有唯一的解释。

    Y86-64异常
    •对Y86-64来说,程序员可见的状态码包括Stat,它描述程序执行的总体状态,这个代码可能的值如下:

    名字

    含义

    1 AOK 正常操作
    2 HLT 遇到器执行halt指令
    3 ADR 遇到非法地址
    4 INS 遇到非法指令
    •指令模拟器,称为YIS,他的目的是模拟Y86-64机器代码程序的执行,而不用试图模拟任何具体处理器实现的行为。

    逻辑设计和硬件控制语言HCL
    •要实现一个数字系统需要的三个主要的组成部分:计算对位进行操作的函数的组合逻辑、存储位的存储器单元,以及控制存储器元素更新的时钟信号。

    •逻辑门是数字电路的基本单元。它们产生的输出,等于它们输入位值的某个布尔函数。

    •逻辑门只对单个位的数进行操作,而不是整个字。

    •逻辑门总是活动的。一旦一个门的输入变化了,在短时间内,输出就会相应变化。

    •将很多逻辑门组合成一个网,就能构建计算块,称为组合电路。构建这些网有几个限制:
    1.每个逻辑门的输入必须连接到下述选项之一:(1)一个系统输入;(2)某个存储器单元的输入;(3)某个逻辑门的输入。
    2.两个或多个逻辑门的输出不能连接在一起。否则可能使线上信号矛盾,可能会导致一个不合法的电压或电路故障。
    3.这个网必须是无环的。否则会导致该网络计算的函数有歧义。

    •HCL表达式很清楚地表明了组合逻辑电路和c语言中逻辑表达式的对应之处。它们都是用到布尔操作来对输入进行计算的函数,但是,这两种表达计算的方法之间也是有区别的。

    •在HCL中,我们将所有字级的信号都声明为int,不指定字的大小。

    •HCL允许比较是否相等,与c的使用方法一样,‘=’表示赋值,‘==’表示相等。

    •处理器中会用到很多多路复用器,使得我们能够根据某些控制条件,从很多源中选出一个字。在HCL中,多路复用函数是用情况表达式来描述的。情况表达式的通用格式如下:

    [
    select1:expr1;
    select2:expr2;
    .
    .
    .
    selectk:exprk
    ]
    •组合电路本质上讲,不存储任何信息。相反,它们只是简单的响应输入信号,产生等于输入的某个函数的输出。

    •时序电路:有状态并且在这个状态上进行计算的系统。

    •两类存储器设备:
    (1)时钟寄存器(简称寄存器):储存储单个位或字,时钟信号控制寄存器加载输入值。
    (2)随机访问存储器(简称内存):存储多个字,用地址来选择该读或者写哪个字。

    •Y86-64处理器会用时钟寄存器保存程序计数器(PC)、条件代码(CC)和程序状态(Stat)。

    Y86-64的顺序实现
    •处理一条指令包括很多的操作。将他们组织成某个特殊的阶段序列,即使指令的动作差异很大,但所有的指令都遵循统一的序列。

    •六个阶段内执行的操作:
    (1)取指;从内存读取指令字节,地址为程序计数器(PC)的值。抽取指令指示符字节两个四位部分,称为icode(指令代码)和ifun(指令功能)。有如下公式:vaIP(下一条指令的地址)=PC+已取出指令的长度。
    (2)译码:从寄存器文件读入最多两个操作数,得到valA和/或valB。
    (3)执行:算术/逻辑单元要么执行指令指明的操作,计算内存引用的有效地址,要么增加或减少栈指针。得到的值称为valE。
    (4)访存:将数据写入内存,或从内存读出数据。读出的值为valM。
    (5)写回:最多可以写两个结果到寄存器文件。
    (6)更新PC:将PC设成下一条指令的地址。
    处理器无限循环,执行这些阶段,在简化的实现中,一旦发生任何异常,处理器就会停止。

    •SEQ的实现包括组合逻辑和两种存储器设备:
    (1)时钟寄存器、程序计数器和条件码寄存器,随机访问存储器。
    (2)程序计数器、条件码寄存器。数据内存和寄存器文件。

    •通过一个时钟信号来控制,触发将新值装载到寄存器以及将值写到随机访问存储器。

    •每个时钟周期,程序计数器都会装载新的指令地址。

    •只有在执行整数运算指令时,才会装载条件码寄存器。

    •只有在执行rmovq、pushq或call指令时,才会写数据内存。

    •SEQ阶段的实现:
    (1)取指阶段(包括指令内存硬件单元):以PC为第一个字节的地址,一次从内存读10个字节。
    三个一位的信号:
    instr_valid:用于发现不合法的指令
    need_regids:是否包含寄存器指示符字节
    need_valC:是否包括常数字
    (2)译码和写回阶段:寄存器文件有四个端口,支持同时进行两个读和两个写。每个端口有一个地址连接(寄存器ID)和一个数据连接(64根线路),既可以作为寄存器文件的输出字,又可以作为它的输入字。
    (3)执行阶段:包括算数/逻辑单元(ALU),输出为valE信号。
    (4)访存阶段:读或者写程序数据。两个控制块产生内存地址和内存输入数据的值。另外两个块产生表明应该执行读还是写操作的控制信号。当执行读操作时,数据内存产生valM。
    (5)更新PC阶段:SEQ的最后一个阶段会产生程序计数器的新值,依据指令的类型和是否要选择分支,新的PC可能是valC、valM或者valP。

  • 相关阅读:
    WCF 第八章 安全 确定替代身份(中)使用AzMan认证
    WCF 第八章 安全 总结
    WCF 第八章 安全 因特网上的安全服务(下) 其他认证模式
    WCF Membership Provider
    WCF 第八章 安全 确定替代身份(下)模仿用户
    WCF 第八章 安全 因特网上的安全服务(上)
    WCF 第九章 诊断
    HTTPS的七个误解(转载)
    WCF 第八章 安全 日志和审计
    基于比较的排序算法集
  • 原文地址:https://www.cnblogs.com/qm20165239/p/9943851.html
Copyright © 2011-2022 走看看