计算机组成原理----指令系统课后习题

2024-06-23 07:12

本文主要是介绍计算机组成原理----指令系统课后习题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

对应的知识点:

指令系统

扩展操作码的计算:

公式:

对扩展操作码而言,若地址长度为n,上一层留出m种状态,下一层可扩展出 mx2^n 种状态

1.设计某指令系统时,假设采用 16 位定长指令字格式,操作码使用扩展编码方式,地址码为6位,包含零地址,一地址和二地址3种格式的指令,若二地址指令有12条,一地址指令有254条,则零地址指令的条数最多为()

A.0        B.2        C.64        D.128

答案:D

先分析一下:

二地址指令占12(2*6=12)位地址空间,4位用来表示操作码,二地址指令有12条,那么剩余16-12=4条操作码扩展给一地址指令。

0000~1011  xxxx xxxx xxxx

一地址指令格式为:

11xx xxxx xxxx xxxx,其中低6位为地址码,一地址指令有254条,那么一地址指令可表示的范围:

1100 0000 00xx xxxx~1111 1111 01xx xxxx

其中,00 0000 00~11 1111 01表示0~253,总共254条指令。剩余256-254=2条指令扩展给零地址指令。

1111 1111 1xxx xxxx,前9位固定,因为超过1111 1111 01xx xxxx,就是零地址能表示的范围了。剩余位为16-9=7。所以零地址指令的条数最多为2^7=128条。

直接用公式:

二地址指令有12条,则剩余16-12=4种操作码给一地址指令,一地址指令有254条,4*2^6-254=2种操作码给零地址指令,所以零地址指令一共有2*2^6=128条。

还可以这么想:

地址码为6位,一条二地址指令会占用2^6条一地址指令的空间,一条一地址指令会占用2^6条零地址指令的空间。若全都是零地址指令,则最多有2^16条,减去一地址指令和二地址指令所占用的零地址指令空间,即2^16-254x2^6-12x2^6x2^6=128。

2.某计算机按字节编址,指令字长固定且只有两种指令格式,其中三地址指令29条、二地址指令107条,每个地址字段为6位,则指令字长少应该是()

A.24位        B.26位        C.28位        D.32位

答案:A

分析:三地址指令有29条,需要至少5位操作码,最后会剩余:2^5=32 ,32-29=3种操作码扩展给二地址指令,而二地址额外多了6位操作码(地址码比三地址指令少6位),所以数量最大达到3*64=192条。所以指令字长最少为5+6+12=23位。

又因为计算机按字节编址,需要8的倍数,所以指令字长至少为24位。

指令寻址方式:

1.寄存器 R1、R2 均为 16 位,指令 MOV R1,[R2]的功能是把内存数据传送至寄存器 R1,寻址方式为寄存器间接寻址。R2的值为1234H,内存单元1234H存放数据56H,内存单元 1235H 存放数据 78H,采用小端方式存储。则执行指令后R1的值为()。

A.5678H        B. 7856H        C.8765H        D.6587H

答案:B

MOV R1,[R2]指的是将R2寄存器的内容放到R1中,又因为R1,R2是16位寄存器,所以可以取出两个内存单元的数据放到R1中,即取出1234和1235的内容"5678",小端方式存储和阅读顺序是反的,所以R1的值为“7856”

2.某计算机机的字长为 16 位,主存按字编址。转移指令由两个字节组成,采用相对寻址,第一个字节为操作码字段,第二个字节为相对偏移量字段。若某转移指令所在的主存地址为 4000H,相对偏移量字段的内容为06H,则该转移指令执行后的PC值为()。

A.4002H       B. 4004H        C.4007H         D.4008H

答案:C

转移指令的目标地址一定是当前指令的下一条指令作为基址+偏移量。

由于主存按字编址,而转移指令又由两个字节组成,刚好就是一个字,所以只需要PC+1就可以。

如果这个这里说的是“主存按字节编址”,那么PC自增的时候就是PC+2

转移指令执行后的PC值为:4000H+06H+1=4007H

3.某机器指令字长为 16 位,主存按字节编址,取指令时,每取一字节,PC自动加1。当前指令地址为 2000H,指令内容为相对寻址的无条件转移指令,指令中的形式地址为40H。则取指令后及指令执行后PC的内容为()

A.2000H,2042H        B.2002H,2040H        C.2002H,2042H        D.2000H,2040H

答案:C

1.取一个字节,PC+1,指令字长为16位(2个字节),所以取指令后PC的内容为:PC+2=2002

