zoukankan      html  css  js  c++  java
  • 2017-2018-1 20155220 《信息安全系统设计基础》第十四周学习总结

    2017-2018-1 20155220 《信息安全系统设计基础》第十四周学习总结

    学习目标

    找出全书你认为学得最差的一章,深入重新学习一下,要求(期末占5分):主要学习第四章

    • 总结新的收获
    • 给你的结对学习搭档讲解或请教,并获取反馈
    • 参考上面的学习总结模板,把学习过程通过博客(随笔)发表,博客标题“学号 《信息安全系统设计基础》第十四周学习总结”,博客(随笔)要通过作业提交,截至时间本周日 23:59。

    教材学习内容总结

    Y86指令集体系结构

    • 内容:定义一个指令集体系结构,包括定义各种状态元素、指令集和它们的编码、一组编程规范和异常事件处理

    程序员可见状态:

    • Y86程序中的每条指令都会读取或修改处理器状态的某些部分。
    • Y86具体包括:8个程序寄存器、3个条件码ZFSFOF、程序计数器(PC)。
    • Y86用虚拟地址引用存储器位置。 程序状态的最后一个部分是状态码Stat,它表明程序执行的总体状态。

    Y86指令

    指令介绍:

    • halt:这个指令将会终止指令的执行
    • nop:这是一个占位指令,他不做任何事,后续为了实现流水线,它有一定的作用
    • xxmovl:这是一系列的数据传送指令,其中r代表寄存器,m代表存储器,i代表立即数.比如rrmov指令,则代表将一个寄存器的值,赋给另外一个寄存器
    • opl:操作指令,比如加法,减法等等
    • jxx:条件跳转指令,根据后面的条件进行跳转
    • cmovxx:条件传送指令,后面的xx代表的是条件.特别的是,条件传送只发生在两个寄存器之间,不会将数据传送到存储器.
    • call与ret:方法的调用和返回指令.一个将返回地址入栈,并跳到目标地址.一个将返回地址入PC,并跳到返回地址.
    • push和pop:入栈和出栈操作

    Y86异常

    • 对Y86来说,程序员可见的状态中就有stat状态码,它标志了程序执行的状态.Y86需要有能力根据stat去做一些处理.捕获为了简单起见,这里除了正常执行之外,都将停止指令的执行.真实当中,会有专门的异常处理程序.
    • Y86有四种不同的状态码:AOK(正常),HTL(执行halt指令),ADR(非法地址)和INS(非法指令).

    Y86程序

    • Y86指令和IA32代码的主要区别在于,它可能需要多条指令来执行一条IA32指令能完成的所有功能。
    • Y86没有伸缩寻址模式。
    • 以“.”开头的词是汇编器命令,命令.pos0告诉汇编器应该从地址0处开始产生代码。
    • 创建Y86代码的唯一工具是汇编器。
    • YIS:指令集模拟器
    • Y86和X86的区别在于,有的时候Y86需要两条指令来达到X86一条指令就可以达成的目的.

    逻辑设计和硬件控制语言HCL

    逻辑门

    • 逻辑门是数字电路的基本计算元素,它们的输出,等于它们输入位值的某个布尔函数。
    • 逻辑门总是活动的,一旦一个门的输入变化,在短时间内,输出就会跟着变化。。

    组合电路和HCL布尔表达式

    • 组合电路:将很多的逻辑门组合成一个网,能构建计算块。

    • 多路复用:根据输入控制信号的值,从一组不同的数据信号中选出一个。

    • 构建这些网有2条限制:

      • (1)两个或多个逻辑门的输出不能连接在一起
      • (2)这个网必须是无环的。
    • HCL表达式和C语言中逻辑表达式的区别:

      • (1)组合逻辑电路的输出会持续地响应输入的变化;C表达式只有在程序执行过程中被遇到时才会求值。
      • (2)C的逻辑表达式允许参数是任意整数,0表示FLASE,其他任何值都表示TRUE;逻辑门只对位值0和1进行操作。
      • (3)C的逻辑表达式可能只被部分求值;组合逻辑没有部分求值的规则,逻辑门只是简单地响应输入的变化。

    字级的组合电路和HCL整数表达式

    • 执行字级计算的组合电力根据输入字的各个为,用逻辑门来计算输出字的各个位。
    • 用中等粗度的线来表示携带字的每个位的线路,用虚线来表示布尔信号结果。
    • 在HCL中,多路复用函数用情况表达式来描述。
    • 算术/逻辑单元是一种很重要的组合电路。

    集合关系

    • 判断集合关系的通用格式是:iexpr in {iexpr1,iexpr2,……,iexprk}

    存储器和时钟

    • 存储设备都是由同一个时钟控制,两类存储器设备包括:

      • 时钟寄存器(寄存器):储存单个位或字,用时钟信号控制寄存器加载输入值。
      • 随机访问储存器(储存器):储存多个字,用地址选择该读/写哪个字。
    • 硬件和机器级编程中的寄存器有细微差别,分为称为“硬件寄存器”和“程序寄存器”。

      • 在硬件中,寄存器直接将它的输入和输出线连接到电路的其他部分;
      • 在机器级编程中,寄存器代表的是CPU中为数不多的可寻址的字,这里的地址是寄存器ID。 Y86处理器会用时钟寄存器保存程序计数器(PC)、条件代码(CC)、程序状态(Stat)。
    • Y86处理器会用时钟寄存器保存程序计数器PC,条件代码CC和程序状态Stat。

    • 处理器有一个随机访问存储器来存储程序数据。

    • 处理器还包括另外一个只读存储器,用来读指令。

    • 在大多数实际系统中,这两个存储器被合并为一个具有双端口的存储器:一个用来读指令,一个用来读或写数据。

    Y86的顺序实现

    • SEQ处理器:每一个时钟周期上,SEQ执行处理一条完整指令所需的所有步骤。

    将处理组织成阶段

    • 取址:valP:PC的值加上已取出指令的长度。
    • 译码:读入指令rA和rB字段指明的寄存器。
    • 执行:ALU执行指令指明的操作,计算存储器引用的有效地址,要么增加或者减少栈指针,得到的值为valE;
    • 跳转指令来说,这个阶段会检验条件码和分支条件。
    • 访存:可以将数据写入存储器,或者从存储器读出数据。置为valM。
    • 写回:最多可以写两个结果到寄存器文件。
    • 更新:将PC设置成下一条指令的地址。

    SEQ的时序

    • SEQ的实现包括组合逻辑和两种存储器设备:时钟寄存器(程序计数器和条件码寄存器),随机访问存储器(寄存器文件、指令存储器和数据存储器)。
    • 每个时钟周期,程序计数器都会装在新的指令地址;只有在执行整数运算指令时,才会装载条件码寄存器;只有在执行rmmovl、pushl或call指令时,才会写数据存储器;寄存器文件的两个写端口允许每个时钟周期更新两个程序寄存器。

    SEQ阶段的实现

    • 在控制逻辑中必须被显式引用的常数:

    1.取指阶段

    • 以PC为第一个字节的地址,一次读6个字节。

    • icode:控制逻辑块计算指令

    • ifun:功能码

    • 三个一位的信号(根据icode值计算):

      • instr_valid:发现不合法的指令;
      • need_regids:包含寄存器指示符字节码;
      • need_valC:包括常数字码
    • 后五个字节是寄存器指示符字节和常数字的组合编码。

    2.译码和写回阶段

    • 都需要访问寄存器文件,根据四个端口的情况,判断应该读哪个寄存器产生信号valA、valB。
    • 寄存器文件,支持同时进行两个读和两个写,每个端口有一个地址连接(寄存器ID)和一个数据连接(32根线路),既可以作为寄存器文件的输出字,又可以作为他的输入字。

    3.执行阶段

    • 包括算数/逻辑单元(ALU),输出为valE信号。ALU通常作为加法器使用
    • 包括条件码寄存器
    • 每次运行产生:零、符号、溢出、产生信号set_cc

    4.访存阶段

    • 读或者写程序数据。
    • 两个数据块产生存储器地址和存储器输入证据的值,两个产生控制信号表明应该是读还是写。当执行读操作时,数据存储器产生valM。
    • 根据icode,imem_error,instr_valid,dmem_error,从指令执行的结果计算状态码Stat。

    5.更新PC阶段

    • 产生程序计数器的新值,依据指令的类型和是否要选择分支,新的PC可能是valC、valM或者valP。

    课后作业及实现

    • 确定下面的Y86指令序列的字节编码。".pos 0x100”那一行表明这段目标代码的起始地址应该是Ox100。

    • 答案:这段编码有以下特性值得注意:
      十进制的15(第2行)的十六进制表示为0x0000000f。以反向顺序来写就是0f 00 00 00。
      十进制-3(第5行)的十六进制表示为0xfffffffd。以反向顺序来写就fd ff ff ff。
      代码从地址0x100开始。第一条指令需要6个字节,而第二条需要2个字节。因此,循环的目标地址为0x00000108。以反向顺序来写就是08 01 00 00。

    • 确定下列每个字节序列所编码的Y86指令序列。如果序列中有不合法的字节,指出指令序列中不合法值出现的位置。每个序列都先给出了起始地址,冒号,然后是字节序列。

    • 答案:

    • 根据下面的C代码,用Y86代码来实现一个递归求和函数rSumint :

    {    if  (Count <=0)   
             return 0;   
       return *Start+rSum(Start+1,Count-1)
    }
    
    • 答案:

    • 填写下表的右边一栏,这个表描述的是图4-17中目标代码第7行上的popl指令的处理情况:

    • 答案:我们可以看到指令位于地址。0x01c,由两个字节组成,值分别为0xb0和0x08。pushl指令(第6行)将寄存器%esp设为了124,并且将9存放在了这个存储器位置。

    代码托管

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 0/0 2/2 5/5
    第二周 100/100 3/4 10/15
    第三周 100/200 4/5 20/35
    第四周 200/400 2/7 25/60
    第五周 1000/1400 2/9 35/95
    第六周 300/1700 3/12 50/135
    第七周 200/1900 2/14 45/180
    第八周 200/2100 1/15 55/235
    第九周 300/2400 3/18 45/280
    第十周 200/2600 0/18 20/300
    第十一周 100/2700 2/20 45/345
    第十四周 100/2800 1/24 35/445
  • 相关阅读:
    POJ 2533 Longest Ordered Subsequence(裸LIS)
    HDU 1159 Common Subsequence(裸LCS)
    HDU 1160(两个值的LIS,需dfs输出路径)
    HDU 1260 Tickets (普通dp)
    HDU 2859 Phalanx(对称矩阵 经典dp样例)
    2018年暑假ACM个人训练题7 题解报告
    HDU 1060 Leftmost Digit(求N^N的第一位数字 log10的巧妙使用)
    HDU 1071 The area(求三个点确定的抛物线的面积,其中一个点是顶点)
    HDU 1077 Catching Fish(用单位圆尽可能围住多的点)
    HDU 1099 Lottery (求数学期望)
  • 原文地址:https://www.cnblogs.com/20155220wsq/p/8097989.html
Copyright © 2011-2022 走看看