指令的地址由程序计数器PC给出。
指令的地址码字段是指令的操作数地址。
程序控制指令包括:
无条件转移、有条件转移、子程序调用、返回指令、循环指令等。
中断隐指令由硬件控制,不属于程序控制指令。
计算指令条数
1.还可以有多少条:(看OP前面剩下几种*2^OP其他地址没用的位数)
题目:一个计算机系统采用32位单字长指令,地址码12位,若定义了250条二地址指令,则还可以有多少条单地址指令。
解答:
二地址:OP(8位) A1(12位)A2(12位)
一地址:OP(8位)OP(12位)A1(12位)
指令一共32位,12位地址码,二地址指令的操作码32-12*2=8位;
一共可以定义二进制指令条数:2^8 = 256;
现在定义了250条,余下:256-250=6种操作码给单地址指令(前8位里面有6种);
所以还可以有6*2^12条。
2.指令最多有多少条:(最多的减去其他地址占用的)
题目:设计某种指令系统时,假设采用16位定长指令字格式,操作码使用扩展编码方式,地址码为6位,包含零地址、一地址、二地址3种格式的指令。若二地址指令有12条,一地址指令有254条,则零地址指令的条数最多位多少条。
解答:
二地址OP(4位) A1(6位) A2(6位)
一地址OP(4位) OP(6位) A1(6位)
零地址OP(4位) OP(6位) OP(6位)
若只有零地址指令,则最多2^16条
现在二地址指令12条,剩余:2^4-12=4种操作码给一地址指令;
这4条二地址指令对应一地址指令:4*2^6=256条;
而一地址指令有254条,剩余256-254=2种操作码给零地址
所以零地址一共有2*2^6=128条。
指令字长长度
题目: 某计算机按字节编址,指令字长固定且只有两种指令格式,其中三地址指令29条,二地址指令107条,每个地址指令字段为6位,则指令字长至少应是多少位。
解答:
三地址指令:OP()A1(6)A2(6)A3(6)
二地址指令:OP()A1(6)A2(6)
三地址29条需要5位OP提供32条,32-29=3种多余
二地址3*2^6=192条>107条,所以三地址5位OP合理,
因为按字节编址,所以指令字长要是字节的整数倍,5+6+6=17位不是字节(8位)的整数倍,所以指令字长至少3*8=24位。
指令系统不同寻址方式提升了指令译码难度,但缩短指令字长,扩大寻址空间,提高编程灵活性。
寄存器寻址:缩短指令中某个地址段的位数。(寄存器比主存短)
隐含寻址:简化地址结构
PC的内容
按字寻址的机器:
程序计数器PC(存地址)的位数取决于存储器的字数
指令寄存器IR(存指令)的位数取决于指令字长
PC指向下一个指令的地址,执行指令后PC的内容要加“1”个指令长
题目:某机器指令字长为16位,主存按字节编址,取指令时,每取一字节,PC自动加1。当前指令地址为2000H,指令内容为相对寻址的无条件转移指令,指令中的形式地址为40H。则取指令后及指令执行后PC的内容:2002H,2042H。
负数补码符号位扩展是先变补码再扩展