20145216史婧瑶《信息安全系统设计基础》第6周学习总结

20145216史婧瑶《信息安全系统设计基础》第6周学习总结

教材内容总结

第四章 处理器体系结构

第一节 Y86指令集体系结构

一、程序员可见的状态

1.含义:每条指令都会读取或修改处理器状态的某些部分

2.“程序员”:可以是用汇编代码写程序的人,也可以是产生机器级代码的编译器

3.具体的处理器状态:类似于IA32

  • 有8个程序寄存器:%eax,%ecx,%edx,%ebx,%esi,%edi,%esp,%ebp
  • 处理器的每个程序寄存器存储一个字
  • 寄存器%esp被入栈、出栈、调用和返回指令作为栈指针。在其他情况下,寄存器没有固定的含义或固定值
  • 有三个一位的条件码:ZF,SF,OF,它们保存最近的算术或洛基指令所造成英雄的有关信息
  • 程序计数器PC存放当前正在执行指令的地址

4.存储器:Y86程序用虚拟地址来引用存储器位置,硬件和操作系统软件联合起来将虚拟地址翻译成实际或物理地址

5.状态码stat:它表明程序执行的总体状态,会指示是正常运行还是出现了某种异常。

二、Y86指令

Y86指令集基本上是IA32指令集的一个子集,只包括四字节整数操作,寻址方式比较少,操作也较少。

汇编码表示和字节编码参见课本232页。

1.movl指令

IA32的movl指令分为四种:

irmovl,rrmovl,mrmovl,rmmovl

前面的两个字母是在显式的指定源操作数和目的操作数的格式,第一位是源操作数,第二位是目的操作数。

(1)源操作数

可以是:

i-立即数
r-寄存器
m-存储器

(2)目的操作数

可以是:

r-寄存器
m-存储器

※这里的存储器引用方式是简单的基址和偏移量形式,寻址方式不支持第二变址寄存器和任何寄存器值的伸缩

※两个操作数不能都是来自存储器,也不允许将立即数传送到存储器

2.四个整数操作指令

addl 加
subl 减
andl 与
xorl 异或

并且它们只对寄存器数据进行操作(区别于IA32,后者还允许对存储器数据进行这些操作)。

这些指令会设置三个条件码:

ZF-零
SF-符号
OF-溢出

3.七个跳转指令——分支控制

jmp 直接跳转
jle(SF^OF)|ZF 有符号数≤
jl SF^OF 有符号<
je ZF 相等/零
jne ~ZF 不相等/非零
jge ~(SF^OF) 有符号≥
jg ~(SF^OF)&~ZF 有符号>

4.六个条件传送指令

cmovle
cmovl
cmove
cmovne
cmovge
cmovg

这些指令的格式与寄存器-寄存器传送指令rrmovl一样,但是只有当条件码满足所需要的约束时,才会更新目的寄存器的值。

5.call和ret

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

6.pushl和popl

实现入栈和出栈

7.halt指令

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

类比IA32:hlt指令与之类似,但是IA32的应用程序不允许使用这条指令,因为它会导致整个系统暂停运行。

三、指令的字节级编码

每条指令需要1-6个字节不等,每条指令的第一个字节表明指令的类型。

1.第一个字节

这个字节分为两个部分,每个部分4位:

  • 高四位:代码部分,值域为0~0xB
  • 低四位:功能部分,功能值只有在一组相关指令共用一个代码时才有用

比如:课本第233页,Y86指令集的功能码:

整数操作里代码部分均为6,功能部分区分addl,subl,andl,xorl

分支指令里代码部分均为7

传送指令里代码部分均为2

这里要注意rrmovl归到了传送指令里,前面说过它们有相同的指令代码

8个程序寄存器中每个都有相应的0~7的寄存器标识符,程序寄存器存在CPU中的一个寄存器文件中,这个寄存器文件就是一个小的、以寄存器id作为地址的随机访问存储器。

当需要指明不应访问任何寄存器时,用ID值0xF表示

2.有的需要额外的字节

(1)附加的寄存器指示符字节

指定一个或两个寄存器,例如rA或者rB。

  • 没有寄存器操作数的指令,例如分支指令和call指令,就没有寄存器指示符字节。
  • 只需要一个寄存器操作数的指令(irmovl,pushl,popl)将另一个寄存器指示符设为0xF

(2)附加的4字节常数字

这个字的用处:

1.irmovl的立即数数据
2.rmmol和mrmovl的地址指示符的偏移量
3.分支指令和调用指令的目的地址

注意事项

1.分支指令和调用指令的目的地址是一个绝对地址
2.所有整数采用小端法编码

