可变长度操作码(扩展操作码)

可变长度操作码(扩展操作码)

含义:当指令中的地址部分位数较多时,让操作码的位数少些;当指令中的地址部分位数减少时(如:现在是一地址指令,因而地址位数相应减少),可让操作码的位数增多,以增加指令种类。这称为扩展操作码。

例、假设某指令系统的指令字长是16位,最多给出三个地址段X、Y、Z,每个地址字段占4位。试给出一种扩展操作码的方案。

下图给出一种扩展操作码的原理性方案:

可变长度操作码(扩展操作码)_第1张图片

分析:

可变长度操作码(扩展操作码)_第2张图片

对于三地址指令,三个地址占12位;操作码4位,全部用来表示操作功能,可以表示 2^4=16 种。现在只取其中的15种组合0000~1110,分别表示15条三地址指令,留下1111作为扩展操作码标志。

可变长度操作码(扩展操作码)_第3张图片

对于二地址指令,两个地址占8位;在高4位(第15~12位)为1111的扩展标志指示下,将第11~8位扩展为操作码;如果取其中15种表示二地址指令,即11110000~11111110,则留下11111111作为扩展操作码标志。

可变长度操作码(扩展操作码)_第4张图片

对于一地址指令,一个地址占4位;又可将第7~4位扩展为操作码。如果取其中15种表示一地址指令,即111111110000~111111111110,则留下111111111111作为扩展操作码标志。

可变长度操作码(扩展操作码)_第5张图片

对于零地址指令,在第15~4位为全1的扩展标志指示下,可有16种零地址操作码。


以上只是其中一种设计方案,实际上,我们需要根据三、二、一、零地址指令的需求量来进行设计。假设二地址指令只需要14条,那么我们可以再得到一种扩展标志,用于一地址指令的扩展。

下图给出一种扩展操作码的原理性方案:

可变长度操作码(扩展操作码)_第6张图片

分析:

对于二地址指令,两个地址占8位;在高4位(第15~12位)为1111的扩展标志指示下,将第11~8位扩展为操作码;如果取其中14种表示二地址指令,即11110000~11111101,则留下11111110、11111111作为扩展操作码标志。

可变长度操作码(扩展操作码)_第7张图片

对于一地址指令,一个地址占4位;又可将第7~4位扩展为操作码。由于在设计二地址指令时留下了两种扩展标志,加上第7~4位的编码,可得到 2X2^4=32 种组合。如果只取其中31种表示一地址指令,即111111100000~111111111110,则留下111111111111作为扩展操作码标志。

关于 2X2^4=32 的得来:

第一个2是两个扩展标志的2,后面的2^4是指,我们加上第7~4位(一共4位)作为操作码,那么将会得到2^4种组合。根据乘法原理,我们的操作码组合将会有 2X2^4=32 种。

“在本例中,我们有意为二地址指令只留下1种扩展标志,相应地只有15条三地址指令;而为单地址指令留下2种扩展标志,相应地只有14条二地址指令,而单地址指令可有31条。”

你可能感兴趣的:(计算机系统结构)