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

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

相关文章

【C++ Primer Plus习题】13.4

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream>#include "port.h"int main() {Port p1;Port p2("Abc", "Bcc", 30);std::cout <<

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

hdu4407(容斥原理)

题意:给一串数字1,2,......n,两个操作:1、修改第k个数字,2、查询区间[l,r]中与n互质的数之和。 解题思路:咱一看,像线段树,但是如果用线段树做,那么每个区间一定要记录所有的素因子,这样会超内存。然后我就做不来了。后来看了题解,原来是用容斥原理来做的。还记得这道题目吗?求区间[1,r]中与p互质的数的个数,如果不会的话就先去做那题吧。现在这题是求区间[l,r]中与n互质的数的和

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

hdu4407容斥原理

题意: 有一个元素为 1~n 的数列{An},有2种操作(1000次): 1、求某段区间 [a,b] 中与 p 互质的数的和。 2、将数列中某个位置元素的值改变。 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.Inpu

hdu4059容斥原理

求1-n中与n互质的数的4次方之和 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWrit

寻迹模块TCRT5000的应用原理和功能实现(基于STM32)

目录 概述 1 认识TCRT5000 1.1 模块介绍 1.2 电气特性 2 系统应用 2.1 系统架构 2.2 STM32Cube创建工程 3 功能实现 3.1 代码实现 3.2 源代码文件 4 功能测试 4.1 检测黑线状态 4.2 未检测黑线状态 概述 本文主要介绍TCRT5000模块的使用原理,包括该模块的硬件实现方式,电路实现原理,还使用STM32类

计算机视觉工程师所需的基本技能

一、编程技能 熟练掌握编程语言 Python:在计算机视觉领域广泛应用,有丰富的库如 OpenCV、TensorFlow、PyTorch 等,方便进行算法实现和模型开发。 C++:运行效率高,适用于对性能要求严格的计算机视觉应用。 数据结构与算法 掌握常见的数据结构(如数组、链表、栈、队列、树、图等)和算法(如排序、搜索、动态规划等),能够优化代码性能,提高算法效率。 二、数学基础

TL-Tomcat中长连接的底层源码原理实现

长连接:浏览器告诉tomcat不要将请求关掉。  如果不是长连接,tomcat响应后会告诉浏览器把这个连接关掉。    tomcat中有一个缓冲区  如果发送大批量数据后 又不处理  那么会堆积缓冲区 后面的请求会越来越慢。

PHP原理之内存管理中难懂的几个点

PHP的内存管理, 分为俩大部分, 第一部分是PHP自身的内存管理, 这部分主要的内容就是引用计数, 写时复制, 等等面向应用的层面的管理. 而第二部分就是今天我要介绍的, zend_alloc中描写的关于PHP自身的内存管理, 包括它是如何管理可用内存, 如何分配内存等. 另外, 为什么要写这个呢, 因为之前并没有任何资料来介绍PHP内存管理中使用的策略, 数据结构, 或者算法. 而在我们