2025年自考计算机组成原理试题及答案_第1页
2025年自考计算机组成原理试题及答案_第2页
2025年自考计算机组成原理试题及答案_第3页
2025年自考计算机组成原理试题及答案_第4页
2025年自考计算机组成原理试题及答案_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

2025年自考计算机组成原理试题及答案一、单项选择题(本大题共20小题,每小题1分,共20分)在每小题列出的四个备选项中只有一个是符合题目要求的,请将其选出并将“答题卡”的相应代码涂黑。错涂、多涂或未涂均无分。1.冯·诺依曼计算机的核心思想是()。A.存储器按内容访问B.采用二进制和存储程序C.使用高速缓存D.指令并行执行答案:B2.若一个定点整数用8位补码表示,其表示范围是()。A.-128~+127B.-127~+127C.-127~+128D.-128~+128答案:A3.在补码加法运算中,如果两个正数相加的结果为负数,这表示发生了()。A.上溢B.下溢C.无溢出D.除零错误答案:A4.某SRAM芯片,其存储容量为16K×8位,除电源和接地端外,该芯片最少应有地址线和数据线的数目之和为()。A.24B.28C.30D.32答案:B(解析:16K=2^14,故地址线14根,数据线8根,和为22,但题目问“除电源和接地端外…最少应有…之和”,通常此类计算题直接计算信号线,14+8=22,但选项无22。常见题型中,16K=2^14地址线,数据线8,控制线(如读写、片选)至少2根,共14+8+2=24。但严格按“地址线和数据线的数目之和”应为22。历年真题中有类似争议,但更常见考法是计算地址数据线,此处按常见正确理解:地址线14,数据线8,和22,但无此选项,疑为题目设计或记忆偏差。典型题目如“64K×8位,地址线16,数据线8,和24”。核对原题可能为16K×4位,地址线14,数据线4,和18;或32K×8位,地址线15,数据线8,和23。但根据所给选项,结合常见真题,选B28可能原题为其他容量。为保持试卷逻辑,此处假定原题为“64K×8位”,则地址线16,数据线8,控制线最少读写、片选等,但“地址线和数据线之和”为24,选项无。若为“1M×8”,地址线20,数据线8,和28。故推测原题容量可能较大。为提供准确答案,按通用知识点:地址线数n满足2^n=单元数,数据线数等于字长位数,两者之和即为信号线数。若按1M×8,则1M=2^20,地址线20,数据线8,和28,选B。)5.下列存储器中,属于随机存取存储器的是()。A.光盘B.硬盘C.磁带D.主存储器答案:D6.在程序查询I/O方式中,CPU与外部设备进行数据交换的过程是由()驱动的。A.外部中断请求B.DMA请求C.CPU主动查询设备状态D.通道命令答案:C7.指令系统中采用不同寻址方式的主要目的是()。A.增加内存容量B.缩短指令长度,扩大寻址空间,提高编程灵活性C.提高访问内存的速度D.简化指令译码电路答案:B8.在微程序控制器中,控制存储器中存放的是()。A.指令系统B.微程序C.数据D.操作系统内核答案:B9.总线带宽是指()。A.总线物理长度B.总线信号线种类C.总线所能达到的最高数据传输率D.总线时钟频率答案:C10.在单级中断系统中,CPU一旦响应中断,为了防止本次中断服务结束前同级的其他中断源产生另一次中断导致服务混乱,需要立即()。A.保护现场B.开中断C.关中断D.中断返回答案:C11.动态RAM(DRAM)刷新以()为单位进行。A.存储单元B.字节C.行D.存储芯片答案:C12.下列数中,最大的数是()。(假设为8位二进制数,前两为原码,后两为补码)A.(10010101)原码B.(10010101)补码C.(00101011)原码D.(00101011)补码答案:C(解析:A原码对应十进制-21,B补码对应十进制-107,C原码对应+43,D补码对应+43。故最大为C或D的+43。但原题要求比较“数”的大小,通常指数值。C和D数值相等,但题目可能隐含比较其表示的数值在机器中的“大小”关系,若直接比较二进制位模式,则C的二进制最高位为0,其余选项有1,作为无符号数比较则A=149最大。但通常此类题是比较其表示的十进制真值。按真值,C和D最大且相等。但单选题需选一个,可能原题设计C为原码正数,D为补码正数,数值相等,但一般选C,因其明确为正的原码表示。结合常见真题,选C。)13.采用双符号位法进行溢出检测时,如果运算结果的两个符号位为“01”,则表示()。A.无溢出,结果为正B.无溢出,结果为负C.溢出,正溢D.溢出,负溢答案:C14.某计算机字长32位,按字节编址。主存与Cache之间采用全相联映射方式,Cache共8行,主存容量为1GB。则主存地址中,用于标识Cache行的标记(Tag)位数为()。A.27位B.28位C.29位D.30位答案:B(解析:主存容量1GB=2^30B,按字节编址,地址线30位。Cache共8行=2^3行,全相联映射,主存地址划分为:标记(Tag)+字块内地址。字块大小?题目未给出,但Cache行数已知,未给出块大小,无法直接计算。典型题目会给出块大小或Cache总容量。假设缺失条件。常见类似题:若字长32位,按字节编址,则每个字4B。若未说明块大小,可能默认以字为单位?但难以确定。若假设块大小为1个字(4B),则块内地址为2位(因为4B=2^2),Cache行索引3位,则标记位=30-2-3=25位,无此选项。若块大小为4个字(16B),则块内地址4位,标记=30-4-3=23位。若Cache数据区容量未给出,仅行数,无法确定。可能原题隐含“主存地址空间大小”与“Cache行数”关系,全相联下,标记位为主存地址位数减去块内地址位数。若假设块大小为32B(2^5),则块内地址5位,标记位=30-5=25位。若块大小为64B(2^6),则标记位=24位。均无选项。另一种思路:主存地址30位,全相联,无行索引位,标记位理论上应为能区分所有主存块的位数。主存块数=主存容量/块大小。若块大小未知,则无法计算。但选项中27,28,29,30,可能对应块大小为4B,2B,1B?若块大小=4B,则主存块数=2^30/2^2=2^28,需要28位标记来标识哪个主存块。此时Cache行数8仅影响替换算法,不占地址位。故标记位为28位。选B。常见真题:主存1GB,按字节编址,块大小32B,全相联,则标记位=30-5=25位。但此处无块大小,按标记需区分所有块,若块最小为1B,则标记需30位;若块为4B,则标记需28位。结合选项,B28位较合理,可能默认按字(4B)访问,块内地址2位,但全相联无索引,标记为高28位。故选B。)15.在指令的地址字段中直接给出操作数本身的寻址方式称为()。A.立即寻址B.直接寻址C.寄存器寻址D.间接寻址答案:A16.微程序控制器中,机器指令与微指令的关系是()。A.一条机器指令对应一条微指令B.一条机器指令对应一段微程序C.一条微指令对应一条机器指令D.一段微程序对应多条机器指令答案:B17.总线的异步通信方式()。A.采用统一的时钟信号控制B.不采用时钟信号,依靠应答机制控制C.总线长度较短,速度高D.时钟频率固定答案:B18.在磁盘存储器中,寻找时间(寻道时间)是指()。A.磁头移动到目标磁道所需的时间B.磁盘旋转使目标扇区到达磁头下方所需的时间C.数据从磁盘读出并传送到内存所需的时间D.磁头读写数据所需的时间答案:A19.下列有关中断隐指令的操作中,不由硬件完成的是()。A.关中断B.保存断点C.形成中断服务程序入口地址D.保存通用寄存器内容答案:D20.在补码一位乘法(Booth算法)中,如果当前位组合为“10”,则下一步应执行的操作是()。A.加0,右移B.加[-X]补,右移C.加[X]补,右移D.加[-X]补,左移答案:B二、填空题(本大题共10小题,每小题2分,共20分)请在每小题的空格中填上正确答案。错填、不填均无分。1.计算机系统的五大基本组成部件是:运算器、控制器、存储器、输入设备和输出设备。2.十进制数-37的8位补码表示为11011011。3.若浮点数格式中,阶码6位(含1位阶符,补码表示),尾数10位(含1位数符,补码表示,规格化),则其可表示的绝对值最大的负数的二进制表示为阶码:011111,尾数:1000000000。(注:阶码最大正数2^5-1=31,尾数最小负数-1,组合后为绝对值最大负数。但规格化尾数补码最小负数为1.00...0,即-1,对应符号位1,数值部分全0?补码表示-1为1.000...0(小数)。此处格式未明确小数点在符号位后,通常约定如此。故尾数:1.000000000(二进制),即十位为1后跟9个0。阶码用补码表示最大正阶31为011111。故整体表示为:0111111000000000。)4.存储器的性能指标主要包括:存储容量、存取时间、存储周期和存储器带宽。5.在虚拟存储器系统中,若逻辑地址空间为8页,每页1KB,主存空间为4页,则逻辑地址需要用13位表示。(8页需3位,页内地址1KB需10位,共13位。)6.CPU中用于存放下一条要执行的指令地址的寄存器是程序计数器(PC)。7.在硬布线控制器中,微操作控制信号由组合逻辑电路直接产生。8.总线仲裁方式中,集中式仲裁主要有链式查询、计数器定时查询和独立请求三种方式。9.程序中断I/O方式中,CPU在每条指令执行周期的末尾时刻检测中断请求信号。10.磁盘的存储区域由一系列同心圆组成,每个同心圆称为一个磁道。三、简答题(本大题共5小题,每小题6分,共30分)1.简述指令周期、机器周期和时钟周期的概念及其关系。答:指令周期是指CPU从主存中取出一条指令并执行完这条指令所需的全部时间。不同指令的指令周期长度可能不同。机器周期(又称CPU周期)通常指CPU完成一个基本操作(如取指、间址、执行、中断等)所需的时间,是指令周期的组成部分。时钟周期(又称T周期或节拍)是CPU处理操作的最基本时间单位,由主时钟频率决定。一个机器周期通常包含若干个时钟周期,一个指令周期包含若干个机器周期。三者关系为:多个时钟周期构成一个机器周期,多个机器周期构成一个指令周期。2.什么是Cache的写直达法和写回法?比较两者的优缺点。答:写直达法是指当CPU对Cache进行写操作时,同时将数据写入Cache和主存对应的单元。其优点是能始终保持主存与Cache数据的一致性,可靠性高。缺点是每次写操作都要访问速度较慢的主存,增加了系统总线负担,降低了写速度。写回法是指当CPU对Cache进行写操作时,只修改Cache中的内容,并用脏位(修改位)进行标记,只有当该Cache行被替换出去时,才将修改过的数据写回主存。其优点是减少了访问主存的次数,提高了写操作的速度,总线负荷轻。缺点是存在数据不一致的隐患,控制逻辑稍复杂。3.简述程序中断处理过程中,中断隐指令完成的主要操作。答:中断隐指令并不是一条真正的指令,而是在中断响应过程中由硬件自动执行的一系列操作。它主要完成:①关中断:保护现场和中断处理期间不被新的中断打断。②保存断点:将当前程序计数器(PC)的内容(即下一条应执行指令的地址)保存到堆栈或特定寄存器中。③转中断服务程序入口:根据中断源,将对应的中断服务程序的入口地址送入PC,从而跳转到中断服务程序执行。4.说明寄存器间接寻址和变址寻址的区别,并分别举例说明其适用场景。答:寄存器间接寻址方式下,指令中地址字段给出的是一个寄存器的编号,该寄存器的内容才是操作数的有效地址。它主要用于访问内存中的数组元素或进行指针操作。例如,在循环中通过修改一个基址寄存器的值来访问数组的连续元素。变址寻址方式下,指令中地址字段给出的是一个形式地址(或称偏移量),还需要与一个变址寄存器的内容相加,得到操作数的有效地址。它特别适用于处理数组或字符串,变址寄存器指向数组基址,形式地址为数组元素下标对应的偏移量。例如,访问数组A[i]时,变址寄存器存放i,形式地址为数组首地址,有效地址为两者之和。主要区别:寄存器间接寻址的有效地址完全来自于寄存器的内容;变址寻址的有效地址是寄存器内容与指令中地址字段的常数之和。5.什么是总线的同步通信和异步通信?各自的特点是什么?答:同步通信是指总线上的所有设备由统一的公共时钟信号控制,总线操作过程在固定的时钟周期内完成,设备之间没有应答信号。其特点是控制简单,速度快,但时钟频率必须适应最慢的设备,总线长度受限,时钟漂移可能影响可靠性。异步通信是指总线操作没有统一的时钟信号控制,而是依靠请求和应答的握手信号来协调通信过程。其特点是灵活性高,能适应不同速度的设备,总线长度可以较长,但控制复杂,传输速度通常低于同步通信,且信号线较多。四、计算题/应用题(本大题共3小题,每小题10分,共30分)1.已知X=+0.1101,Y=-0.1011,设机器数阶码4位(含1位阶符,补码表示),尾数6位(含1位数符,补码表示,采用双符号位)。要求:(1)将X、Y表示为规格化浮点数。(2)计算[X+Y]补(要求写出详细步骤,尾数运算用双符号位补码加减运算)。答:(1)将X、Y规格化:X=+0.1101=0.1101×2^0规格化浮点数表示:阶码(补码):0000;尾数(补码,双符号位):00.1101。因尾数6位含1位数符,双符号位共2位符号,数值部分4位,故需将0.1101补足为00.1101(即符号位00,数值1101)。但通常双符号位尾数格式为:符号位两位,数值位n位。此处尾数总宽6位,双符号位占2位,数值位4位。X=+0.1101,原码为0.1101,补码同原码,双符号位00。故X浮点数:阶码0000,尾数001101。(为书写方便,阶码4位,尾数6位)Y=-0.1011=-0.1011×2^0原码为1.1011,补码为:数值位按位取反加1,1.0101。求补码过程:-0.1011,绝对值0.1011,原码1.1011,补码符号位不变,数值位取反加1:1.0100+0.0001=1.0101。双符号位需扩展符号:补码单符号位1,双符号位为11。故Y尾数补码(双符号位):11.0101。存储为6位:110101。Y浮点数:阶码0000,尾数110101。(2)计算[X+Y]补:步骤1:对阶。X、Y阶码相同,均为0,无需对阶。步骤2:尾数相加。[X]尾补=00.1101(实际存储001101,运算时视为00.1101)[Y]尾补=11.0101(实际存储110101,运算时视为11.0101)00.1101+11.0101100.0010最高位(第3位符号)1溢出,双符号位实际得到的是00.0010(取低两位符号位和数值位,即000010,其中第一个0是第二符号位)。但相加过程:00.1101+11.0101=(00.1101+11.0101)=100.0010,舍弃最高位(第一符号位的进位),得到00.0010。双符号位为00,表示结果为正。步骤3:规格化。结果尾数00.0010,不是规格化数(因为数值最高位为0)。需要左规。尾数左移一位,变为00.0100,阶码减1。左移一次后,数值最高位为1,已规格化。原阶码0000(十进制0),减1后变为补码表示的-1:4位补码,-1表示为1111。步骤4:舍入处理。此处尾数未超出精度,无需特殊舍入。步骤5:判断溢出。阶码符号位为11,无溢出(若阶码双符号位则更易判断,但本题阶码单符号位,1111表示-1,在表示范围内)。因此,[X+Y]补为:阶码1111,尾数000100(双符号位00,数值0100,即00.0100)。十进制验证:X=0.8125,Y=-0.6875,和=0.125。0.125=0.001×2^0=0.1000×2^{-1}。规格化尾数0.1,补码00.1000,阶码-1补码1111。与结果一致。2.某计算机主存容量为64KB,按字节编址。现有8片8K×4位的SRAM芯片,请设计该计算机的主存储器,要求:(1)画出该存储器的组成逻辑框图,包括地址总线、数据总线、控制总线(读写、访存)、芯片片选逻辑、芯片内地址线、数据线连接。(2)简要说明地址空间分配情况。答:(1)设计过程:主存总容量64KB=64×1024×8位。所用芯片容量:8K×4位=8×1024×4位。所需芯片总数:(64K×8)/(8K×4)=(64/8)×(8/4)=8×2=16片。但题目给出“现有8片”,若只用8片,则总容量为8×(8K×4)=64K×4位=32KB,与主存容量64KB不符。可能题目本意是用8片8K×4位芯片构成64KB?这不可能,因为8片8K×4位总位数是8×8K×4=256Kb=32KB。若要构成64KB(512Kb),需要16片。疑为题目表述“现有8片”有误或为部分构成。常见真题为用8K×4位芯片构成64KB,需16片。此处按构成64KB设计。逻辑框图设计:芯片分组:每两片8K×4位芯片位扩展构成一个8K×8位(即8KB)的存储模块。共需8个这样的模块(8×8KB=64KB)。芯片分组:每两片8K×4位芯片位扩展构成一个8K×8位(即8KB)的存储模块。共需8个这样的模块(8×8KB=64KB)。地址分配:主存64KB,地址线16根(A15-A0)。芯片容量8K=2^13,需要13根地址线(A12-A0)用于片内寻址。剩余高3位地址(A15,A14,A13)用于片选,通过3-8译码器产生8个片选信号,分别连接8个模块的片选端(每个模块的两片芯片片选端并联)。地址分配:主存64KB,地址线16根(A15-A0)。芯片容量8K=2^13,需要13根地址线(A12-A0)用于片内寻址。剩余高3位地址(A15,A14,A13)用于片选,通过3-8译码器产生8个片选信号,分别连接8个模块的片选端(每个模块的两片芯片片选端并联)。数据线:每个模块的数据线高4位接一组芯片,低4位接另一组芯片,共同组成8位数据总线(D7-D0)。数据线:每个模块的数据线高4位接一组芯片,低4位接另一组芯片,共同组成8位数据总线(D7-D0)。控制线:读写控制线(如R/W#)并联连接到所有芯片的读写控制端。访存控制线(如MREQ#)可作为译码器使能条件。控制线:读写控制线(如R/W#)并联连接到所有芯片的读写控制端。访存控制线(如MREQ#)可作为译码器使能条件。由于文字描述限制,框图示意如下:```地址总线A15-A0A12-A0--->所有芯片的地址引脚(并联)A15,A14,A13--->3-8译码器输入3-8译码器输出Y0-Y7--->分别连接到模块0-7的片选(CS)每个模块由两片芯片组成,CS并联。数据总线D7-D0模块0:芯片A(低4位)接D3-D0,芯片B(高4位)接D7-D4...模块7类似。控制总线:R/W#连接所有芯片的WE#或OE#;MREQ#连接译码器使能端。```(2)地址空间分配:使用A15,A14,A13进行译码,各模块地址范围如下:Y0:0000000000000000~0001111111111111(0000H~1FFFH)模块0,8KBY1:0010000000000000~0011111111111111(2000H~3FFFH)模块1,8KBY2:0100000000000000~0111111111111111(4000H~5FFFH)模块2,8KBY3:0110000000000000~0111111111111111(6000H~7FFFH)模块3,8KBY4:1000000000000000~1001111111111111(8000H~9FFFH)模块4,8KBY5:1010000000000000~1011111111111111(A000H~BFFFH)模块5,8KBY6:1100000000000000~1101111111111111(C000H~DFFFH)模块6,8KBY7:1110000000000000~1111111111111111(E000H~FFFFH)模块7,8KB注:若实际只用8片芯片,则只能构成32KB,地址空间减半。3.某计算机指令系统采用定长操作码,指令字长16位,每个地址码占4位。指令分为二地址指令、一地址指令和零地址指令三类。若二地址指令有15条,一地址指令有31条,问:(1)零地址指令最多可以有多少条?(2)若操作码采用扩展编码方式,上述指令条数不变,则零地址指令最多可以有多少条?试说明两种情况下操作码的编码方案。答:(1)定长操作码方案(通常指操作码部分固定长度,但本题指令类型不同,地址码数量不同,故操作码长度应可变,才能充分利用指令字空间。题干“采用定长操作码”可能指每类指令内部操作码定长?更常见是分析操作码扩展。此处按可变长度操作码,即扩展操作码设计。)指令字长16位。二地址指令:操作码+地址码1(4位)+地址码2(4位)。所以操作码占16-4-4=8位。若二地址指令有15条,则可用8位操作码中的15个编码表示,例如00000000~00001110。剩下一个编码00001111用于扩展标识一地址指令。一地址指令:操作码扩展自二地址指令留下的标识位,占用高4位(至少)为1111?实际上,当二地址指令操作码高4位(或某部分)固定时,剩余位可扩展。常见方法是:二地址指令操作码占用前8位,但只用了部分编码。设二地址指令操作码为0000XXXX~1110XXXX?不合理。标准解法:设二地址指令操作码占4位(因为地址码共8位,指令字16位,故操作码8位)。但若二地址指令只有15条,则8位操作码空间(256种)大部分空闲。为给一地址和零地址留空间,需要采用扩展码,即操作码长度可变。具体分析:二地址指令格式:OP(8位)A1(4位)A2(4位)。15条二地址指令,需用掉15个8位OP码。设用00000000~00001110共15个。剩余的8位OP码中,以00001111作为一地址指令的扩展前缀。一地址指令格式:OP(12位)A(4位)。其高8位必须为00001111,低4位OP可编码。因此一地址指令操作码共12位,高8位固定为00001111,低4位可变,可表示2^4=16条一地址指令。但题目要求有31条一地址指令,16条不够。因此需要更多扩展前缀。所以,定长操作码假设下,若要求二地址15条,一地址31条,可能无法同时满足,除非操作码非定长。故第(1)问可能是在操作码长度可扩展的前提下,问零地址指令最多条数。重新按扩展操作码标准方法计算:设指令字长16位,每个地址码4位。二地址指令:操作码长度=16-4-4=8位。设二地址指令有15条,用掉15个编码。剩余256-15=241个编码可用于扩展。一地址指令:操作码长度=16-4=12位。其高8位必须取自二地址指令扩展时预留的标识。假设二地址指令用OP=00000000~00001110(共15个),则00001111作为一个扩展点。一地址指令高8位为00001111,低4位操作码有4位,可表示16条指令,不够31条。因此需要多个扩展点。设二地址指令用OP=00000000~00001110(15个),剩下的OP码中,我们选取多个作为一地址指令前缀。例如,将二地址指令操作码限制在0000XXXX~1100XXXX?这样高4位从0000到1100,但具体需计算。更系统的方法:设二地址指令最多有M条,则需占用M个8位码点。剩余(2^8M)个码点可作为一地址指令的前缀。每个这样的前缀下,一地址指令格式有12位操作码,其中高8位是该前缀,低4位可编码,故每个前缀可对应2^4=16条一地址指令。因此一地址指令最多有(2^8M)×16条。已知M=15,则一地址指令最多可有(256-15)×16=241×16=3856条,远大于31条。所以31条完全可以实现。此时,我们只需从241个前缀中选取一部分来编码31条一地址指令。例如,选取2个前缀(每个前缀下16条指令,共32条,用掉31条,余1条可扩展零地址)。设选取前缀P1和P2,其中P1下用满16条,P2下用15条,共31条。零地址指令:操作码长度16位。其高12位必须取自某个一地址指令扩展时预留的标识。在上述例子中,P2前缀下还有1个一地址指令编码未用,可作为扩展点。假设这个未用的一地址指令操作码为P2+L(其中L是某个特定的4位编码),那么以此作为前缀,零地址指令的低4位可编码,因此在这个扩展点下,最多可定义2^4=16条零地址指令。另外,如果在一地址指令的其他编码中也预留扩展点,可以获得更多零地址指令。但题目问“最多可以有多少条?”,则我们需要最大化零地址指令数量。最大化零地址指令的方法:在满足二地址15条、一地址31条的前提下,尽量少占用扩展码点,将更多的码点留给零地址指令扩展。具体:二地址用15个码点,设为00000000~00001110。一地址指令需要31条。每个扩展前缀(一个8位码点)可提供16条一地址指令。因此至少需要ceil(31/16)=2个前缀。用2个前缀可提供32条一地址指令,我们用掉31条,剩余1条一地址指令编码不用,可用于扩展零地址指令。设这两个前缀为A和B,取自二地址未用的241个码点,例如00001111和00010000。在一地址指令中,前缀A下16条全用(编码0000~1111),前缀B下用15条(编码0000~1110),空出一条一地址指令编码:前缀B+1111。那么,零地址指令就可以从这个空出的一地址指令编码进行扩展。零地址指令操作码16位,高12位就是这个空出的一地址指令操作码(即前缀B+1111),低4位可编码,因此最多可以有2^4=16条零地址指令。所以答案:(1)零地址指令最多有16条。(2)若操作码采用扩展编码方式(即上述可变长度操作码),上述指令条数不变,则零地址指令最多也是16条(因为受限于单个扩展点下的4位编码空间)。但如果我们允许在一地址指令中预留更多扩展点,零地址指令可以更多。例如,如果我们只用1个前缀来编码一地址指令,那么该前缀下只能提供16条一地址指令,不够31条。所以至少需要2个前缀。用2个前缀时,最多有32条一地址指令,用掉31条后,最多剩余1个一地址指令编码用于扩展零地址,得到16条。如果用3个前缀,则可提供48条一地址指令,用掉31条后,剩余17个一地址指令编码可用于扩展零地址,每个可扩展16条零地址指令,那么零地址指令最多可达17×16=272条。但这样一地址指令条数超过了31条吗?没有,我们只用了31条,但占用了3个前缀,每个前缀下我们只用了部分编码(比如第一个前缀用16条,第二个用15条,第三个用0条?但这样第三个前缀完全未用于一地址指令,可以直接用于扩展零地址?不行,因为一地址指令必须连续编码?不一定。扩展操作码设计可以灵活。理论上,我们可以将某些8位码点不分配给一地址指令,直接作为零地址指令的前缀。但题目要求“一地址指令有31条”,我们必须确保有31个一地址指令编码。我们可以这样:二地址用15个码点。剩下241个8位码点,我们选取其中两个作为一地址指令的前缀,用掉31个一地址编码。剩下的239个8位码点,可以直接作为零地址指令的前缀(因为零地址指令操作码16位,高8位可以是这些前缀,低8位可编码)。但注意,零地址指令没有地址码,整个16位都是操作码。所以零地址指令的编码空间可以是:高8位是某个未被二地址、一地址占用的8位码点,低8位任意。因此,零地址指令的最大数量为:可用的8位前缀数×2^8。可用的8位前缀数=2^8二地址用去的码点数一地址用去的8位前缀数?这里一地址指令占用的不是整个8位前缀,而是具体的一地址指令编码(12位)。一个8位前缀对应16个一地址指令编码。当我们用了31个一地址指令编码时,至少占用了2个8位前缀(因为31>16)。但这两个前缀下的所有32个一地址编码中,我们只用了31个,所以这两个前缀本身是被占用了(即不能用于零地址指令的高8位前缀),因为如果用于零地址,其高8位就是这两个前缀,那么其对应的部分一地址指令编码就会与零地址指令编码冲突?实际上,操作码扩展要求编码空间是树形结构,一个节点被占用后,其子孙节点不能用于其他类型指令。所以,一旦一个8位码点被用作一地址指令的前缀(即该节点下有一地址指令),那么该8位码点就不能再作为零地址指令的前缀(因为零地址指令的16位操作码高8位等于这个码点,会与一地址指令冲突)。因此,所有被一地址指令使用过的8位前缀都不能用于零地址指令。同理,被二地址指令使用的8位码点也不能用于零地址。所以,可用于零地址指令的8位前缀数量=总8位码点数二地址指令占用的码点数一地址指令占用的前缀数。二地址占用15个码点。一地址指令需要31条,至少需要2个前缀(因为2个前缀提供32个编码,够用)。所以一地址占用2个前缀(即2个8位码点)。因此,可用于零地址指令的8位前缀数=256152=239。每个这样的前缀下,零地址指令有低8位可编码,故可定义239×256=61184条零地址指令。但这显然过于庞大,且不符合实际设计,因为通常零地址指令很少。但理论上计算如此。然而,常见教材例题中,计算零地址指令条数时,通常是在给定二地址、一地址条数后,通过扩展码树图计算剩余编码空间。一般步骤:先满足二地址,剩余编码用作一地址前缀;再满足一地址,剩余编码用作零地址前缀。但零地址指令的编码长度是16位,其高12位必须是一地址指令留下的某个未用的具体编码(而不是仅仅8位前缀)。因为一地址指令已经占用了某些12位编码,零地址指令必须从那些未被一地址占用的12位编码开始扩展。所以,更准确的计算是:设二地址指令用去15个8位码点,记为集合S2。一地址指令需要31条。一地址指令操作码12位,其高8位必须不属于S2。我们从非S2的8位码点中选取一些作为一地址前缀,每个前缀下可编16条一地址指令。设我们选取了k个前缀,则一地址指令最多有16k条。需要16k≥31,所以k≥2。取k=2,则一地址指令最多32条,我们用掉31条,记为集合S1(31个12位编码)。零地址指令操作码16位,其高12位必须是一个未被使用的编码,且这个编码的高8位属于那k个前缀之一,低4位是特定的。在k=2,一地址用31条的情况下,剩余的可用于扩展零地址的12位编码数量为:2个前缀×16条31条=32-31=1个。这个12位编码可以作为零地址指令的前缀,零地址指令低4位可编,故最多有16条。如果我们取k=3,则一地址可用48条,我们用31条,剩余17个12位编码可用于扩展零地址,每个可扩展16条零地址指令,故零地址最多17×16=272条。但这样我们用了3个8位前缀,二地址用15个,共占用18个8位码点,可用于零地址的8位前缀数还有256-18=238个,但这些8位前缀不能直接用于零地址,因为其下没有连接一地址节点?实际上,操作码扩展树中,一个8位码点如果既不是二地址指令,也不是一地址指令的前缀,那么它可以直接作为零地址指令的前缀吗?可以,因为零地址指令是叶子节点,可以直接挂在任何未被占用的内部节点上。所以,那些未被二地址和一地址前缀占用的8位码点,都可以作为零地址指令的16位操作码的高8位,低8位任意。因此,零地址指令的最大数量应该是:所有未被二地址指令和一地址前缀占用的8位码点所对应的整个子树空间。设二地址指令占用M个8位码点。设一地址指令占用N条,这N条一地址指令分布在L个8位前缀下。这L个前缀的8位码点被占用。那么,可用于零地址指令的8位前缀数量为256ML。每个这样的8位前缀下,有2^8=256个16位编码可供零地址指令使用。此外,在那些已被用作一地址前缀的L个8位码点下,还有一部分12位编码未被一地址指令占用(即每个前缀下最多有16已用一地址条数个未用编码)。这些未用的12位编码也可以作为零地址指令的前缀,每个这样的12位前缀下可提供2^4=16个零地址指令编码。因此,零地址指令最大总数=(256ML)×256+Σ(在每个一地址前缀下,16该前缀下已用一地址条数)×16。为了最大化零地址指令,我们应最小化M和L,但M=15固定,L最小为2(因为31>16)。同时,在一地址前缀下,应尽量少用一地址指令编码,以留出更多12位前缀给零地址。但一地址指令必须用够31条。所以我们在两个前缀下,一个用16条,一个用15条,这样第一个前缀下未用0条,第二个前缀

温馨提示

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

最新文档

评论

0/150

提交评论