Computer_compusition_ch2-1 指令-计算机的语言

ch2-1 指令-计算机的语言

MIPS汇编指令

  • MIPS-32概述
  • 三类汇编指令
  • 过程支持
  • c程序执行过程
  • 五种寻址方式
  • 字符支持 同步指令队ll-sc 排序程序 ARM与x86

指令的组成 MIPS的设计思想

计算机本质执行机器语言指令-01串

  1. 指明执行操作-操作码-01串前几位
  2. 数据来源、去向-操作数/地址码-01串剩余位
    | 操作码 | 地址码 | 地址码 |

MIPS作为RISC指令集,力求简单,所用均为MIPS-32(32位长)


MIPS-32中的通用寄存器

MIPS运算操作数必须来自寄存器-register或者位于cpu中比cache小的存储器-层式存储结构的塔尖部分

专用寄存器如程序计数器pc
相对的为通用寄存器-暂时存放运算数据

MIPS由32个32位寄存器,共128B
有如下约定:

  • 程序中变量存放在保存寄存器-store reg中: s 0 − s0- s0s7共8个
  • 运算中临时变量、中间变量放在临时寄存器-temp reg中: s 0 − s0- s0s9共10个
  • 特殊的零寄存器,永远放32位0:$zero

三类汇编指令

运算指令
  1. 算数运算
    加减 add sub
    加立即数 addi
  2. 逻辑运算
    与或非 and or nor
    逻辑移位 sll srl
数据传送(MEM<->REG)
  1. 取字 lw
  2. 存字 sw
  3. 伪指令 move和li(addi)
  4. 装载32位立即数 lui+ori
决策指令
  1. 小于则置位 slt

  2. 条件分支 beq bne

  3. 分支伪指令 blt bgt ble bge

  4. 无条件跳转 j

    三种指令格式
    R型 add,sub,sll
    I型 addi,lw,sw
    J型 j


算术运算

c=a+b
add c,a,b
将a和b中的数据相加,并将结果存放在c中
减法ab有序
通式:add/sub des,src1,src2

i++/i=i+1
加法指令的src2改为常数1
没有subi 即立即数可以为附属

逻辑按位、移位运算

同时为1 与and结果为1
至少一个为1 或or结果为1
任何数据 非nor结果01取反

shift left logic
sll s 0 , s0, s0,s1,2 里面的2是位移量要与addi的立即数区分开


综合练习1:变量的运算与赋值
Computer_compusition_ch2-1 指令-计算机的语言_第1张图片

注意里面的*5用4+1简化,没有subi,临时变量用$t0


寄存器-存储器数据传送指令

运算指令的操作数来自寄存器或这令本身
通用寄存器一共只有128B
数组元素占据成千上万个字节,只能存放在内存中
数组的第一个元素a[0]的32位地址称为数组的基址
如果源操作数在内存中,a[5]的地址表示为20($s1),机器会自动算好基址和偏移量,找到a[5]的地址

MIPS的通用寄存器都是32位长
这个长度就是MIPS体系结构的字长,通常代表了参与运算的数据长度
因此约定,1字=32b=4B

a[5]相对于a[0],在内存中距离是5个字而不是5个字节,而内存按照字节编址,所以偏移量应该是20字节


寄存器间的数据传送 装载立即数到寄存器

MIPS没有专门的寄存器间的移动数据的指令,可以通过把源寄存器的数据加上0再保存到目标寄存器中
addi s 1 , s1, s1,t0,0
add s 1 , s1, s1,t0,$zer0
用伪指令move s 1 , s1, s1,s0

把常数10装入寄存器$s2
addi s 2 , s2, s2,zero,10
伪指令li $s2,10


装载32位立即数到寄存器

立即数只能占用32位的16位
我们必须先用取高位立即数lui,放在高16位,之后再用ori与低16位立即数7FFF进行或运算
不能使用addi代替ori指令,如果低16位的最高位是1,addi就会理解为负数


综合练习2
Computer_compusition_ch2-1 指令-计算机的语言_第2张图片

数据大于32767,无脑使用装在32位立即数到寄存器
地址的字节表示不可以表示4i( s 0 ) , 需要单独列出 4 i 数字,根据题意 i 就是 s0),需要单独列出4i数字,根据题意i就是 s0,需要单独列出4i数字,根据题意i就是s1所存的数


就酱,感谢你的阅读

你可能感兴趣的:(计算机组成与设计,笔记,经验分享)