《计算机原理与系统结构》学习系列——指令:计算机的语言(中)

系列文章目录


文章目录


逻辑操作

对位进行处理的指令

逻辑操作CJavaMIPS
左移<<<<sll
右移>>>>>srl
按位与&&and,andi
按位或||or,ori
按位取反~~nor
  • 打包和拆包操作
  • 用于对字中的若干“

移位操作(SLL,SRL)

MIPS移位指令分为6个字段

  • shamt:移位次数
  • sll:逻辑左移
    • 左移空位填0 
    • 逻辑左移i位相当于2^{i}
  • srl:逻辑右移
    • 逻辑右移空位填0

例如,假设寄存器¥s0中的数据时:

0000 0000 0000 0000 0000 0000 0000 1001 = 9

一条左移指令执行后:

0000 0000 0000 0000 0000 0000 1001 0000 = 144

在MIPS中,左移指令类似于:

按位与(AND) 

该操作仅当两个操作位均为1时结果才为1。例如,如果寄存器$t2的值为:

0000 0000 0000 0000 0000 1101 1100 0000

寄存器$t1的值为:

0000 0000 0000 0000 0011 1100 0000 0000

那么,在执行下面的MIPS指令后

and $t0,$t1,$t2

$t0中的值将是:

0000 0000 0000 0000 0000 1100 0000 0000

AND提供了一种将源操作数的某些位置置为0的能力,前提是另一个菜哦指数中对应位是0。后一个操作数传统上被称为掩码(mask),寓意其可“隐藏”某些位

按位或(OR)

该操作在两个操作位中任意一位是1时,结果就为1。为详细说明,仍假设$t1,$t2中的值与上述一样,那么执行下述按位或指令后:

or $t0,$t1,$t2

执行后$t0为:

0000 0000 0000 0000 0011 1101 1100 0000

按位取反(NOT)

该操作只有一个操作数,将1变为0,将0变成1。为保持三操作数的格式,MIPS引入了或非NOR(NOT OR)指令来取代NOT。如果一个操作数是0,那么对另一个操作数而言,结果就等价于NOT

如果寄存器$t1中的值与上例保持不变,那么下面MIPS指令:

nor $t0,$t1,$zero

在寄存器$t0中的执行结果是:

1111 1111 1111 1111 1100 0011 1111 11111

决策(分支)指令

条件分支指令

程序语言通常使用if语句描述决策,有时也使用go to 语句和标签。MIPS汇编语言中有两条类似if和go to 语句功能的指令。第一条是:

beq rs,rt,L1

即 if(rs==rt)跳转到标签为L1的指令执行

第二体条指令是:

bne rs,rt,L1

即 if(rs!=rt)跳转到标签为L1的指令执行

这两条指令传统上称为条件分支(conditional branch)指令

无条件分支语句

在if语句结尾部分,需要引入另一种分支指令,通常叫做无条件分支指令(unconditional branch)。当遇到这种指令时,程序必须分支。为了区分条件分支和无条件分支,MIPS将无条件分支指令命名为jump,简写成j

j Exit

循环语句

基本块

一个基本块时一个指令序列,没有分支(可能出现在末尾者除外)并且没有分支目标/分支标签(可能出现在开始者除外)的指令序列

  • 编译器标识基本块用于优化
  • 高级处理机能够加速基本块的执行

更多条件操作

 最常见的判断就需要判语句可能是相等或不等,但是有时判断一个变量是否小于另一个变量也非常有用。例如,for循环断索引变量是否小于0。在MIPS中,提供了一条指令来实现这种比较,该指令在比较两个寄存器内容后,若第一个寄存器小于第二个寄存器,则将第三个寄存器设置为1,否则设置为0,该指令称为小于则置位(set on less than),即slt

slt $t0,$t3,$t4

表示当寄存器$t3的值小于寄存器$s4的值时,寄存器$t0被置为1,否则寄存器$t0被置为0

在比较中经常使用常数操作数,所以有立即数版本的小于则位指令

slti $t0,$s2,10

beq,bne 可以和其他指令结合使用

slt  $t0,$s1,$s2

bne $t0,$zero,L

没有blt,bge等指令

遵循冯诺依曼关于“设备”简单性原则,MIPS体系结构没有提供“小于则分支”指令,因为这种指令过于复杂,它会延长时钟周期时间,或增加平均执行每条指令的周期数CPI

有符号数和无符号数对比
  • 有符号数比较:slt,slti
  • 无符号数比较:sltu,sltui

 将有符号数作为无符号数比较,在检查 0≤x<Y的同时,检查X是否为负数,检查数组下标是否越界


设计原则总结

  • 设计原则一:简单源于规整
    • 以算数运算操作为例:每条指令有且仅有三个操作数
    • 规整使实现简单
    • 简单能获得低成本高性能
  • 设计原则二:越小越快
    • 相对主存:数以万计的存储位置
    • 寄存器只存储少量、频繁用到的数据
  • 设计规原则三:加速执行常用操作
    • 小常数操作出现的频率高
    • 立即数操作用不到内存取数
  • 设计原则四:优秀的设计需要适宜的折中方案
    • 不同类型指令采用不同的解码方式
    • 所有指令相同长度:32为,尽可能保持相似的指令格式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值