计算机组成原理-MIPS-教学内容_第1页
计算机组成原理-MIPS-教学内容_第2页
计算机组成原理-MIPS-教学内容_第3页
计算机组成原理-MIPS-教学内容_第4页
计算机组成原理-MIPS-教学内容_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机组成原理MIPS02例1

设某台计算机有100条指令,

(1)采用固定长度操作码编码,试设计其操作码的编码。

(2)假如这100条指令中有10条指令的使用概率达到90%,其余90条指令的使用概率为10%。试采用不等长编码设计操作码。

解:(1)采用固定长度操作码编码时,需要7位操作码。取其中的100个代码作为指令操作码,可以用0000000到1100011之间的代码代表100条指令,即 0000000 指令0的操作码 0000001 指令1的操作码 … 1100011 指令99的操作码剩下从1100100到1111111共28个代码可用于增加新指令,每条指令的操作码的长度都是7。2026/9/10(2)用4位代码对10条常用指令进行编码,用8位代码对90条不常用代码进行编码,即 0000 指令0的操作码 0001 指令1的操作码 … 1000 指令8的操作码 1001 指令9的操作码 10100000 指令10的操作码 10100001 指令11的操作码 … 11111001 指令99的操作码指令操作码的平均长度为 4×90%+8×10%=4.4位比等长编码的7位小。例1

设某台计算机有100条指令,

(1)采用固定长度操作码编码,试设计其操作码的编码。

(2)假如这100条指令中有10条指令的使用概率达到90%,其余90条指令的使用概率为10%。试采用不等长编码设计操作码。

2026/9/10例2若某计算机要求有如下形式的指令:三地址指令12条,二地址指令60条,零地址指令16条(不要求有单地址指令)。设指令字长为16位,每个地址码长为4位,试用扩展操作码为其编码。解:三个地址码12条指令的操作码分别为 0000、0001、0010、…、1011在双地址指令11000000~11111011零地址指令1111110000000000~11111100000011112026/9/10指令的格式三、指令长度固定长度取指快、译码简单。单字长、双字长、多字长可变长度可提高编码效率四、指令助记符 伪指令、累加器,通用寄存器Add$1,$2,$3ADDR1load2026/9/10数据的类型及其存储方式

操作数的类型

整型数、单精度和双精度浮点数、字符型数据长度:单字节、双字节、字、双字、四倍字操作数的存储方式

大数端(bigEndian)和小数端(littleEndian)2026/9/10

数据的类型及其存储方式数据对齐方式

如何判断字对齐?2026/9/10字不对齐方式下的数据存储访存次数问题Charc;Shortinti,j;intk;跨页问题CharcShortintiIntkShortjShortjIntk2026/9/10字对齐方式下的数据存储空间浪费问题Charc;Shortinti,j;intk;cikj2026/9/10字对齐方式下的存储器访问速度较高接口较简单CPUByte3Byte2Byte1Byte0寄存器存储器Byte3Byte2Byte1Byte02026/9/10CPUByte3Byte2Byte1Byte0寄存器存储器Byte2Byte1Byte0Byte3字不对齐方式下的存储器访问节省空间访存速度慢接口复杂2026/9/10数据存储方式的例子2026/9/10数据对齐的例子

