CO-4-指令系统
2021-08-06 15:20:57 0 举报
AI智能生成
计算机组成原理 第四章 指令系统 知识点梳理
作者其他创作
大纲/内容
PC永远指向下一条指令的地址
寻址方式实际上就是确定PC的值的变化方式
问题:CPU如何知道下一条指令存在哪里?
此处的1理解为一个指令字长
实际的增量会因指令格式、指令长度、主存编址方式不同而发生变化
取指阶段结束就会令PC+1
PC+\"1\"
顺序寻址
转移类指令执行就会改变PC的值
但是在取指之后,执行完之前,仍有PC+1的操作
根据转移类指令给出下一个指令的地址
指令寻址方式
不同的程序不同时刻可能装入不同的主存位置不能直接根据地址码访问对应的主存地址
问题:如何确定本条指令的地址码指明的真实地址EA(EffectiveAddress)
通过地址码的头几位,指明地址的“解读方式”
取数据访存1次
无需计算操作数地址
寻址范围有限,受到指令字长限制
直接寻址:形式地址就是真实地址
取数据访存2次
ie ((A))=(A1)=真实地址
一次间址、两次间址
寻址空间不受指令长度限制
(多次间址)便于编制程序,方便子程序返回
间接寻址:形式地址是真实地址存储单元的地址
取数据访存0次
速度飞快,不访问主存
寄存器少,编号短,指令字短,寻址能力有限
支持向量、矩阵运算
寄存器寻址:地址码给出存储操作数的寄存器
比一般间址快,但是访存,快不了多少
寄存器间接寻址:地址码给出存储操作数地址的寄存器
默认某个操作数为ACC
需要增加一个硬件存储和指令对应的操作数
隐含寻址:指令中隐含一个地址不显式给出
笑死,根本不寻址,取数据不需要访存
操作数又称立即数,一般以补码表示,以#xxx表示立即数一般也可以直接用#来标识立即寻址方式。
立即数表示范围有限
立即寻址:地址码就是操作数
或者用一个指令指明的通用寄存器作为BR
程序运行前,CPU将BR修改为其起始地址,存放于OS的PCB(进程控制块)中
BR可以由用户在汇编中指定,但不能对其寄存的内容进行控制,只能交由OS。
一般有专用的基址寄存器BaseRegister
对于不知道要装入主存何位置的程序可用基址寻址寻找程序内的任意位置
方便程序在内存中的浮动
方便多道程序并行运行
基址寻址:以程序起始点作为基点EA=(BR)+A
亦可指定一个通用寄存器作为IX
IX面向用户,可以手动修改其中的值
用变址寄存器Index-Register作为基地址
提高汇编代码循环体内指令的可复用性提高访问数组的工作效率
EA=(IX)+((BR)+A)
基址/变址复合寻址
变址寻址:程序员决定以哪里为基点EA=(IX)+A
A可正可负,用补码表示
在PC的值上加A形成地址
故是相对于下一条指令为A的地址
要注意CPU取指后PC+1
便于代码在程序内的浮动
广泛用于转移指令
用于方便地在程序内进行跳转同时不受程序存储位置的影响
实现了代码段数据段分离,修改代码后无需频繁调整相对地址
分段地址码
相对寻址:以PC所指地址作为基点EA=(PC)+A
偏移寻址(3):形式地址是相对某地址的偏移量访存1次
隐含使用堆栈指针SP(指向栈顶)
硬堆栈无需访存,软堆栈POP/PUSH各一次访存
堆栈可能存在主存中(软堆栈)也可能有专用堆栈寄存器组(硬堆栈)
注意栈的生长方向
执行过程
堆栈寻址:到栈顶和次栈顶寻找操作数,算完放回去
数据寻址
2-8法则:典型程序中80%的语句仅仅使用了处理器20%的指令
存储程序:由相对通用的电路配合一个存储器完成一条复杂指令,这种程序称为“微程序”
复杂功能用电路往往不好实现
可选实现“指令流水线”
CISC一条指令完成复杂的基本功能:x86
复杂逻辑用组合逻辑控制,效率高于“微程序”
一条指令一个电路,设计简单, 功耗低
方便“并行”“流水线”的技术实现
RICS一条指令完成一个基本“动作”,多条指令组合完成复杂的基本功能:ARM
所谓CISC和RICS指复杂/精简指令集
CISC与RISC
解析指令
根据指令控制、协调其他部件工作
控制器的基本功能
程序编译都会形成一系列指令,包含操作码和地址码
操作码OP
停机指令无需地址码(地址码无意义)
一般以表示主存地址,表示地址中的数据
地址码A
是计算机的最小功能单位
指令
指令系统有部分不提供给用户直接使用的指令,由CPU自动管理、产生、执行。
隐指令不属于任何指令分类,分类是在用户指令的基础上讨论的
隐指令
一台计算机支持的指令的集合
CPU架构如x86、ARM...的指令集不同
指令集(指令系统)
基本概念
空操作、停机、关中断等
表达式计算
堆栈型计算机中,操作数隐含的放在栈顶和次栈顶,计算结果压回栈顶
0地址指令
完成一次需要3次访存:取指、读地址、写地址
操作只需一个操作数:+1、-1、取反、求补等
完成一次指令需要2次访存:取指、读A1(写ACC不需要访存)
需要两个操作数,但是另一个操作数隐含在某个寄存器(如ACC)
1地址指令
完成一次需要4次访存:取指、读A1、读A2、写A1
默认是写回A1的
操作需要2个操作数
2地址指令
完成一次需要4次访存:取指、读A1、读A2、写A3
三地址指令的A3是显式给出的写回地址
操作需要2个操作数有一个写回地址
3地址指令
完成一次需要5次访存:取指、读A1、读A2、写A3、读A4
四地址指令的A3是显式给出的写回地址
注意是(A4)
其他指令执行完PC+1,四地址指令执行完PC=(A4)
操作需要2个操作数有一个写回地址有一个下一指令地址
4地址指令
根据地址码数目
机器字长:绝对不变,取决于ALU
存储字长:取决于存储单元设计,一般和MDR位数相同
指令字长影响取指所需时间
变长指令字结构:指令集中指令不等长
定长指令字结构:指令集中指令等长
指令字长:可变,所谓x字长指令是指的指令长度是机器字长的x倍
3个字长
半字长指令
单字长指令
双字长指令
根据指令长度
可变长操作码
n位指令字长最多支持2^n条指令
译码简单,灵活性低
定长操作码
根据操作码长度
LOAD存储器→寄存器、STORE寄存器→存储器
数据传送
加减乘除、增1、减1、求补、浮点、十进制
算数
与、或、非、异或、位操作、位测试、位清除、位取反
逻辑
算术逻辑操作
带进位、不带进位
循环
移位操作
无条件转移JMP
条件转移:JZ结果为0、JO结果溢出、JC结果有进位
调用CALL、返回RETURN
陷阱(Trap)与陷阱指令
转移操作任何转移操作都会改变PC
IO端口即为IO接口中的寄存器
CPU寄存器到IO端口的数据传送
输入输出操作
根据操作类型
运算类
程序控制类:改变程序执行顺序
输入输出类
数据传送类
分类
不同地址数的指令使用不同长度的操作码
对于3地址指令,操作码只有4位,对应16种组合,但只取15条作为3地址指令,留一条1111用于扩展到其他长度的操作码
同理将16条1111xxxx型操作码分配给15条2地址指令和1条扩展操作码
同理将16条1111 1111 xxxx型操作码分配给15条1地址指令和1条扩展操作码
将16条1111 1111 1111 xxxx型操作码分配给16条0地址指令
扩展操作码可以超过一条,只要等长操作码少几条就行
以16位指令字长,每个地址码占4位为例
例
不允许短码是长码的前缀参考哈夫曼编码
操作码不可重复
对使用频率较高的指令分配较短的操作码,尽可能减少指令译码和分析的时间
扩展操作码指令格式定长指令字结构+可变长操作码
指令格式
OS中的重定位寄存器就是BR
名称不分大小写
x86处理器有8个32位通用寄存器
低两字节称xX,总称ExX
低两位可分为xH和xL
EAX、EBX、ECX、EDX高两位、低两位分别可独立使用
除了EBP和ESP外,其他寄存器的用途相对任意
各寄存器名称及含义说明
主要寄存器表
在内存和寄存器间移动数据,参数1是目的地址,参数2是源地址
使用例
错误用例 注:最多只能利用两个32bit寄存器和1个32bit的有符号常数相加计算得一个内存地址
以mov为例
寻址模式
一般显式地使用DB(Data Byte),DW(Data Word(2B/word)),DD(Data Double Word(4B))
对于无特殊标记的情况,可以用“byte ptr”“word ptr”“dword ptr”
数据类型长度内存分配
<reg>(<reg8>/<reg16>/<reg32>)寄存器
<mem>内存地址
<con>(<con8>/<con16>/<con32>)常数
符号
不能直接从内存复制到内存
mov移动
push <reg32>push <mem>push <con32>
push压栈
pop edipop [eax]
pop出栈
数据传送指令(3)
结果存到第一操作数
add/sub 加减
inc/dec 自增自减
2操作数:两数相乘,结果放到第一个寄存器
3操作数:第二、三操作数相乘,结果放到第一个寄存器
imul 带符号整数乘法
操作数为除数
被除数是eax,结果:商回送eax,余数edx
idiv 带符号整数除法
and/or/xor 位逻辑运算,结果写回第一个操作数
not 位取反
neg 取负
shl/shr 逻辑左/右移位
算数和逻辑运算(8(13))
可以通过标签实现指示指令jmp标签即可
jmp <label>
jmp无条件跳转
比较结果存于PSW
cmp比较
je <label> ;when equal
jne <label> ;when not equal
jz <label> ;when last result is 0
jg <label> ;when greater than
jge <label> ;when ≥
jl <label> ;when less than
jle <label> ;when ≤
jcondition条件跳转
call <label>ret
call/ret子程序调用/返回
控制流指令
指令表
X86汇编指令简介
指令系统
0 条评论
回复 删除
下一页