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

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

    教材学习内容总结

    第四章

    Y86指令
    • 只包括四字节整数操作。
    • 寻址方式比较少,操作也比较少。
    • 指令编码长度从1个字节到6个字节不等,一条指令含有一个单字节的指令指示符,可能含有一个单字节的寄存器指示符,还可能含有一个四字节的常数字。
    指令编码
    • 每条指令的第一个字节表明指令的类型。这个字节分为两个部分,每部分4位:高4位是代码部分,低4位是功能部分。功能值只有在一组相关指令共用一个代码时才有用。
    • 有的指令没有寄存器操作数(分支指令和call指令),就没有寄存器指示符字节;只需要一个寄存器操作数的指令(irmovl、pushl、popl),将另一个寄存器指示符设为0xF。
    Y86异常
    • Y86状态码

    • 出现异常时Y86处理器停止运行指令,也可以调用一个异常处理程序使其更完整。

    Y86程序
    Y86代码与IA32代码的主要区别:
    (1)Y86可能需要多条指令来执行一条IA32指令所完成的功能。
    
    (2)Y86没有伸缩寻址模式。
    
    以“.”开头的词是汇编命令,他们告诉汇编器调整地址,以便在那儿产生代码或插入一些数据。
    要实现一个数字系统需要三个主要的组成部分:
    (1)计算对位进行操作的函数的组合逻辑
    (2)存储位的存储器元素
    (3)控制存储器元素更新的时钟信号
    
    逻辑门

    逻辑门只对单个位的数进行操作,而不是整个字。一旦一个门的输入变化,在短时间内,输出就会跟着变化。

    组合电路和HCL布尔表达式
    • 组合电路:将很多的逻辑门组合成一个网,能构建计算块。
    • 组合逻辑电路和c语言中逻辑表达式的区别:
    组合电路的输出会持续地响应输入变化,c语言表达式只有在执行过程中被遇到才求值。
    
    C的逻辑表达式允许参数是任意整数,0是FALSE,其他任何值0的都是TRUE,逻辑门只对位值0和1操作。
    
    C的逻辑表达式可能被部分求值(第一个参数就能确定结果的就不会对第二个求值)。
    
    
    多路复用函数
    通用格式:
    [
       select_1(布尔表达式):expr_1(整数表达式)
       select_2:expr_2
        ......
       select_k:expr_k
    ]
    
    集合关系

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

    Y86的顺序实现

    • SEQ 顺序处理器:每一个时钟周期上,SEQ执行处理一条完整指令所需的所有步骤。
    • 各个阶段以及各阶段内执行操作
    取指:从存储器读取指令字节,地址为程序计数器PC的值
    
    译码:从寄存器读入最多两个操作数,得到valA或valB
    
    执行:算术/逻辑单元要么执行指令指明的操作,计算存储器引用的有效地址,要么增加或减少栈指针。得到的值为valE。
    
    访存:将数据写入存储器,或从存储器中读出数据,读出的值为valM。
    
    写回:最多可以写两个结果到寄存器文件
    
    更新PC:将PC设为下一条指令的地址
    
    
    SEQ硬件结构
    • 画图惯例:
    浅灰色方块表示硬件单元
    
    控制逻辑块是用灰色圆角矩形表示的
    
    线路的名字在白色椭圆中说明
    
    宽度为字长的数据连接用中等粗度的线表示
    
    宽度为字节或更窄的数据连接用细线表示
    
    单个位的连接用虚线
    
    SEQ的时序

    SEQ的实现包括组合逻辑和两种存储器设备:
    时钟寄存器 程序计数器和条件码寄存器

     随机访问存储器 寄存器文件、指令存储器和数据存储器
    
    SEQ阶段的实现
    • 取指阶段:以PC为第一个字节的地址,一次读6个字节
    • 译码和写回阶段:都需要访问寄存器文件,根据四个端口的情况,判断应该读哪个寄存器产生信号valA、valB。
    • 执行阶段: 包括算数/逻辑单元(ALU),包括条件码寄存器。
    • 访存阶段:读或者写程序数据。
    • 更新PC阶段:产生程序计数器的新值,依据指令的类型和是否要选择分支,新的PC可能是valC、valM或者valP。

    教材学习中的问题和解决过程

    • 问题1:在安装Y86模拟器时,出现以下错误:

    • 问题1解决:仔细看过安装教程之后发现是修改Makefile时错误,修改过后又出现如下错误:

    按照所给提示,最终还是未解决这个问题。

    • 最终解决: 再重新按照安装步骤一步一步检查,发现是自己粗心大意,在修改Makefile文件时,ltk后面少写了一个8.5!修改之后成功安装。

    代码调试中的问题和解决过程

    • 问题1:在进行实验楼实验时,输入命令sudo ln -s /usr/lib/x86_64-linux-gnu/libtk8.6.so /usr/lib/libtk.so来构建YIS环境时无反应。
    • 问题1解决:输入第二次该命令,提示ln:无法创建符号链接"/usr/lib/libtk.so":文件已存在

    可是不太理解为什么要输入两次这个命令。

    代码托管

    (statistics.sh脚本的运行结果截图)

    上周考试错题总结

    • 错题1
    下面和代码可移植性相关的C语言属性有()
    
     
    
    
    A  . 
    
    #define
    
    
    B  . 
    
    typedef
    
    
    C  . 
    
    sizeof()
    
    
    D  . 
    
    union
    
    
    
    
    正确答案: A  B  C
    

    理解:#define可以定义宏使得变量可移植,typedef可以使得类型可移植,sizeof()使得不同类型长度可移植。

    结对及互评

    点评模板:

    • 博客中值得学习的或问题:
      • xxx
      • xxx
      • ...
    • 代码中值得学习的或问题:
      • xxx
      • xxx
      • ...
    • 其他

    本周结对学习情况

    -[20155318](http://www.cnblogs.com/lxy1997/)
    - 结对照片
    - 结对学习内容
        - 教材第四章内容
        - 完成第二次实验
        - ...
    

    其他(感悟、思考等,可选)

    本周学习了Y86指令集、HCL硬件描述语言和Y86的顺序实现过程。在安装Y86模拟器时遇到许多问题,其中还有一些未解决,解决后会进行进一步的学习。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 133/133 1/1 8/8
    第三周 159/292 1/3 10/18
    第五周 121/413 1/5 10/28
    第七周 835/3005 2/7 10/38

    尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
    耗时估计的公式
    :Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

    参考:软件工程软件的估计为什么这么难软件工程 估计方法

    • 计划学习时间:15小时

    • 实际学习时间:10小时

    • 改进情况:

    (有空多看看现代软件工程 课件
    软件工程师能力自我评价表
    )

    参考资料

  • 相关阅读:
    APK自我保护方法
    Andorid APK反逆向解决方案---梆梆加固原理探寻
    判断android文件是否加壳
    java调用dll-JNA
    Java调用本地接口
    pat00-自测2. 素数对猜想 (20)
    pat00-自测4. Have Fun with Numbers (20)
    pat00-自测3. 数组元素循环右移问题 (20)
    pat00-自测1. 打印沙漏(20)
    pat1013. Battle Over Cities (25)
  • 原文地址:https://www.cnblogs.com/guyanlin/p/7768417.html
Copyright © 2011-2022 走看看