操作码扩展

操作码扩展

假设一个机器的字长是16位,指令长度为单字长

4位用于操作码OP,剩下3个4位用于地址码,则该指令是三地址指令,总共可以有16条

在这里插入图片描述

如果该机器的指令条数变多了(至少17条以上),那么4位的操作码是不够的,需要扩展

如果把Ad1作为操作码,那么OP就多出4位,变成了8位,就可以有256条双地址指令了

但是扩展操作码时必须要遵守2个原则(不知道为什么)

  1. 不允许短操作码是长操作码的前缀(长短是相对的)

    比如一个4位的操作码为0100(短操作码)和一个8位的操作码abcd efgh(长操作码),abcd不能是0100

  2. 每条指令的操作码不能重复

三地址指令如果是16条,那么意味着前4位已经占满,后续的位数再多,也是不合法的操作码

因此如果需要后续扩展,三地址指令必须至少留出一条

那么如果双地址指令不需要扩展,最多可以有16条,如果需要扩展,则在Ad1位置至少也要留出一条指令

如果双地址指令想要扩展的更多,那意味着单地址指令需要留出的条数也越多,单地址指令条数就越少

例题1

一个计算机系统采用32位单字长指令,地址码为12位,若定义了250条二地址指令,还可以有几条单地址指令
指令单子长,则指令长度为 32 位 指令单子长,则指令长度为32位 指令单子长,则指令长度为32

这个指令是从三地址扩展来的吗? 不是,因为如果是三地址,则至少要 12 x 3 = 36 位 这个指令是从三地址扩展来的吗?\\不是,因为如果是三地址,则至少要12x3=36位 这个指令是从三地址扩展来的吗?不是,因为如果是三地址,则至少要12x3=36

二地址要用掉 24 位地址码,操作码还剩下 32 − 24 = 8 位,二地址指令可以有 256 条 二地址要用掉24位地址码,操作码还剩下32-24=8位,二地址指令可以有256条 二地址要用掉24位地址码,操作码还剩下3224=8位,二地址指令可以有256

但是题目说只用了 250 条,也就是可以有 6 条用于扩展 但是题目说只用了250条,也就是可以有6条用于扩展 但是题目说只用了250条,也就是可以有6条用于扩展

而单地址指令,意味着地址码只占 12 位,相对于二地址指令,操作码又多出了 12 位 而单地址指令,意味着地址码只占12位,相对于二地址指令,操作码又多出了12位 而单地址指令,意味着地址码只占12位,相对于二地址指令,操作码又多出了12

所以单地址指令有: 6 × 2 12 = 24 K   条 所以单地址指令有:6×2^{12} = 24K \,条 所以单地址指令有:6×212=24K

例题2

某计算机按字节编址,指令字长固定且只有两种指令格式,其中三地址指令29条,二地址指令107条,每个地址字段6位,则指令字长至少应该是?
三地址指令有 29 条,则至少为 5 位( 2 5 = 32 > 29 ) 三地址指令有29条,则至少为5位(2^5 = 32 > 29) 三地址指令有29条,则至少为5位(25=32>29

如果三地址刚好是 5 位,则有 32 − 29 = 3 条可以用于二地址指令扩展 如果三地址刚好是5位,则有32-29=3条可以用于二地址指令扩展 如果三地址刚好是5位,则有3229=3条可以用于二地址指令扩展

地址码为 6 位,则二地址指令最多可以有 3 × 2 6 = 192 条 > 107 条 地址码为6位,则二地址指令最多可以有3×2^6 = 192条 > 107条 地址码为6位,则二地址指令最多可以有3×26=192>107

∴ 指令字长至少是 5 + 3 × 6 = 23 ∴指令字长至少是5+3×6 = 23 指令字长至少是5+3×6=23

又 ∵ 计算机按字节编址 , 23 m o d    8 ≠ 0 又∵计算机按字节编址, \quad 23\mod8≠0 计算机按字节编址,23mod8=0

∴ 指令字长至少是 24 位 ∴指令字长至少是24位 指令字长至少是24

例题 2 补充

在这里插入图片描述

  • 3 地址指令 29 条,则 O P 1 OP_1 OP1 至少 5 位,其中 2 5 = 32 2^5=32 25=32,可以留出 32 − 29 = 3 32 - 29 = 3 3229=3 条用于扩展二地址指令

在这里插入图片描述

  • 对于二地址指令, O P 1 OP_1 OP1 是三地址指令未使用的操作码,有 3 条
  • 二地址指令有 107 107 107 条,假设 O P 2 OP_2 OP2 x x x 位,那么 3 × 2 x = 107 , x = ⌈ l o g 2 107 3 ⌉ = 6 3×2^x=107, x = \lceil log_2\frac{107}{3} \rceil= 6 3×2x=107,x=log23107=6
    在这里插入图片描述
  • 因此指令字长至少是 5 + 3 × 6 = 23 5+3×6 = 23 5+3×6=23 位,由于计算机按字节编址,指令字长至少是 24 24 24
  • 8
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值