2022年12月13日修改
原来的博客是 2018-09-21 17:34:47 发布 的啊,偶尔也有人让详细讲讲……行吧……
题目:
设某机为定长指令字结构,指令长度12位,每个地址码占3位,试提出一种分配方案,使该指令系统包含:4条三地址指令,8条二地址指令,180条单地址指令。
解析:
Step1.指令系统的指令格式是:指令 = 操作码 + 地址码
Step2.“已知每个地址码占3位”,所以:
三地址指令的地址码共占33=9位,
二地址指令的地址码共占32=6位,
单地址指令的地址码共占3*1=3位。
Step3.“已知指令长度为12位”,所以:
三地址指令的操作码共占12-9=3位,
二地址指令的操作码共占12-6=6位,
单地址指令的操作码共占12-3=9位。
Step4.综上Step2和Step3,设a代表操作码位、b代表地址码位。所以:
三地址指令格式为 aaa bbbbbbbbb,
二地址指令格式为 aaaaaa bbbbbb,
单地址指令格式为 aaaaaaaaa bbb。
Step5.“要求指令系统包含4条三地址指令、8条二地址指令、180条单地址指令,x代表地址码位。”所以分配如下:
- 三地址指令
4=2^2,所以操作码从从000开始,至011结束,即三地址指令为000 xxxxxxxxx 至 011 xxxxxxxxx。 - 二地址指令
8=2^3,但是操作码位前3位不能与三地址指令的操作码相同,故从011的下一个100开始,操作码位的后3位从000开始,111结束,即二地址指令为100 000xxxxxx 至 100 111xxxxxx - 单地址指令
2^7=128 < 180 < 256,同理操作码前3位不能与三地址/二地址指令的操作码前3位相同,故从100的下一个101开始,操作码位的后6位从000000开始。
然而,指令101 000000xxx 至 101 111111xxx 只能容纳2^6=64条指令,因此操作码前3位自动加1,即110,此时指令为110 000000xxx。
因此,单地址指令的前64种为 101 000000xxx 至 101 111111xxx;
单地址指令的第65种至第128种为 110 000000xxx 至 110 111111xxx;
单地址指令的第128种至第180种为 111 000000xxx 至 111 110011xxx。
综上所述,指令系统的分配方案如下:
- 三地址指令:000 XXX XXX XXX 至 011 XXX XXX XXX
- 二地址指令:100 000 XXX XXX 至 100 111 XXX XXX
- 单地址指令:101 000 000 XXX 至 111 110 011 XXX