《计算机组成原理》课堂笔记(1):计算机的指令系统

计算机程序及分类

计算机程序是给电脑的指令。可以分成可执行程序、源程序,等等。
概括:程序员和计算机系统之间交互的语言。
计算机程序分类:

  • 高级语言:关键字(词汇,明确含义)、语法(词法)、语义
  • 汇编语言:机器语言符号化的表示,是高级语言和机器语言的中介
  • 机器语言:计算机可以理解的语言,一些二进制串构成的指令集合。存储器是二进制的。电子计算机建立在布尔代数和逻辑运算的基础上,所以用二进制表示方便驱动底层电路完成功能。

程序举例

“不要去挑错,理解含义即可”
1. C语言程序
把Fib数列的内容放在内存(栈)里的一段连续空间里
空间的起始地址是?(程序员并不关心在哪儿,认为肯定可以申请到;编译器也不知道)
i大概会放在寄存器里。
所以它是可以跨平台的。
2. 机器语言
今日作业:看懂机器语言程序(。。。)
3. 汇编语言
机器语言的另一种表现形式
(大胆的推测)和刚才的程序内涵是一样的
需要知道运行时的空间分配,所以肯定不能跨平台了。

高级语言

面向程序员和问题求解而不是硬件指令系统
程序使用的是虚空间,需要映射到系统的物理空间

汇编语言和机器语言

汇编语言要经过汇编器翻译成机器语言
用机器语言设计程序基本不可行……
程序的最小单元是指令,也是执行程序的最小单位,不会进行分割
计算机程序分类关心的是机器语言的实现方法。需要了解其中的细节。

Von Neumann结构计算机

存储程序计算机

  • 程序由指令构成
  • 程序功能通过指令序列描述
  • 指令序列在存储器中顺序存放(所以现在的并行计算很困难,这定义的就是一个串行的结构;流水的指令重叠已经会造成一些问题了)

顺序执行指令(这门课只有三句话而已:-)

  • 用PC指示当前被执行的指令
  • 从存储器中读出指令执行
  • PC指向下一条指令

指令和指令系统

指令是计算机运行的最小的功能单元,是指挥计算机硬件运行的命令。
有一定的长度。
我们需要识别和执行这些指令。
指令系统是软件和硬件的接口。词汇量不要太大。

指令系统的地位

介于硬件系统和软件系统之间
高级语言->汇编语言->操作系统->指令系统->微体系结构->数字逻辑
指令系统的设计是非常关键的。(我们并不用设计。)
中国的龙芯CPU选择了MIPS,但是需要授权才能卖……
指令系统也代表了一个生态,如果自己建立的话,缺少对应的软件。

指令功能分类

  • 数据运算指令:算术运算、逻辑运算
  • 数据传输指令:寄存器之间,主存和寄存器之间
  • 输入/输出指令:与输入/输出端口的数据传输
  • 控制指令:转移指令、子程序调用/返回
  • 其它指令:停机、开/关中断、空操作、特权、置条件码

指令格式

指令格式:指令字中操作码和操作数地址的二进制位的分配方案
操作码 操作数地址
指明本条指令的操作功能 说明操作数存放的地址(操作数)

指令字:完整的一条指令的二进制表示;机器码和指令一一对应比较好
指令字长:定长/变长指令字结构(位数短的计算机不一定简单,不要用32位的经验套用16位的指令格式)

寻址方式

形式地址、实际地址

  • 寄存器
  • IO设备端口
  • 内存的存储单元地址

评价计算机性能的指标

吞吐率:单位时间完成的任务数量
响应时间:完成任务的时间(和上一条不一样)
衡量性能的指标:MIPS之类的
综合测试程序

MIPS指令系统

五内部互锁流水级的微处理器

MIPS指令格式

R(寄存器)型:op + rx + (ry + (rz)) + funct
I(立即数)型:op + (rx + ry)/(rx/funct) + imm
B(转移)型:op + target

所有的指令都是32位字长;操作数寻址方式只有3种(基址+位移、立即数寻址、寄存器寻址)
MIPS64是面向64位处理器的。
MIPS16e是16位字长的,主要用于嵌入式系统

THCO MIPS指令系统