2.转移指令的目标地址:需要将当前指令的下一条指令作为基地址+偏移量:

2000+2+40=2042

同个题型:

某机器字长为 16位,主存按字节编址,转移指令采用相对寻址,由 2字节组成,第一字节为操作码字段,第二字节为相对位移量字段。假定取指令时,每取一字节 PC 自动加 1。若某转移指令所在主存地址为 2000H,相对位移量字段的内容为06H,则该转移指令成功转移后的目标地址是()

A.2006H        B.2007H        C.2008H        D.2009H

答案:C

2000+2+06=2008

4.某计算机的主存容量为4M*16 位,且存储字长等于指令字长,若该机能完成 97 种操作,操作码位数固定,且有直接、间接、基址、变址、相对、立即六种寻址方式,则相对寻址的偏移量范围为()

A.(-32,+31)
B.(-64,+63)
C.(-128,+127)
D.(-256,+255)

答案:A

指令由操作码+寻址特征+地址码组成:

97种操作对应至少2^7=128种操作码,即操作码位数有7位;6种寻址方式对应至少3位地址。内存地址有16位,所以偏移量为:16-7-3=6位。

偏移量是用补码表示的,n位补码表示范围是-2^{n-1}~2^{n-1}-1,所以6位能表示的范围:

-2^{5}~2^5-1(-32~31)

同一题型:

某计算机采用 16 位定长指令字格式,操作码位数和寻址方式位数固定,指令系统有 48 条指令,支持直接、间接、立即、相对4种寻址方式。在单地址指令中,直接寻址方式的可寻址范围是()。A.0~255        B.0~1023        C.-128~127        D.-512~511

答案:A

48条指令,所以操作码字段为6位(2^6=64),又因为有4种寻址方式,所以寻址特征需要2位(2^2=4),地址字段:16-6-2=8位。

因为采用直接寻址,所以地址码字段放的是主存地址,主存地址是无符号数,所以这个问题就转化为了8位无符号数的寻址范围:0~2^8-1

5.对按字寻址的机器,程序计数器和指令寄存器的位数各取决于()

A.机器字长,存储器的字数        

B.存储器的字数,指令字长

C.指令字长,机器字长

D.地址总线宽度,存储器的字数

答案:B

机器按字寻址,程序计数器PC给出下一条指令字的访存地址(指令在内存中的地址),因此取决于存储器的字数;指令寄存器(IR)用于接收取得的指令,因此取决于指令字长。

6.设相对寻址的转移指令占 3B,第一字节为操作码,第二、三字节为相对位移量(补码表示),而且数据在存储器中采用以低字节为字地址的存放方式。每当 CPU 从存储器取出一字节时,即自动完成(PC)+1→PC。若 PC的当前值为 240(十进制),要求转移到290(十进制 ),则转移指令的第二、三字节的机器代码是( );若 PC 的当前值为 240(十进制),要求转移到 200(十进制),则转移指令的第二、三字节的机器代码是( )。

A. 2FH、FFH        B. D5H、00H                C. D5H、FFH        D.2FH、00H

答案:D,C

① 数据在存储器中采用以低字节为字地址的存放方式,表示采用小端存储。小端存储表示数据低位存放在低地址空间,大端存储表示数据的高位存放在低地址空间。就拿低地址空间来记就可以了,如果低地址放的是数据低位(低字节)就是小端存储,如果低地址放的是数据高位(高字节)就是大端存储。

"以低字节为字地址的存放方式”,字的地址取低地址作为字地址,例如下图,大端方式存储:低地址存放在数据高位,那么他的字地址就是12H。小端方式存储,他的字地址就是34H。以低字节为字地址,也就是低字节数据放在低地址,所以是小端存储方式。

② PC当前值是240,执行完转移指令后,PC的值为290,所以

240+3(PC+3)+x(偏移量)=290,x=47=101111(2进制)。转移指令占3B,第一字节为操作码,第二、三字节为相对位移量,并且用补码表示,所以101111扩展为16位:
0000 0000 0010 1111---->002F(16进制),采用小端存储:2F00

注意:小端存储只是字节之间的顺序颠倒,字节内的顺序不能动。

③ 同理 240+3+x=200,x=-43

-43对应的补码(16位):1111 1111 1101 0101---->FFD5(16进制),采用小端存储:D5FFH

7.某计算机按字节编址,采用大端方式,某指令的一个操作数的机器数为 ABCD 00FFH,该操作数采用基址寻址方式,指令中形式地址(用补码表示)为FF00H,当前基址寄存器的内容为 C000 0000H,则该操作数的LSB(即FFH)存放的地址是()。