※指令集的重要性质:字节编码必须有唯一的解释

习题4.1的解答技巧:这道题只需要按照指令编码各个位上的值去对应即可,比如第一行,irmovl的指令是30f,目的操作数是%ebx,查表得3,源操作数是立即数15,转为16进制数为00 00 00 0f,小端法表示为0f 00 00 00,组合在一起即为30f30f000000。

习题4.2的解答技巧:这道题要注意划分数字为不同的指令。

四、Y86异常

1.状态码Stat的可能取值:(Stat描述程序执行的总体状态)

1. AOK 正常操作
2. HLT 处理器执行halt指令
3. ADR 遇到非法地址
4. INS 遇到非法指令

2.出现异常时

Y86——处理器停止运行指令,在更完整的设计中,处理器通常会调用一个异常处理程序

五、Y86程序

具体范例参见课本第238-239页

Y86和IA32代码对比来看,本质上两者相同,但是:

1.Y86和IA32的区别

1.Y86有时需要两条指令来完成IA32一条指令就能完成的事
2.Y86没有伸缩寻址模式

2.注意的一些:

(1)命令指明应该将代码或数据放在什么位置,以及该如何对齐

(2)以“.”开头的是汇编器命令

(3)创建Y86代码的唯一工具是汇编器,所以程序员必须执行本来通常交给编译器、链接器和运行时系统来完成的任务。

六、一些Y86指令的详情

特指popl和pushl,在压入/弹出栈指针%esp的时候,有两种不同的约定:

1.压入/弹出%esp的原始值
2.压入/弹出%esp-/+4后的值

经过试验,发现默认压入弹出的都是原始值。

pushl在不同的x86模型之间有歧义,但是popl没有。

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

一、逻辑门

1.逻辑门产生的输出,等于它们输入位值的某个布尔函数。

2.逻辑门对应的HCL表达式:

AND &&
OR ||
NOT !

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

4.逻辑门总是活动的,输入变化输出很快就跟着变化。

二、组合电路和HCL布尔表达式

1.构建计算块(组合电路)时的限制

  • 两个或多个逻辑门的输出不能连接在一起
  • 必须无环

2.组合逻辑电路和c语言中逻辑表达式的区别

  • 组合电路的输出会持续响应输入变化,c语言表达式只有在执行过程中被遇到才求值
  • 逻辑门只对0和1操作,c语言表达式中参数可以是任意整数,0是FALSE,不是0的都是TRUE
  • c的逻辑表达式可能被部分求值

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

这里面需要注意几个零碎的知识点:

  • 所有字级的信号都声明为int,不指定字的大小
  • 多路复用函数用情况表达式来描述,具体格式如下:
    [
      select_1 : expr_1
      select_2 : expr_2
      ……
    ]
    

    从逻辑上讲,这些选择表达式是顺序求值的。

  • 选择表达式为1时,表示如果前面没有情况被选中,就选择这种情况
  • 不同选择表达式之间允许不互斥

第三节 Y86的顺序实现

SEQ处理器

一、将处理组织成阶段

六个基本阶段:

  • 取指
  • 译码
  • 执行
  • 访存
  • 写回
  • 更新PC

具体每一阶段执行的内容见书250页,根据每一步计算的题目在253页习题4.11,做这个题的时候最要紧是注意每个字符代表的含义是什么,才能进行正确的计算。这个题不难,就是有点麻烦,多看多理解。

二、SEQ阶段的实现

1.取指阶段

以PC为第一个字节,读6个字节。

  • 两个逻辑块(从第一个字节中分出,各四位)

    icode-指令代码
    ifun-指令功能
    
  • 三个一位的信号(根据icode值计算)
    instr_valid-发现不合法的指令
    need_regids-包含寄存器指示符字节吗
    need_valC-包括常数字吗
    

后五个字节是寄存器指示符字节和常数字的组合编码。

2.译码和写回阶段

都需要访问寄存器文件,根据四个端口的情况,判断应该读哪个寄存器产生信号valA、valB

3.执行阶段

(1)包括算术/逻辑单元ALU,输出的是valE。

ALU常被用作加法器

(2)包括条件码寄存器

零,符号,溢出,产生信号set_cc

4.访存阶段

  • 读或者写程序数据。

两个数据块产生存储器地址和存储器输入证据的值,两个产生控制信号表明应该是读还是写。

  • 根据icode,imemerror,instrvalid,dmem_error,从指令执行的结果计算状态码Stat。

5.更新PC阶段

会产生程序计数器的新值。

Y86模拟器安装

1.安装bison和flex词法分析工具

在第一步就遇到了问题:

通过上网百度,得到两种解决方案:

  • 终端输入ps -aux,列出进程,找到含有apt-get的进程,直接sudo kill PID解决
  • 强制解锁,输入如下命令:
    sudo rm /var/cache/apt/archives/lock
    sudo rm /var/lib/dpkg/lock

安装bison和flex词法分析工具成功:

2.下载sim解压,地址http://csapp.cs.cmu.edu/public/students.html

在官方网站找到chapter4,可以看到source distribution项目,下载所需要的源文件。然后用tar xf sim.tar命令进行解压,再输入cd sim

3.图形界面需要安装Tcl/Tk

输入命令:sudo apt-get install tcl8.5-dev tk8.5-dev tcl8.5 tk8.5

4.进行文件的修改(打开文件目录下的makefile文件夹,用leafpad或者其他记事本进行修改)

GUIMODE=-DHAS_GUI       (去掉原有注释#)

TKLIBS=-L/usr/lib/ -ltk8.5 -ltcl8.5

TKINC=-I/usr/include/tcl8.5

5.编译

在sim文件夹下右键选择在终端中打开,输入make clean;make

学习中遇到的问题

问题:练习题4.1中我确认的字节编码总是和答案有出入

解决方案:通过查看答案,发现自己总是忘记以反向顺序来写

总结:当指令按照反汇编格式书写时,这些字节就以相反的顺序出现

实验楼练习

构建YIS环境:

YIS测试:

查看目录下内容,可以看到只有.ys文件:

用make all命令编译后:

编译后查看目录下内容,可以看到已经有编译后的.yo文件,用vim进入后可以查看:

课本第239页图4-7上的代码,在系统中叫做asum.yo,把它的内容打印在屏幕上:

可以看出来和课本240页的结果是一致的。

代码托管截图

链接:https://git.oschina.net/sjy519/linux-program-C/tree/master

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

通过前几周对教材内容的学习,我感觉自己在慢慢习惯这种独立解决课后练习的学习方式,虽然仍然存在很多不懂的问题,但是自己解决问题的能力却相比以前提高了。对于本周的学习,我认为关于逻辑门计算的部分学习起来相对于其他内容会觉得轻松一些,因为上学期有Verilog语言的基础,其次主要是Y86模拟器的安装花费了较多的时间,下载sim的地址总是无法打开,后来按照张晓涵同学博客中写的步骤做,终于安装成功。

学习进度条

  代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 3000行 30篇 300小时  
第一周 0/0 1/2 25/40 学习了Linux基础知识和核心命令 
第二周 0/0 0/2 0/40  
第三周 300/300 3/5 40/80
学习了vim、gcc、gdb指令;

学习了信息表示和处理

第五周 200/500 1/6 45/125
学习了程序的机器级表示

第六周 150/650 1/7 40/165
学习了处理器体系结构

时间: 2024-11-03 20:47:11

20145216史婧瑶《信息安全系统设计基础》第6周学习总结的相关文章

20145216史婧瑶《信息安全系统设计基础》第九周学习总结

20145216史婧瑶<信息安全系统设计基础>第九周学习总结 教材内容总结 第十章 系统级I/O 输入/输出(I/O)是在主存和外部设备之间拷贝数据的过程. 第一节 Unix I/O 这一节涉及到操作系统的基本抽象之一--文件.也就是说,所有的I/O设备都被模型化为文件,而所有的输入输出都被当做对相应文件的读/写.相关的执行动作如下: 1.打开文件: 应用程序向内核发出请求→要求内核打开相应的文件→内核返回文件描述符 文件描述符:一个小的非负整数,用来在后续对此文件的所有操作中标识这个文件.有

20145216 史婧瑶《信息安全系统设计基础》第一周学习总结

20145216 <信息安全系统设计基础>第一周学习总结 教材学习内容总结 Linux基础 1.ls命令 ls或ls .显示是当前目录的内容,这里“.”就是参数,表示当前目录,是缺省的可以省略.我们可以用ls -a .显示当前目录中的所有内容,包括隐藏文件和目录.其中“-a” 就是选项,改变了显示的内容.如图所示: 2.man命令 man命令可以查看帮助文档,如 man man : 若在shell中输入 man+数字+命令/函数 即可以查到相关的命令和函数:若不加数字,那man命令默认从数字较

20145311 《信息安全系统设计基础》第一周学习总结

20145311 <信息安全系统设计基础>第一周学习总结 教材学习内容总结 常用的部分命令 CTRL+SHIFT+T:新建标签页,编程时有重要应用: ALT+数字N:终端中切换到第N个标签页,编程时有重要应用: Tab:终端中命令补全,当输入某个命令的开头的一部分后,按下Tab键就可以得到提示或者帮助完成: CTRL+C:中断程序运行 Ctrl+D:键盘输入结束或退出终端 Ctrl+S: 暂定当前程序,暂停后按下任意键恢复运行 Ctrl+A: 将光标移至输入行头,相当于Home键 Ctrl+E

20145311 《信息安全系统设计基础》第二周学习总结

20145311 <信息安全系统设计基础>第二周学习总结 教材学习内容总结 重新学习了一下上周的一部分命令:grep main wyx.c(grep的全文检索功能)ls > ls.txt :ls内容输出到文本find pathname -mtime -n/+nfind -size -n/+n (find的功能还是比较强大) 简单地学习了一下vim编辑器,跟着vimtutor简单地学了一些,在linux bash中使用vim能够极大地提高效率, vim的用法比较多,只学习了其中简单的一部分

20145339《信息安全系统设计基础》第一周学习总结

20145339顿珠达杰<信息安全系统设计基础>第一周学习总结 ◆ Linux是一个操作系统.如果使用GUI,Linux和Windows没有什么区别.Linux学习应用的一个特点是通过命令行进行使用. 物理机系统上可以通过使用[Ctrl]+[Alt]+[F1]-[F6]进行终端和图形界面切换,在线实验环境中按下[Ctrl]+[Alt]+[F7]来完成切换.普通意义上的 Shell 就是可以接受用户输入命令的程序,Unix/Linux 操作系统下的 Shell 既是用户交互的界面,也是控制系统的

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

2017-2018-1 20155228 <信息安全系统设计基础>第九周学习总结 教材学习内容总结 常见的存储技术 RAM 随机访问存储器(Random-Access Memory, RAM)分为两类:静态的和动态的.静态 RAM(SRAM)比动态RAM(DRAM)更快,但也贵得多.SRAM用来作为高速缓存存储 器,既可以在CPU芯片上,也可以在片下.DRAM用来作为主存以及图形系统的帧缓冲 区.典型地,一个桌面系统的SRAM不会超过几兆字节,但是DRAM却有几百或几千兆 字节. SRAM将每

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

2017-2018-1 20155332 <信息安全系统设计基础>第九周学习总结 教材学习内容总结 简单模型中,存储器是一个线性的字节数组.真实模型中,是一个具有不同容量,成本,访问时间的存储层次结构(存储器山) 程序的局部性很重要,对程序性能有很重要的影响. 计算机系统一个基本而持久的思想,如果你理解了系统是如何将数据在存储器层级结构中上下移动,你就可以编写程序,让数据存储在层次结构中较高的地方,从而CPU可以更快的访问到他们. 编写程序实现功能是最简单的,如何让编写的程序拥有最高的性能,例

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

2017-2018-1 20155227 <信息安全系统设计基础>第九周学习总结 教材学习内容总结 第六章 随机访问存储器 随机访问存储器分为:静态RAM(SRAM)和动态RAM(DRAM),静态RAM(SRAM)比动态RAM(DRAM)更快,但也贵很多. (1)静态RAM SRAM将每个位存储在一个双稳态的存储器单元里,每个单元是用一个六晶体管电路来实现的. 属性:它可以无限制地保持在两个不同的电压配置或状态之一.其他任何状态都是不稳定的. 特点:由于SRAM的双稳态特性,只要有电,它就会永

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

2017-2018-1 20155334 <信息安全系统设计基础>第九周学习总结 学习目标: 了解常见的存储技术(RAM.ROM.磁盘.固态硬盘等) 理解局部性原理 理解缓存思想 理解局部性原理和缓存思想在存储层次结构中的应用 高速缓存的原理和应用 教材学习内容总结 一.常见的存储技术: 基本的存储技术包括随机存储器(RAM).非易失性存储器(ROM)和磁盘. 1. RAM分静态RAM(SRAM)和动态RAM(DRAM). 2. SRAM快些,主要用做CPU芯片上的高速缓存,也可以用作芯片下的

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

2017-2018-1 20155331 <信息安全系统设计基础>第九周学习总结 教材学习内容总结 存储器层次结构 存储技术 随机访问存储器 随机访问存储器分为:静态的SRAM.动态的DRAM 静态RAM: SRAM的特点:存储器单元具有双稳态特性,只要有电就会永远保持它的值,干扰消除时,电路就会恢复到稳定值. 动态RAM: DRAM的特点:每一位的存储是对一个电容的充电:对干扰非常敏感. 用途:数码照相机和摄像机的传感器 DRAM存储不稳定的应对机制: 存储器系统必须周期性地通过读出,或者重