计算机系统基础
实验项目: 运算器算术运算
实验目的:掌握ALU的算术运算原理,熟悉ALU数据传送通路和数据传送方式。
实验环境:微机,配置Windows操作系统、LC-3仿真机软件。
实验过程:
单条指令
(一) 运算 process data
0001 001 100 000101 (1305)
ADD R1 R4 R5 (R4+R5 -->R1)
0001 001 100 100101 (1325)
ADD R1 R4 5 (R4+5 -->R1)
0101 010 010 100000 (54A0)
AND R2 R2 0 (R2&0 -->R2)
1001 011 101 111111 (977F)
NOT R3 R5 (R5按位取反)
(二)移动 moves data
PC相对寻址 : LD (0010) 和 ST (0011)
将地址生成位做16位扩展然后与增量PC(已经+1)相加,计算出来的地址放入DR或SR,根据该内存地址指向的内容做对应的读写。PC+offset---->address ,mem[address]—>result
间接寻址 : LDI (1010) 和 STI (1011)
首先采用LD的方式计算出地址,但是不是直接取这个地址的内容做为结果,而是把这个地址的内容做为一个新的地址,新地址指向的内容即为需要寻找的内容 增量pc+offset—>address, mem[address]—>address1 mem[address1]—>result.
基址偏移寻址 : LDR(0110)和STR(0111)
R1<---R2+offset,mem[R1]--->result
0110 010 011 000110 (646C)
LDR R2 R3 6 (R3+6 -->R2)
立即数寻址 : LEA (1110)
寻址过程是立即的,直接把PC增量和偏移量相加得到结果,而不需要查询内存, 即增量PC+offset—>result.
1110 101 11111101 (EBFD)
LEA R5 -3 (PC + -3 -->R5)
(三)控制 change sequ
(无)条件跳转 BR (0000)
0000 NZP PC偏移
PC←增量PC+PCoffset9
N、Z、P就是三个bit位寄存器,条件跳转指令通过将对应的位置为1来表明需要对该位寄存器进行判断来确定是否需要进行跳转来改变指令流。
如果在条件跳转指令N,Z,P三个位都为1的情况下,无论如何PC都会发生变化(其中之一肯定能满足条件),这种情况为无条件跳转。
如果指令中的N、Z、P都为0,则不进行任何条件判断(相当于指令没有意义,PC继续按照正常的增量执行下一条指令)
JMP指令 (1100)
1100 000 010 000000 (C080)
JMP R2
JMP指令的任务就是把寄存器bit[8:6]标识的寄存器内容装入PC寄存器
TRAP指令 (1111)
1111 0000 陷入矢量
TRAP指令的任务是改变PC内容,使其指向操作系统所在的空间内部,即以当前用户程序的身份跳转到操作系统的某个代码入口开始执行。也可以说TRAP指令激活了操作系统的服务调用(Service Call),图中的陷入矢量就是程序希望操作系统执行的服务程序的编号。
组合指令
1.实现x-y
x is in R0, y is in R1
Set value R0 = 4 = x,R1 = 1 = y
步骤:
(1)求反码
1001 001 001 111111 (927F)
NOT R1 R1 ( NOT(y)-->R1 )
(2)得反码
0001 010 001 100001 (1461)
ADD R2 R1 1 ( (-y)-->R2 )
(3)做减法
0001 010 000 000010 (1402)
ADD R2 R0 R2 ( x+(-y)-->R2 )
乘法运算
指令分析
Set value R4=5, R5=3
0101 010 010 100000 (54A0) x3000
AND R2 R2 0 (R2 清零)
0001 010 010 000100 (1484) x3001
ADD R2 R2 R4 ( R2 + R4 --> R2 )
0001 101 101 111111 (1B7F) x3002
ADD R5 R5 -1 ( R5 - 1 --> R5)
0000 001 111 111101 (03FD) x3003
BR P ( BRP x3001)
1111 000 000 100101 (F025) x3004
( TRAP HALT)
统计10个数的和
指令分析
Set value x3100
x3000 0101 001 001 100000 (5260)
AND R1 R1 0 (R1&0 R1清零,存储和)
x3001 0101 100 100 100000 (5920)
AND R4 R4 0 (R4&0 R4清零, R4作为计数器)
x3002 0001 100 100 101010 (192A)
ADD R4 R4 10 (R4 = R4+10 赋值数的个数为10)
x3003 1110 010 011111100 (E4FC)
LEA R2 x0FC (R2-->PC+x0FC x3100)
x3004 0110 011 010 000000 (6680)
LDR R3 R2 0 (R2+0-->R3 ) loop
x3005 0001 010 010 100001 (14A1)
ADD R2 R2 1 (R2 = R2+1 指向下一位数据)
x3006 0001 001 001 000011 (1243)
ADD R1 R1 R3 (R1 = R1+ R3)
x3007 0001 100 100 111111 (193F)
ADD R4 R4 -1 (R4 = R4 - 1,计数器减一)
x3008 0000 001 111111011 (03FB)
BR P (BRP loop x3004)
x3009 1111 000000100101 (F025)
TRAP HALT (TRAP halt)
小结
· 运算操作指令:ADD、AND、NOT
· 寄存器清零:和0做AND操作
· 减法:NOT第二个操作数后+1(取补码)与第一个操作数ADD
· 数据搬迁指令:LD、SD、LDR、STR、LDI、STI、LEA
· PC相对寻址:LD和SD。DR←M[PC+PCoffset9];SD同理。范围较小,但速度快
· 间接寻址:LDI和STI。DR←M[M[PC+PCoffset9]];STI同理。范围为全内存,但速度慢
· 基址偏移寻址:LDR和STR。DR←M[baseR+offset6];STR同理。范围为全内存,速度快
· 立即数寻址:LEA。DR←PC+PCoffset9。常用作对寄存器初始化地址。
· 控制指令:BR、JMP、TRAP
· 条件跳转指令:BR。若条件码N/Z/R对应位发生变化,则PC←增量PC+PCoffset9。这个跳转是有范围的。
· 无条件跳转指令:BR,其中nzp位均置1.
· 循环控制的两种方法:计数器方法(知道要循环多少次);哨兵法(事先不知道循环多少次,放一个哨兵字,若哨兵字出现,则跳出循环)
· JMP:BR的跳转地址有局限性,而JMP无。
· TRAP:跳转至某个既定程序的入口,执行完毕后,执行下一条指令。既定的程序的入口用trapvector陷入矢量来表示位置。