A.C000 FF00H         B.C000 FF03H         C.BFFF FF00H         D.BFFF FF03H

答案:D

操作数的有效地址:C000 0000H+FFFF FF00H=BFFF FF00H。

由于计算机按字节编址,采用大端方式:

所以在存储单元BFFF FF00H(低地址)中放高字节ABH(1字节),BFFFF FF01H放CDH,BFFFF FF02H放00H,  BFFFF FF03H放FFH。      

问机器数ABCD 00FFH中的"FFH"存放在哪里?答案就是BFFFF FF03H。

同一题型:

某计算机采用大端方式,按字节编址。某指令中操作数的机器数为 1234 FF00H,该操作数采用基址寻址方式,形式地址(用补码表示)为FF12H,基址寄存器的内容为 F000 0000H,则该操作数的LSB(最低有效字节)所在的地址是()。

A.FO00 FF12H         B. F000 FF15H        C.EFFF FF12H        D. EFFF FF15H

答案:D

基址寻址方式,基址寄存器的内容不变,即F000 0000H,形式地址为FF12H,所以操作数的有效地址:

F000 0000H+FFFF FF12H=EFFF FF12H,又因为采用大端方式(低地址存放高字节数据),按字节编址,所以EFFF FF12H中存放的是"12H" ,EFFF FF13H中存放"34H",

EFFF FF​​​​​​​14H存放"FFH",EFFF FF15H存放"00H",所以操作数的LSB(最低有效字节)所在的地址(00H)是:

EFFF FF​​​​​​​15H

8.某机器有一个标志寄存器,其中有进位/借位标志 CF、零标志 ZF、符号标志 SF 和溢出标志 OF,条件转移指令 bgt(无符号整数比较大于时转移)的转移条件是( )
A.CF+OF=1        B.\overline{SF}+ZF=1        C.\overline{CF+ZF}=1        D.\overline{CF+SF}=1

答案:C

对于无符号数而言,SF和OF无意义,其实就可以选出C了。

大于的时候转移,即两个数进行相减操作,CF=0(只有不够减才会借位),ZF也为0(ZF是1说明结果为0),所以\overline{CF+ZF}=1   

9.某计算机有 16 个通用寄存器,采用 32 位定长指令字,操作码字段(含寻址方式位)为8位,STORE指令的源操作数和目的操作数分别采用寄存器直接寻址和基址寻址方式。若基址寄存器可使用任意一个通用寄存器,且偏移量用补码表示,则STORE指令中偏移量的取值范围是()

A.-32768~+32767
B.-32767~+32768
C.-65536~+65535
D.-65535~+65536

答案:A

指令的组成:

操作码字段:8位        源操作数的寻址特征(寻址方式):4位(16位通用寄存器)

目的操作数的寻址特征(寻址方式):4位        偏移量:32-8-4-4=16位。

16位补码的取值范围:-32768~+32767

答案:C

先变址后间址:

(I)+D:存放有效地址的地址。

((I)+D):操作数的有效地址。

(((I)+D )):操作数。

10.按字节编址的计算机中,某 double 型数组 A 的首地址为 2000H,使用变址寻址和循环结构访问数组 A,保存数组下标的变址寄存器的初值为 0,每次循环取一个数组元素,其偏移地址为变址值乘以 sizeof(double),取完后变址寄存器的内容自动加 1。若某次循环所取元素的地址为2100H,则进入该次循环时变址寄存器的内容是()。

A. 25        B. 32        C.64        D.100

答案:B

每个数组元素的地址:2000H(起始地址)+变址寄存器的内容*sizeof(double)

  2100H=2000H+变址寄存器的内容*8(double型)----->100H(16进制)=256(10进制),256/8=32,所以变址寄存器的内容为32。

指令系统:

1.假设 R[ax]= FFE8H,R[bx]=7FE6H,执行指令“add ax,bx”后,寄存器的内容和各标志的变化为( )
A. R[ax]=7FCEH,OF=1,SF=0,CF=0,ZF=0
B. R[bx]=7FCEH,OF=1,SF=0,CF=0,ZF=0
C.R[ax]=7FCEH,OF=0,SF=0,CF=1,ZF=0
D.R[bx]=7FCEH,OF=0,SF=0,CF=1,ZF=0​​​​​​​

答案:C

OF(溢出)=C_{n}\bigoplus C_{n-1},最高位的进位异或次高位的进位,所以OF=1

SF(符号):计算结果为正,所以SF=0

