问答题 一处理器中共有32个寄存器,使用16位立即数,其指令系统结构中共有142条指令。在某个给定的程序中,20%的指令需要一个输入寄存器和一个输出寄存器;30%的指令带有两个输入寄存器和一个输出寄存器;25%的指令带有一个输入寄存器、一个输出寄存器、一个立即数寄存器;其余25%的指令带有一个立即数输入寄存器和一个输出寄存器。
问答题 对以上4种指令类型中的任意一种指令类型来说,共需要多少位?假定指令系统结构要求所有指令长度必须是8的整数倍。
【正确答案】由于有142条指令,[*],因此至少需要8位才能确定各条指令的操作码。由于该处理器有32个寄存器,[*],也就是说,要用5位对寄存器ID编码,而每个立即数需要16位,因此有: 20%的一个输入寄存器和一个输出寄存器指令需要8+5×2=18位,长度对齐到8的整数,便是24位。 30%的两个输入寄存器和一个输出寄存器指令需要8+5×3=23位,长度对齐到8的整数,便是24位。 25%的一个输入寄存器、一个输出寄存器和一个立即数寄存器指令需要8+5×2+16=34位,长度对齐到8的整数,便是40位。 25%的一个立即数输入寄存器和一个输出寄存器指令需要8+16+5=29位,长度对齐到8的整数,便是32位。
【答案解析】
问答题 与使用定长指令集编码相比,当采用变长指令集编码时,该程序能够少占用多少存储器空问?
【正确答案】由于定长指令最长的长度为40位,因此定长指令编码每条指令长度均为40位。而采用变长编码,指令均长为 20%×24+30%×24+25%×40+25%×32=30 得出平均长度为30位。所以该程序中,变长编码能比定长编码少占用25%的存储空间。
【答案解析】
问答题 假设下面的值存放在指定地址的存储器和寄存器中(表1和表2):
{{B}}表1 存放在指定地址的存储器中的值{{/B}}
地址
0x100 0xFF
0x104 0xAB
0x108 0x13
0x10C 0x11
{{B}}表2 存放在寄存器中的值{{/B}}
寄存器
%eax 0x100
%ecx 0x1
%edx 0x3
根据表3中给出的指令,将被更新的寄存器或存储器目的位置,以及得到的值填入表中。
{{B}}表3 指令执行结果{{/B}}
指 令 目的位置
ADD%ecx, (%eax)
SUB%edx, 4(%eax)
IMUL $16, (%eax, %edx, 4)
INC 8(%eax)
DEC%ecx
SUB%edx, %eax
表3中指令的符号说明见表4。
{{B}}表4 符号说明{{/B}}
符 号 说 明
ADD S, D D+S→D
SUB S, D D-S→D
IMUL S, D D*S→D
INC D D+1→D
DEC D D-1→D
$ 立即数寻址标志
A(IX) 变址寻址,EA=A+(IX)
(IX1, IX2, n) 变址寻址的另一种方式(常用于处理数组),EA=(IX1)+(IX2)*n
0x 十六进制数标志,无标志的默认为十进制数
【正确答案】答案见下表1。
{{B}}表1{{/B}}
指 令 目的位置
ADD %ecx, (%eax) 0x100 0x100
SUB %edx, 4(%eax) 0x104 0xA8
IMUL $16, (%eax, %edx, 4) 0x10C 0x110
INC 8 (%eax) 0x108 0x14
DEC% ecx %eac 0x0
SUB% edx, %eax %eax 0xFD
本题需要考生根据表2的符号说明才能做答,题目本身不是难题。
{{B}}表2 符号说明{{/B}}
符 号 说 明
ADD S, D D+S→D
SUB S, D D-S→D
IMUL S, D D*S→D
INC D D+1→D
DEC D D-1→D
$ 立即数寻址标志
A(IX) 变址寻址,EA=A+(IX)
(IX1, IX2, n) 变址寻址的另一种方式(常用于处理数组),EA=(IX1)+(IX2)*n
0x 十六进制数标志,无标志的默认为十进制数
第一个是一个加法指令,操作数l为寄存器寻址,操作数2为寄存器间接寻址。
操作数1值为0x1,操作数2的有效地址为0x100,存储器中地址为0x100的单元的值为0xFF。0x1+0xFF=0x100。目的位置为操作数2的有效地址0x100。
第二个是减法指令,操作数1为寄存器寻址,操作数2为变址寻址。
操作数1值为0x3,操作数2的有效地址EA=0x100+4=0x104,存储器中地址为0x104的单元的值为0xAB。0xAB-0x3=0xA8。目的位置为操作数2的有效地址0x104。
第三个是乘法指令,操作数1为立即寻址,操作数2为变址寻址的另一种形式。
操作数1值为16,操作数2的有效地址EA=(%eac)+(%edx)*4=0x100+0x3*4=0x10C,存储器中地址为0x10C的单元的值为0x11。0x11*16=0x110。
剩下3个就不解释了,考生可以按照以上解释步骤自行写出。
【答案解析】