先决条件–基本计算机指令,指令格式
指令格式定义了指令的不同组成部分。指令的主要组成部分是操作码(要执行的指令)和操作数(要执行指令的数据)。以下是与指令格式有关的不同术语:
- 指令集大小–告诉处理器中定义的指令总数。
- 操作码大小–它是操作码占用的位数,它是通过取指令集大小的对数来计算的。
- 操作数大小–它是操作数占用的位数。
- 指令大小–计算为操作码和操作数所占位的总和。
在本文中,我们将基于GATE中要求的指令格式讨论不同类型的问题。有关不同类型的指令格式的详细信息,请参阅:指令格式
类型1:给定指令集大小和操作数大小及其计数,找到指令的大小。
在此类问题中,将为您提供指令集的大小,操作数的数量及其大小,您必须找出指令的大小。
Que-1。考虑具有64个寄存器和大小为12的指令集的处理器。每条指令具有五个不同的字段,即操作码,两个源寄存器标识符,一个目标寄存器标识符和一个十二位立即数。每条指令必须以字节对齐的方式存储在内存中。如果程序有100条指令,则程序文本占用的内存量(以字节为单位)为____________。 (2016年GATE)
(A)100
(B)200
(C)400
(D)500
解决方案:可以这样处理:
- 该指令由操作码和操作数组成。给定大小为12的指令集,操作码需要4位(2 ^ 4 = 16)。
- 由于总共有64个寄存器,因此需要6位来标识一个寄存器。
- 由于该指令包含3个寄存器(2个源+ 1个指定),因此寄存器标识符需要3 * 6 = 18位。
- 给定的立即数需要12位。
- 一条指令的总位= 4 + 18 + 12 = 34位
- 要求以字节对齐方式存储指令。 34位之后的最近字节边界为40位(5个字节)。
- 因此,对于100条指令,所需的内存为5 * 100 = 500字节,正确的选项为(D)。
类型2:给定指令大小,操作码大小和某些操作数的大小,找到剩余操作数的大小和最大值。
在此类问题中,将为您提供指令的大小,操作码的大小,操作数的数量和某些操作数的大小,您必须找出其余操作数的大小或最大值。
队列2。处理器具有40个不同的指令和24个通用寄存器。一个32位指令字具有一个操作码,两个寄存器操作数和一个立即数操作数。可用于立即数操作数字段的位数是_______。 (GATE CS 2016)
解决方案:可以这样处理:
- 由于处理器有40条指令,因此操作码的位数= 6(2 ^ 6 = 64)
- 由于处理器有24个寄存器,因此一个寄存器的位数= 5(2 ^ 5 = 32)
- 2个寄存器占用的总位,操作码= 6 + 5 + 5 = 16。
- 由于给定的指令大小为32位,因此操作数剩余的剩余位= 32-16 = 16位。
队列3。机器具有32位架构,带有1个字长的指令。它有64个寄存器,每个寄存器长32位。它需要支持45条指令,除了两个寄存器操作数外,还具有一个立即数操作数。假设立即数是无符号整数,则立即数的最大值是___________。 (GATE CS 2014)
解决方案:可以这样处理:
- 由于机器具有32位架构,因此1个字= 32位=指令大小
- 由于处理器具有64个寄存器,因此一个寄存器的位数= 6(2 ^ 6 = 64)
- 由于处理器有45条指令,因此操作码的位数= 6(2 ^ 6 = 64)
- 2个寄存器占用的总位,操作码= 6 + 6 + 6 = 18。
- 由于给定的指令大小为32位,因此立即操作数剩余的剩余位= 32-18 = 14位。
- 使用14位的最大无符号值= 2 ^ 14 – 1 = 16383,这就是答案。
类型3:具有不同类别指令的指令格式
在此类问题中,将为您提供不同类别的说明。您必须找到给定类型的最大可能指令。
-44。处理器具有16个整数寄存器(R0,R1,…,R15)和64个浮点寄存器(F0,F1,…,F63)。它使用2字节指令格式。指令分为四类:Type-1,Type-2,Type-3和Type4。Type-1类别由四个指令组成,每个指令具有3个整数寄存器操作数(3R)。类型2类别由八条指令组成,每条指令具有2个浮点寄存器操作数(2F)。 Type-3类别由14条指令组成,每条指令都有一个整数寄存器操作数和一个浮点寄存器操作数(1R + 1F)。 Type-4类别由N条指令组成,每条指令都有一个浮点寄存器操作数(1F)。
N的最大值是________。 (GATE-CS-2018)
解决方案:可以这样处理:
- 由于机器具有2字节= 16位的指令格式,因此,可能的编码= 2 ^ 16。
- 由于处理器具有16个整数寄存器,因此一个整数寄存器的位数= 4(2 ^ 4 = 16)
- 由于处理器具有64个浮点寄存器,因此一个浮点寄存器的位数= 6(2 ^ 6 = 64)。
- 对于具有4条指令的type-1类别,每个指令具有3个整数寄存器操作数(4 * 3 = 12位)将消耗4 * 2 ^ 12 = 2 ^ 14编码。
- 对于具有8条指令的2类类别,每个指令具有2个浮点寄存器操作数(2 * 6 = 12位)将消耗8 * 2 ^ 12 = 2 ^ 15编码。
- 对于具有14条指令的类型3类,每个指令具有1个整数寄存器和1个浮点寄存器操作数(4 + 6 = 10位)将消耗14 * 2 ^ 10 = 14336编码。
- 对于类型4类别指令,剩余编码数= 2 ^ 16 – 2 ^ 14 – 2 ^ 15 – 14336 = 2048。
- 对于具有N条指令的类型4类,每个指令具有1个浮点寄存器操作数(6位)将消耗N * 2 ^ 6 = 2048(根据上一步计算)。因此,N = 32。