CF(进位/借位):Sub \bigoplus Cout,Sub:加法0,减法1        Cout:最高位的进位

所以CF=0\bigoplus 1=1

ZF(零标志位):ZF=0

2.假设 R[ax]= 7FE6H,R[bx]=FFE8H,执行指令“sub bx,ax”后,寄存器的内存和各标志的变化为()。
A.R[ax]=8002H,OF=0,SF=1,CF=1,ZF=0
B. Rbx]=8002H,OF=0,SF=1,CF=0,ZF=0
C.R[ax]=8002H,OF=1,SF=1,CF=0,ZF=0
D.R[bx]=8002H,OF=1,SF=1,CF=0,ZF=0

答案:B

“sub bx,ax”,就是bx-ax

减法转加法:bx - ax--->bx+(-ax)

怎么将ax转为-ax:ax的全部位取反,末位+1

        1111 1111 1110 1000

+      1000 0000 0001 1010 

---------------------------------------

    (1)1000 0000 0000 0010

所以  OF=1\bigoplus1=0,SF=1,CF=Sub \bigoplus Cout=1\bigoplus1=0,ZF=0       

3.某计算机的数据采用小端方式存储,减法指令“sub ax,imm”的功能为(ax)-imm→ax,imm 表示立即数,该指令对应的十六进机器码为 2dxxxx(从左到右以字节为单位由低地址到高地址),其中xxxx对应 imm 的机器码,若imm= -3 ,(ax)=7,则该指令对应的机器码和执行后 OF 标志位的值分别为()。

A.2DFFFDH,0        B2DFFFDH,1        C.2DFDFFH,0        D.2DFDFFH,1

答案:C

① -3的机器数为(别忘了符号扩展):1111 1111 1111 1101(2进制)=FFFD(16进制)

采用小端方式存储,所以低地址存放的是低字节数据,所以题目中

“2dxxxx(从左到右以字节为单位由低地址到高地址)”,对应的机器码就是2dFDFF:

FD是一个字节,FF是一个字节,字节间颠倒,字节内不用颠倒。

② 运算的时候是一定是按2个字节进行运算:

也就是不能按照

     0111

+   0011(-3全部位取反+1)

--------------

(0) 1010

这样算得到的OF=1,是错的。

需要按照

0007H-FFFDH计算:

     0000 0000 0000 0111

+   0000 0000 0000 0011

-----------------------------------

     0000 0000 0000 1010

这样算是正确的,OF=0

4.假设 R[eax]=080480B4H,R[ebx]=00000011H,M[080480F8H]=000000B0H,执行指令

“imul eax,[eax+ebx*4],-16”后,寄存器或存储单元的内容变为( )。

A.R[eax]=00000B00H          B. M[080480F8H]=00000B00H

C.R[eax]= FFFFF500H        D.M[080480F8H]=FFFFF500H

答案:C

[eax+ebx*4]*(-16)--->eax

ebx*4:就是让ebx的内容左移2位

00000011--->000000(没有拆) 0001 0001----左移两位--->000000(没有拆) 0100 0100

eax+ebx*4:

0804 80F8H+0000 0044 = 0804 80F8H

*(-16):先将其看作*16,即左移4位(2^4=16)

000000B0H--->00000(没拆) 0000 1011 0000---左移四位--->00000(没拆)  1011 0000 0000

即00000 B 00 H

继续乘-1,相当于取了相反数,即全部位取反,再加1:

00000 B 00 H--->FFFFF 0101 0000 0000=FFFFF500

5.程序P中有两个变量i和j,被分别分配在寄存器 eax 和 edx 中,P 中语句“if(i<j) {...}”,对应的指令序列如下(左边为指令地址,中间为机器代码,右边为汇编指令),其中jle指令的偏移量为 0d:

若执行到 804846aH 处的cmp指令时,i=105,j=100,则 jle 指令执行后将会转到()处的指令执行。
A. 8048461H
B.804846eH
C.8048479H
D.804847bH

答案:D

① jle表示jump if less or equal,如果edx-eax的结果<=0,那么就执行jle。

② 100-105为负数,所以要执行jle,执行完jle后,PC自增,有图片可以看出每次自增+2

(804846a---->804846c)

所以最后会转到:804846c+2+0d=8048 47bH

这篇关于计算机组成原理----指令系统课后习题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1086480

相关文章

《计算机英语》Unit 1 Computer Overview 计算机概述

