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

处理器体系结构

Y86指令集体系结构

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

程序员可见状态:

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

Y86指令

  • 指令介绍:

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

指令编码

  • 在上图的右边,是指令所占的字节数或者说编码.一般两个寄存器占用一个字节,存储器则占用四个字街,指令的编码和功能占用一个字节.因此可以看到,比如rrmovl指令,它的字长长度是2,其中第一个字节代表了指令rrmovl,第二个字节代表了两个寄存器.
  • 对于opl,jxx,cmovxx指令来说,都有一个fn标致,占用4个二进制位(半个字节).这个便是指令的功能部分,这个是由于他们的指令编码一样,但功能有所不同所造成的.比如对于opl,就有加,减,与,异或等操作,那么它们的指令编码第一个字节就分别为十六进制的60,61,62,63.
  • 对于寄存器的表示,是使用4个二进制位表示的,这是一个ID标志.所有的寄存器可以看做是一个寄存器文件,其中的ID标志就类似于它们的地址.对于一些只需要一个寄存器的指令来说,另一个寄存器标志位使用0xF表示.
  • 还有的指令需要一个字的常数,比如irmovl指令,call指令等等.这种指令,将会把常数放在最后的四个字节当中,顺序按照大端法或小端法表示(与机器和OS有关).对于call指令来说,这四个字节就是一个地址,这个地址就是绝对地址,指向了存储器当中的某一个位置,这个位置存储着代码.采用绝对地址是为了描述简单,真实当中,时采取的基于PC的相对地址.

Y86异常

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

Y86程序

  • Y86指令和IA32代码的主要区别在于,它可能需要多条指令来执行一条IA32指令能完成的所有功能。
  • Y86没有伸缩寻址模式。
  • 以“.”开头的词是汇编器命令,命令.pos0告诉汇编器应该从地址0处开始产生代码。
  • 创建Y86代码的唯一工具是汇编器。
  • YIS:指令集模拟器
  • Y86和X86的区别在于,有的时候Y86需要两条指令来达到X86一条指令就可以达成的目的.
    • 比如对于X86指令中的addl $4,%ecx这样的指令,由于Y86当中的addl指令不包含立即数,所以Y86需要先将立即数存如寄存器,即使用irmovl指令,然后再使用addl来处理加法运算.
    • 总的来说,Y86就是X86的一个缩减版,他的目的就是以简单的结构来实现一个处理器,帮助我们了解处理器的设计和实现.

一些Y86指令的详情

  • 大多数Y86指令是以一种直接的方式修改程序状态的。
  • 执行pushl和popl指令时,处理器的行为是不确定的,因为要入栈的寄存器会被同一条指令修改。通常有两种约定:
    • 压入/弹出%esp的原始值
    • 压入/弹出%esp-/+4后的值

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

逻辑门

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

组合电路和HCL布尔表达式

  • 组合电路:将很多的逻辑门组合成一个网,能构建计算块。
  • 多路复用:根据输入控制信号的值,从一组不同的数据信号中选出一个。
  • 构建这些网有2条限制:
    • (1)两个或多个逻辑门的输出不能连接在一起
    • (2)这个网必须是无环的。
  • HCL表达式和C语言中逻辑表达式的区别:
    • (1)组合逻辑电路的输出会持续地响应输入的变化;C表达式只有在程序执行过程中被遇到时才会求值。
    • (2)C的逻辑表达式允许参数是任意整数,0表示FLASE,其他任何值都表示TRUE;逻辑门只对位值0和1进行操作。
    • (3)C的逻辑表达式可能只被部分求值;组合逻辑没有部分求值的规则,逻辑门只是简单地响应输入的变化。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 20篇 400小时
第一周 61/61 1/1 10/10 了解vim,gcc,gdb基本操作
第二周 0/61 1/2 10/20 了解信息的表示和处理
第三周 21/81 1/3 10/30 更深层次了解信息处理
第四周 29/100 2/5 10/40 Y86处理器

转载于:https://www.cnblogs.com/Miss-moon/p/9827092.html

