第四章 处理器体系结构
第一节 Y86指令集体系结构
Y86指令
IA32的movl指令分为四种:irmovl,rrmovl,mrmovl,rmmovl
与Ia332不同的是前面多了限制位,im,前面字母表示的意思为钱一个操作数传到后一个操作数的缩写
※这里的存储器引用方式是简单的基址和偏移量形式,寻址方式不支持第二变址寄存器和任何寄存器值的伸缩
※两个操作数不能都是来自存储器,也不允许将立即数传送到存储器
四个整数操作指令
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
这些指令的格式与寄存器-寄存器传送指令rrmovl一样,但是只有当条件码满足所需要的约束时,才会更新目的寄存器的值。
call和ret
call指令将返回地址入栈,然后跳到目的地址,ret指令从这样的过程调用中返回。
pushl和popl
实现入栈和出栈
halt指令
halt指令停止指令的执行,执行此指令会导致处理器停止,并将状态码设置为HLT。
类比IA32:hlt指令与之类似,但是IA32的应用程序不允许使用这条指令,因为它会导致整个系统暂停运行。
注意事项:
1,与Ia不同的是一些指令的写法
2,逻辑功能与其他运算需要的功能有区别,并没有像IA那样有庞大的运算指令,其他功能需要的操作由基本操作复合而成
指令的字节级编码
每条指令需要1-6个字节不等,每条指令的第一个字节表明指令的类型。
这个字节分为两个部分
- 高四位:代码部分,值域为0~0xB
- 第四位:功能部分,功能值只有在一组相关指令共用一个代码时才有用。
注意事项:
1 当需要指明不应访问任何寄存器时,用ID值0xF表示
2 编写序列是以小编法来编译的
3 通常情况下,前序列为操作指令,后面的为相应操作地址,并且为绝对地址
Y86异常
1.状态码Stat的可能取值
Stat描述程序执行的总体状态
1. AOK 正常操作
2. HLT 处理器执行halt指令
3. ADR 遇到非法地址
4. INS 遇到非法指令
出现异常时,Y86——处理器停止运行指令。
注意事项:
1 这些指令需要判断状态码
2 可以方便中断操作,比如Call 21H
小结:
Y86语言更接近于机器,许多操作可以用基本操作代替时,都会复写成简单操作的组合
Y86没有相应的识别能力,只会对相应的序列做对应的操作,主要体现在同一条语句pop pushl就会出现歧义
第二节 逻辑设计和硬件控制语言HCL
逻辑门 AND && ,OR || ,NOT !
HCL:逻辑表达式就是逻辑关系
小结:
就是对应于逻辑关系式,写出对应关系
机器做法与之类似
Y86的顺序实现
SEQ处理器
一、将处理组织成阶段
(一)六个基本阶段:
- 取指
- 译码
- 执行
- 访存
- 写回
- 更新PC
小结:
主要集中于不同的指令需要对应不同的阶段,主要还是各阶段的组合
SEQ有点类似于路由器的编制,在需要对信息进行处理的时候就会添加到相应的地址进行操作再把结果反馈回来
更新有利于系统的长久使用
参考资料
课本
阎佳欣博客
百度