期末试卷组成 1、选择20道 2、判断20道 3、词汇翻译(单词+词组,参照课后习题) 4、翻译2道(一道原题,参照作业) SectionA About Computer 关于计算机 algorithm          n.  算法  operate          v.  操作  digital           adj. 数字的  integrated circuit

数据库原理与安全复习笔记(未完待续)

1 概念 产生与发展:人工管理阶段 → \to → 文件系统阶段 → \to → 数据库系统阶段。 数据库系统特点:数据的管理者(DBMS);数据结构化;数据共享性高,冗余度低,易于扩充;数据独立性高。DBMS 对数据的控制功能:数据的安全性保护;数据的完整性检查;并发控制;数据库恢复。 数据库技术研究领域:数据库管理系统软件的研发;数据库设计;数据库理论。数据模型要素 数据结构:描述数据库

计算机组成原理——RECORD

第一章 概论 1.固件  将部分操作系统固化——即把软件永恒存于只读存储器中。 2.多级层次结构的计算机系统 3.冯*诺依曼计算机的特点 4.现代计算机的组成:CPU、I/O设备、主存储器(MM) 5.细化的计算机组成框图 6.指令操作的三个阶段:取指、分析、执行 第二章 计算机的发展 1.第一台由电子管组成的电子数字积分和计算机(ENIAC) 第三章 系统总线

GaussDB关键技术原理:高性能(二)

GaussDB关键技术原理:高性能(一)从数据库性能优化系统概述对GaussDB的高性能技术进行了解读,本篇将从查询处理综述方面继续分享GaussDB的高性能技术的精彩内容。 2 查询处理综述 内容概要:本章节介绍查询端到端处理的执行流程,首先让读者对查询在数据库内部如何执行有一个初步的认识,充分理解查询处理各阶段主要瓶颈点以及对应的解决方案,本章以GaussDB为例讲解查询执行的几个主要阶段

计算机Java项目|基于SpringBoot的网上摄影工作室

作者主页:编程指南针 作者简介:Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容:Java项目、Python项目、前端项目、人工智能与大数据、简历模板、学习资料、面试题库、技术互助 收藏点赞不迷路  关注作者有好处 文末获取源码  项目编号:L-BS-QBBSSPRINGBOOT

【计算机组成原理】部分题目汇总

计算机组成原理 部分题目汇总 一. 简答题 RISC和CICS 简要说明,比较异同 RISC(精简指令集)注重简单快速的指令执行,使用少量通用寄存器,固定长度指令,优化硬件性能,依赖软件(如编译器)来提升效率。 CISC(复杂指令集)包含多样复杂的指令,能一条指令完成多步操作,采用变长指令,减少指令数但可能增加执行时间,倾向于硬件直接支持复杂功能减轻软件负担。 两者均追求高性能,但RISC

MySQL数据库锁的实现原理

MySQL数据库的锁实现原理主要涉及到如何确保在多用户并发访问数据库时,保证数据的完整性和一致性。以下是MySQL数据库锁实现原理的详细解释: 锁的基本概念和目的 锁的概念:在数据库中,锁是用于管理对公共资源的并发控制的机制。当多个用户或事务试图同时访问或修改同一数据时,数据库系统通过加锁来确保数据的一致性和完整性。 锁的目的:解决多用户环境下保证数据库完整性和一致性的问题。在并发的情况下,会

《学习OpenCV》课后习题解答7

题目:(P105) 创建一个结构,结构中包含一个整数,一个CvPoint和一个 CvRect;称结构体为“my_struct”。 a. 写两个函数:void Write_my_strct(CvFileStorage* fs, const char * name, my_struct* ms) 和 void read_my_struct(CvFileStorage* fs, CvFileNode

《学习OpenCV》课后习题解答6

题目:(P104) 使用cvCmp()创建一个掩码。加载一个真实的图像。使用cvsplit()将图像分割成红,绿,蓝三个单通道图像。 a.找到并显示绿图。 b.克隆这个绿图两次(分别命名为clone1和clone2)。 c.求出这个绿色平面的最大值和最小值。 d.将clone1的所有元素赋值为theash=(unsigned char)((最大值-最小值)/2.0)。 e.将clone

《学习OpenCV》课后习题解答5

题目:(P104) 为一个图像创建多个图像头。读取一个大小至少为100*100的图像。另创建两个图像头并设置它们的origion,depth,nChannels和widthStep属性同之前读取的图像一样。在新的图像头中,设置宽度为20,高度为30.最后,将imageData指针分别指向像素(5,10)和(50,60)像素位置。传递这两个新的图像头给cvNot()。最后显示最初读取的图像,在那个