与MIPS 16e兼容,16位固定字长,44条指令(可以扩展(

THCO MIPS指令格式

R型(21条):3种格式,指令功能见书
I型(14条):2种格式,立即数本身的长度可能不一样
B型(5条):转移
J型(4条):JR、JRRA、JALR、NOP(虽然并不是那么像)
需要仔细阅读指令系统的每一部分。
我们的目标不是用指令系统写程序,而是要在硬件上实现它。

指令类型 指令格式 汇编语句 操作数个数 功能说明
R型指令 00110 rx ry imm 00 SLL rx ry imm 3 rx = ry << immediate(L)
00110 rx ry imm 10 SRL rx ry imm 3 rx = ry >> immediate(L)
00110 rx ry imm 11 SRA rx ry imm 3 rx = ry >> immediate(A)
11101 rx ry 001 00 SLLV rx ry 2 ry = ry >> rx
11101 rx ry 001 10 SRLV rx ry 2 ry = ry >> rx(L)
11101 rx ry 001 11 SRAV rx ry 2 ry = ry >> rx(A)
01100 100 rx 000 00 MTSP rx 1 SP = rx
01111 rx ry 000 00 MOVE rx ry 2 rx = ry
11100 rx ry rz 01 ADDU rx ry rz 3 rz = rx + ry
11100 rx ry rz 11 SUBU rx ry rz 3 rz = ex - ry
11101 rx 010 000 00 MFPC rx 1 rx = PC
11101 rx ry 000 10 SLT rx ry 2 rx < ry时,T=1
11101 rx ry 000 11 SLTU 2 rx < ry时,T=1(无符号)
11101 rx ry 010 10 CMP rx ry 2 rx = ry时,T=0
11101 rx ry 010 11 NEG rx ry 2 rx = 0 - ry
11101 rx ry 011 00 AND rx ry 2 rx = rx & ty
11101 rx ry 011 01 OR rx ry 2 rx = rx || ry
11101 rx ry 011 10 XOR rx ry 2 rx = rx ^ ry
11101 rx ry 011 11 NOT rx ry 2 rx = ~ry
11110 rx 000 000 00 MFIH rx 1 rx = IH
11110 rx 000 000 01 MTIH rx 1 IH = rx
I型指令 01100 010 imm SW-RS imm 1 MEM[SP+imm] = RA
11010 rx imm SW-SP rx imm 2 MEM[SP+imm]=rx
11011 rx ry imm SW rx ry imm 3 MEM[rx+imm] = ry
10010 rx imm LW_SP rx imm 1 rx = MEM[SP+imm]
10011 rx imm LW rx ry imm 3 ry = MEM[rx+imm]
01000 rx ry 0 imm ADDIU3 rx ry imm 3 ry = rx + sign_ext(imm)
00000 rx imm ADDSP3 rx imm 2 rx = SP + sign_ext(imm)
01100 011 imm ADDSP imm 1 SP = SP + sign_ext(imm)
01001 rx imm ADDIU rx imm 2 rx = rx + sign_ext(imm)
01101 rx imm LI rx imm 2 rx = +sign_ext(imm)
01010 rx imm SLTI rx imm 2 rx < s_ext(imm)时T=1
01011 rx imm SLTUI rx imm 2 rx < z_ext(imm)时T=1
01110 rx imm CMPI rx imm 2 rx=imm时T=0
B型指令 00010 imm B imm 1 PC = PC + sign_ext(imm)
00100 rx imm BEQZ rx imm 2 rx=0时跳转
00101 rx imm BNEZ rx imm 2 rx!=0时跳转
01100 000 imm BTEQZ imm 1 T=0时跳转
01100 001 imm BTNEZ imm 1 T!=0时跳转
J型指令 11101 rx 00000000 JR rx 1 PC = rx
11101 000 00100000 JRRA 0 PC = RA
11101 rx 11000000 JALR rx 1 PC = rx RA = PC
11111 00000 imm INT imm 1 软中断
00001 000 00000000 NOP 0 空指令

THINPAD的硬件组成

机器字长16位
CPU:8个通用寄存器;16位字长;PC、SP等专用寄存器
主存:256KRAM+256KRAM,按字编址
IO:与主存共享地址空间,双串口
总线:双16位地址总线,双16位数据总线,独立的访问Flash总线

指令系统实现

监控程序设置的统一地址环境
功能区 地址段 说明
系统程序区 0x0000-0x3FFF 存放监控程序
用户程序区 0x4000-0x7FFF 存放用户程序
系统数据区 0x8000-0xBEFF 监控程序使用的数据区
Com1数据端口/命令端口 0xBF00-0xBF01 串口的端口
Com2数据端口/命令端口 0xBF02-0xBF03 第2个串口的端口
预留给其他接口 0xBF10-0xBFFF 保留
系统堆栈区 0xBF10-0xBFFF 用于系统堆栈
用户数据区 0xC000-0xFFFF 用户程序使用的数据区

THCO MIPS寻址方式

寄存器寻址
立即数寻址
变址寻址

汇编语言程序设计

模拟器:对THCO MIPS指令系统进行指令级功能模拟
汇编:ea
反汇编:u
查看/设置寄存器:r/sr
单步/连续运行:s/c
断点:b/db/lb
重新启动:restart

程序举例

求和:SUM=1+…+10

L1 R1 1
L1 R3 0
ADDU R1 R3 R3
ADDIU R1 1
SLTI B
BTNEZ FC
NOP


新增一则回应

除非特别注明,本页内容采用以下授权方式: Creative Commons Attribution-ShareAlike 3.0 License