总结
指令格式
1.指令
指令字长和机器字长没有必然的联系。
操作码 | 地址码 |
---|
零地址指令: 不需要操作数或者堆栈问题。
一地址指令: 自操作或者ACC。
二地址指令: a = a + b。
三地址指令: c = a + b。
四地址指令: c = a + b , next。
遇到的问题:
通用寄存器的个数: 查看寄存器有几个,Rn。
字长,字,字节,位的关系:
字和字节本身没有关系,根据计算机标准来走。例如:16位机器:机器字长 = 字= 16位;
名称 | 英文 | 解释 |
---|---|---|
字 | – | 就是机器字长 |
字节 | Byte | 1Byte = 8 bit |
位 | bit | 1Byte = 8 bit |
2.定长操作码
最高位部分分配若干定长表示操作码。
3.扩展操作码
每层留一条作为扩展指令。
要求: 短不能和长前面的一致;每个操作码也不能一致;高频短,低频长。
指令寻址方式
1.指令寻址
顺序(PC + 1),跳跃(PC + x,下一节点依旧由PC给出)。
2.数据寻址
操作 | 有效地址 | 访存次数 | 细节问题 |
---|---|---|---|
隐函寻址 | 程序给出 | 0 | ACC不显出地址 |
立即寻址 | 访问即操作数 | 0 | 补码存放,定长最快 |
直接寻址 | EA = A | 1 | 访问即地址 |
间接寻址 | EA = A | 2 | 访问,访问,再访问 |
寄存器寻址 | EA = R | 0 | 访问即内容,变地址寻址最快 |
寄存器间接 | EA = ( R ) | 1 | 寄存器存着地址,再访问主存 |
相对寻址 | EA = (PC) + A | 1 | PC浮动变化,PC的值即是PC内的值 |
基质寻址 | EA = (BR) + A | 1 | OS管理,A浮动 |
变址寻址 | EA = (IX) + A | 1 | 用户管理,IX浮动 |
补充遇到的问题:
堆栈寻址: 硬堆(寄存器),软堆(主存中画出一部分),SP可以自增,所以多为零地址指令。
PC的移动: PC执行完本句之后会自动变化(记得提前加),而变化量取决于按字/字节编址和一条指令所占单位这两个问题决定的。(区分指令字长和机器字长。)
先变址后间址: 变址后得到的那个数据随后间址得到最后的真实答案。
先间址后变址: 间址后的得到的那个地址(是地址,不是那个地址对应的真实数据)通过变址得到答案。
Complex & Reduced Instruction Set Computer
对比 | CIRC(X86编程) | RISC(ARM编程) |
---|---|---|
指令系统 | 复杂,大 | 精简,简单 |
指令数目 | >200 | < 100 |
指令字长 | 不固定 | 固定 |
访存指令 | 不限制 | Load/Store |
指令执行时间 | 差距大 | 差距小 |
使用频度 | 大 | 小 |
寄存器数量 | 少 | 多 |
目标代码(相对于) | 困难,低效 | 优化,高效 |
控制方式 | 微程序 | 组合逻辑 |
流水线 | 一定方式 | 实现,一个时钟周期 |