标签:
存储器
Y86程序用虚拟地址来引用存储器位置,硬件和操作系统软件联合起来将虚拟地址翻译成实际或物理地址
它表明程序执行的总体状态,会指示是正常运行还是出现了某种异常。
irmovl,rrmovl,mrmovl,rmmovl
前面的两个字母是在显式的指定源操作数和目的操作数的格式,第一位是源操作数,第二位是目的操作数。
addl 加subl 减andl 与xorl 异或
并且它们只对寄存器数据进行操作,会设置三个条件码ZF\SF\OF
jmp 直接跳转jle(SF^OF)|ZF 有符号数≤jl SF^OF 有符号<je ZF 相等/零jne ~ZF 不相等/非零jge ~(SF^OF) 有符号≥jg ~(SF^OF)&~ZF 有符号>
Cmovle 、cmovl 、cmove 、cmovne 、cmovge 、cmovg
halt指令停止指令的执行,执行此指令会导致处理器停止,并将状态码设置为HLT。
字节编码必须有唯一的解释
每条指令需要1-6个字节不等,每条指令的第一个字节表明指令的类型。
整数操作里代码部分均为6,功能部分区分addl,subl,andl,xorl
分支指令里代码部分均为7
传送指令里代码部分均为2
当需要指明不应访问任何寄存器时,用ID值0xF表示
指定一个或两个寄存器,例如rA或者rB。
1.irmovl的立即数数据2.rmmol和mrmovl的地址指示符的偏移量3.分支指令和调用指令的目的地址
Stat描述程序执行的总体状态
1. AOK 正常操作2. HLT 处理器执行halt指令3. ADR 遇到非法地址4. INS 遇到非法指令
1.符号表示:AND &&OR ||NOT !
2.逻辑门只对单个位的数进行操作,而不是整个字。
限制:
判断集合关系的通用格式是:
iexpr in {iexpr1,iexpr2,...,iexprk}
iexpr等都是整数表达式。
(1)时钟寄存器(简称寄存器):储存单个位或字。
(2)随机访问储存器(简称储存器):储存多个字,用地址选择该读/写哪个字。
它会用时钟寄存器保存程序计数器PC,条件代码CC和程序状态Stat。
SEQ的实现包括组合逻辑和两种存储器设备:
1.时钟寄存器——程序计数器和条件码寄存器2.随机访问存储器——寄存器文件、指令存储器和数据存储器
对于上面提到的五个硬件单元,可以分成两类:
1.组合逻辑——指令存储器2.时序:
条件码寄存器——只在执行整数运算指令时装载数据存储器——只在执行rmmovl、pushl或call时写入寄存器文件——两个写端口允许每个时钟周期更新两个程序寄存器。特殊寄存器?0xF表示此端口不应执行写操作。
以PC为第一个字节,读6个字节。
两个逻辑块(从第一个字节中分出,各四位)
icode-指令代码ifun-指令功能
三个一位的信号(根据icode值计算)
instr_valid-发现不合法的指令need_regids-包含寄存器指示符字节吗need_valC-包括常数字吗
后五个字节是寄存器指示符字节和常数字的组合编码。
(1)包括算术/逻辑单元ALU,输出的是valE。
ALU常被用作加法器
(2)包括条件码寄存器
零,符号,溢出,产生信号set_cc
根据icode,imem_error,instr_valid,dmem_error,从指令执行的结果计算状态码Stat。
实验五:
Y86编写得程序文件
标签:
原文地址:http://www.cnblogs.com/20135302wei/p/4890165.html