2018-2019-1 20165237 《信息安全系统设计基础》第四周学习总结相关推荐

  1. 20135219洪韶武——信息安全系统设计基础第四周学习总结

    信息安全系统设计基础第四周学习总结 学习任务:教材第三章 学习时间:10小时 学习内容 一.教材知识梳理 1.程序编码与机器级代码 程序编码: gcc编译器,将源代码转化成可执行代码,C预处理器-汇编 ...

  2. 20135203齐岳 信息安全系统设计基础第四周学习总结

    20135203齐岳 信息安全系统设计基础第四周学习总结 学习计时:共17小时 读书:10 代码:1 作业:3 博客:3 一.学习目标 理解逆向的概念以及 掌握X86汇编基础,能够阅读(反)汇编代码 ...

  3. 信息安全系统设计基础第四周学习总结—20135227黄晓妍

    二进制数字系统和标准字符码 无符号(unsigned)编码基于传统的二进制表示法,表示大于或者等于零的数字. 补码(two's-complement)编码是表示有符号整数的最常见的方式,有符号整数就是 ...

  4. 信息安全系统设计基础第一周学习总结

    学习计时:共15小时 读书:1 代码:10 作业:13 博客:1 一.学习目标 1. 能够独立安装Linux操作系统 2. 能够熟练使用Linux系统的基本命令 3. 熟练使用Linux中用户管理命令 ...

  5. 信息安全系统设计基础第二周学习总结

    信息安全系统设计基础第二周学习总结 学习目标 1. 熟悉Linux系统下的开发环境    2. 熟悉vi的基本操作    3. 熟悉gcc编译器的基本原理    4. 熟练使用gcc编译器的常用选项 ...

  6. 20135219洪韶武——信息安全系统设计基础第九周学习总结

    信息安全系统设计基础第九周学习总结 学习时间:7小时 学习内容:课本第十章 一.第十章知识点(1~6) 第一部分:文件的概念及相关操作 1.每个unix文件都是一个m字节的序列:所有I/O设备如网络. ...

  7. 信息安全系统设计基础第九周学习总结

    第十章 系统级I/O的实践 学习目标: 代码阅读理解: 1.编译运行代码 2.使用man学习理解相关系统调用, 理解参数.返回值的含义 3.会用grep -nr xxx /usr/include 查宏 ...

  8. 20135323符运锦---信息安全系统设计基础第一周学习总结

    学习计时:共15小时 读书:1小时 代码:8小时 作业:4小时 博客:2小时 一.学习目标 1. 能够独立安装Linux操作系统   2. 能够熟练使用Linux系统的基本命令   3. 熟练使用Li ...

  9. 20135304刘世鹏——信息安全系统设计基础第一周学习总结

    第一节 Linux系统简介 一.Linux是一个操作系统 1. Linux 本身只是操作系统的内核.内核是使其他程序能够运行的基础. 它实现了多任务和硬件管理,用户或者系统管理员交互运行的所有程序 实 ...

  10. LINUX信息安全系统设计基础第一周学习总结

     Linux系统简介 一.实验内容 了解 Linux 的历史,Linux 与 Windows 的区别等入门知识. 二.实验要求 阅读linux简介与历史 三.实验步骤 二.Linux 与 Window ...

最新文章

  1. 利用adb命令查看apk文件包名的一些方法
  2. 设置ListView每条数据之间的间隔
  3. CocoaPods 的安装与卸载
  4. Shell(2)——shell里面的变量
  5. 固执己见的框架(例如Spring Boot)的危险。 求知代码反转
  6. 典型案例:TL的困局,自己忙不过来,团队没有结果
  7. TinkPHP内核仿每推推51领啦试客系统源码
  8. 图嵌入综述 (arxiv 1709.07604) 译文第一、二章
  9. SDWebImage之工具类
  10. android listview 只加载显示的图片大小,Android ListView只加载当前屏幕内的图片(解决list滑动时加载卡顿)...
  11. c语言流程图各个框的作用,C语言流程图的三种基本结构
  12. iMX6ULL上手体验
  13. IIS导入SSL证书
  14. 一个伪作家谈如何让孩子爱上写作文
  15. 【现代密码学】作业一
  16. Python程序不使用函数将字符大写
  17. 服务器状态监控app,服务器/网站连接状态监控工具
  18. java背单词软件_求背英语单词的手机JAVA软件
  19. 实现仿百度图片查看功能(点击缩略图放大效果)
  20. 教你替换文件名,如何批量更改部分文件名的操作方法

热门文章

  1. 杭电2037java实现
  2. 利用JavaScript中的原型给对像添加方法
  3. Oracle rollup 关键字用法简介.
  4. dialog对话框初始化 mfc_MFC中Dialog初始化顺序
  5. iOS - 利用 UIBezierPath 绘制圆弧
  6. 专用人格计算机测验题目,《应征入伍公民体格检查心理检测标准(暂行)》
  7. java pdf水印排布问题_Java实现pdf文件添加水印,铺满全页。
  8. 复制内存时检测到可能的io争用条件_这篇高并发服务模型大科普,内部分享时被老大表扬了...
  9. java怎么防止表单重复提交_如何防止表单重复提交
  10. 超大规模商用 K8s 场景下,阿里巴巴如何动态解决容器资源的按需分配问题?