试改变以下数据结构定义以减少对齐的开销structLoose{ shorts; //16bit intI; //32bit charc; //8bit Foo*p; //64bit};structTight{ Foo*P; inti; shorts; charc;};2026/9/10寻址方式

按地址寻找与按内容寻找寻址方式地址码形成操作数存储位置的方式2026/9/10寻址方式

1.隐含方式 如ADDA中的累加器 2.立即数方式 如INT#3 3.寄存器方式 如INCR1操作数2026/9/104.直接寻址如INC1000操作数寻址方式2026/9/10寻址方式

5.寄存器间接 如INC(R1)

A操作数2026/9/10寻址方式

6.存储器间接如INC(1000)A操作数2026/9/10寻址方式

7.相对寻址

如INC8(PC)操作数2026/9/10寻址方式

8.变址和基址寻址

如INC8(R1)

变址寻址:便于数组访问基址寻址:可扩大寻址范围,可实现程序浮动I操作数2026/9/10寻址方式

9.

复合寻址

如INC8(PC+R1)、INC(R1)(1000)2026/9/10例3设一条32位指令的存储地址是0x00001000,操作数采用相对寻址,偏移量为8位补码11110000,问数据地址是多少?2026/9/10例4一条双字长的load指令存储在地址为200和201的存储位置,该指令将地址码指定的存储器内容装入累加器AC。指令的第一个字指定操作码和寻址方式,第二个字是地址部分。PC寄存器的值是200。通用寄存器R1的值是400,变址寄存器XR的内容是100。指出在各种寻址方式访问的数据。

2026/9/10直接寻址方式,装入AC的操作数是800。在立即数寻址方式下,将500装入AC。在间接寻址方式下,操作数是300。在相对寻址方式下,操作数是325。在变址寻址方式下,操作数是900。在寄存器R1寻址方式下,400装入AC。在寄存器R1间接寻址方式下,装入AC的700。解2026/9/10一条双字长的指令存储在地址为W的存储器中。指令的地址字段位于地址为W+1处,用Y表示。在指令执行中使用的操作数存储在地址为Z的位置。在一个变址寄存器中包含X的值。试叙述Z是怎样根据其他地址计算得到的,假定寻址方式为 (1)直接寻址 (2)间接寻址 (3)相对寻址 (4)变址寻址例5

2026/9/10(1)在直接寻址方式下,Z=Y。(2)在存储器间接寻址方式下,Z=(Y)。(3)在相对寻址方式下,Z=W+Y+2。(4)在变址寻址方式下,Z=X+Y。解2026/9/10一条相对转移指令长4个字节,存储在存储器中地址为75010的地方,转移目标地址为50010。问 (1)指令执行之后PC的值为多少? (2)指令的相对地址字段的值为多少? (3)如果采用补码表示相对地址字段,该指令的相对地址字段需要多少二进制位?例6

2026/9/10解(1)指令执行之后PC的值为50010。(2)相对转移指令中的地址偏移量应为 500-754=-254(3)相对地址字段需要9个二进制位。2026/9/10寻址方式汇编表示操作内容直接寻址loadadrac

mem[adr]间接寻址load(adr)ac

mem[mem[adr]]相对寻址loadadr(pc)ac

mem[pc+adr]立即寻址load#nac

n变址寻址loadadr(rn)ac

mem[adr+rn]寄存器寻址loadrnac

rn寄存器间接寻址load(rn)ac

mem[rn]寻址方式的汇编指令表示

2026/9/10指令的访存类型堆栈型累加器型通用寄存器型寄存器-寄存器型寄存器存储器型存储器-存储器型2026/9/10指令的访存类型的比较2026/9/10

指令集

数据传送:move,load,store算术运算:add,sub,mult,div,comp逻辑运算:and,or,neg,shift程序控制:jump,branch,jsr,ret,int输入输出:in,out堆栈操作:push,pop字符串:MOVS,CMPS,SCAS,LODS,STOS系统指令:HALT2026/9/10转移指令

如:jump$1000 bgtR1条件转移vs无条件转移相对转移vs绝对转移状态寄存器SRNZ

V

C

P

2026/9/10常见的条件转移指令

bz为零时转移bnz非零时转移bc进位时转移bnc无进位时转移bp为正数时转移bm为负数时转移bv溢出时转移bnv无溢出时转移bgt大于时转移bge大于或等于时转移blt小于时转移ble小于或等于时转移beq等于时转移助记符转移条件bne不等于时转移2026/9/10转子指令

功能实现子程序调用步骤

将下一条指令的地址(PC的值)存放在一个临时存储位置

将子程序的起始地址装入PC中子程序返回指令

将存放在临时存储位置的指令地址取出放回PC

2026/9/10

指令系统与汇编程序设计实例

MIPS处理器的主要特征指令系统简单所有的指令都是32位宽度指令格式共三种立即数型、转移型和寄存器型。操作数寻址方式有三种基址加16位位移量的访存寻址立即数寻址寄存器寻址2026/9/10MIPS处理器的主要特征指令系统简单采用流水技术依靠优化编译器进行指令序列的重新安排以防止流水线中出现的相互冲突使用较多寄存器32个通用寄存器表示为$0到$31$0固定为0一对存储64位数据的寄存器Hi,Lo用于存放定点乘法的结果异常PC寄存器epc采用“比较与转移”指令比较和转移这两个动作在一条指令内便可完成beq$1,$2,1000没有状态寄存器2026/9/10MIPS算术指令2026/9/10MIPS逻辑指令2026/9/10MIPS数据传递指令2026/9/10MIPS条件转移指令2026/9/10MIPS无条件转移指令2026/9/10MIPS指令操作码定义2026/9/10MIPSR格式指令扩展操作码定义2026/9/10例10根据MIPS指令操作码定义以及指令格式,给出以下指令的各个字段的十进制值:

add$8,$17,$18

答:指令是R格式指令。第一个字段和最后一个字段的值分别为0和32。第二个字段为17第三个字段为18第四个字段为8第五个字段未使用被设置为00171880322026/9/10汇编程序设计的简单例子例11假定以下一段C语言程序中包含的变量a,b,c,d,e分别存放在寄存器$1到$5中,

a=b+c; d=a-e;写出编译后的MIPS汇编语言指令序列。答:MIPS指令对两个源操作数进行计算,并产生一个结果,上述两个语言可以直接转换成两条指令:

add$1,$2,$3 sub$4,$1,$52026/9/10汇编程序设计的简单例子例12将以下C语言的语句

f=(g+h)-(i+j);用MIPS汇编语言表示,假定变量f,g,h,i,j分别分配到寄存器$16,$17,$18,$19,$20中,寄存器$8和$9存放临时计算结果,解: add$8,$17,$18

add$9,$19,$20

sub$16,$8,$92026/9/10汇编程序设计的简单例子例13将以下C语言的语句写成MIPS汇编指令表示

g=h+A[i];这里A是具有100个元素的数组,在内存中的起始地址用Astart表示,假定编译程序将变量g,h和i分别分配给寄存器$17,$18和$19。解:add$20,$19,$19 add$19,$20,$20

lw$8,Astart($19) add$17,$18,$82026/9/10汇编程序设计的简单例子例14如果将上例C语句改为

A[i]=h+A[i];写出相应的MIPS汇编指令序列。假定编译程序将变量g,h和4i分别分配给寄存器$17,$18和$19。解: lw$8,Astart($19) add$8,$18,$8 sw$8,Astart($19)2026/9/10汇编程序设计的简单例子例15将以下C语言程序写成MIPS汇编指令序列,并画出其流程图。

if(i==j)gotoL1; f=g+h;L1: f=f-i;假定5个变量f,g,h,i,j分别存放在$16到$20中。解:

beq$19,$20,L1

add$16,$17,$18L1: sub$16,$16,$192026/9/10汇编程序设计的简单例子例16将上述C程序改为

if(i==j)f=g+h; elsef=g-h;写出相应的MIPS汇编指令。答:

bne$19,$20,Else add$16,$17,$18 jExitElse: sub$16,$17,$18Exit:2026/9/10汇编程序设计的简单例子例17下面是一个C语言表示的循环语句:

while(save[i]==k)i=i+j;假定变量i,j,k存储在寄存器$19,$20,$21中,数组save的起始存放在地址存放在$6中,写出相应的MIPS汇编语言指令序列。答:loop:add$7,$19,$19 add$7,$7,$7 add$7,$7,$6 lw$8,0($7) //计算数组save[i]的地址

bne$8,$21,Exit

add$19,$19,$20

jloop Exit:2026/9/10汇编程序设计的简单例子例18对于以下C语言语句:

if(a<b)gotoless;它判断变量a是否小于b,条件满足时转移到标号less,假如a和b分别存放在寄存器$1和$2中,写出相应的MIPS汇编语言指令序列。答:用小于时置1的指令设置一个临时寄存器($3):

slt$3,$1,$2 判断a是否小于b,并根据判断的结果进行转移:

bne$3,$0,less2026/9/10汇编程序设计的简单例子例对于以下C程序段:switch(k){ case0:f=i+j;break; case1:f=g+h;break; case2:f=g-h;break; case3:f=i-j;break; }假定f到k这6个变量分别存储在寄存器$16到$21,寄存器$10的内容为4,写出相应的MIPS汇编语言指令。答:程序可以中用变量k作为转移目标地址表的索引,首先要检测k的值是否在指定的范围内,即是否满足0

k

3,如果不满足的话就退出程序。

slt$9,$21,$0 bne$9,$0,Exit slt$9,$21,$10 beq$9,$0,Exit2026/9/10将k乘以4以形成转移地址。

add$9,$21,$21 add$9,$9,$9假定转移目标地址表连续,起始地址在$4中,计算对应的入口地址。

add$9,$9,$4 lw$8,0($9)$8中包含了转移地址,根据$8进行转移

jr$8L0:add$16,$19,$20 //k=0时,f=i+j jExitL1:add$16,$17,$18 //k=1时,f=g+h jExitL2:sub$16,$17,$18 //k=2时,f=g-h jExitL3:sub$16,$19,$20 //k=3时,f=i-jExit:汇编程序设计的简单例子2026/9/10

2026/9/10例20假定子程序A调用子程序B,子程序B调用子程序C。写出实现这个过程的MIPS指令序列,假定$29包含指向栈顶的指针,$24中包含调整到栈顶的值。画出子程序调用过程示意图。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论