6 ADD R1,R2 7 MOVE R2,F 8 SUB R2,G 9 DIV R1, 10 MOVE X,R1
(4)一地址(累加器)指令系统的程序为:
1 LOAD F 2 SUB G 3 STORE X 4 LOAD A 5 ADD B 6 MUL C 7 STORE Y 8 LOAD D 9 MUL E 10 ADD Y 11 DIV X 12 STORE X
(5)零地址指令系统的程序为:
1 PUSH A
2 PUSH B 3 ADD 4 PUSH C 5 MUL 6 PUSH D 7 PUSH E 8 MUL 9 ADD
16
10 PUSH F 11 PUSH G 12 SUB 13 DIV 14 POP
2.五个程序的指令条数﹑访存次数和访存信息量
(1)用三地址指令编的程序共用6条指令,每条指令含1个操作码,2个源操作数
地址和1个目的操作数地址,每条指令的字长为P+3A=1B+3*2B=7B。程序所用的存储量为6*7B=42B。(因为操作码占一个字节,地址码占两个字节。) 每条指令需4次访存:
其中取指令访存1次,访存信息量为7B;取2个源操作数需访存2次,访存信 息量为2D=2*4B=8B;存计算结果访存1次,访存信息量为1D=4B。所以,执行 一条指令的访存信息量为7B+8B+4B=19B。执行整个程序的访存信息量为
6*19B=114B。
(2)用二地址指令编的程序共用9条指令,每条指令含1个操作码,2个源操作数地
址且第1个源操作数地址也是目的操作数地址;或者是1个是源操作数地址一个是目的操作数地址。每条指令的字长为P+2A=1B+2*2B=5B。程序所用的存储量为9*5B=45B。
前者每条指令所需访存读/写操作数的次数如下表所示。程序执行的访存信息量包括:取9条指令的访存信息量9*5B=45B;15次取源操作数的访存信息量15*4B=60B;9次存结果数据的访存信息量9*4B=36B。所以,程序执行的访存信息量为
45B+60B+36B=141B.
(3)用二地址多通用寄存器指令编的程序共用10条指令,每条指令含1个操作
码,2个源操作数地址且第1个源操作数地址也是目的操作数地址;或者是1个是源操作数地址一个是目的操作数地址。源操作数地址和目的操作数地址可以是存储单元地址,也可以是寄存器地址。由程序可知,有2条指令的2个操作数地址是寄存存器地址,指令字长为P+2R=1B+2*0.5B=2B,其余指令2个操作数地址都1个是存储单元地址1个是寄存器地址,指令字长为P+A+R=1B+2B+0.5B=3.5B。所以, 程序所用的存储量为2*2B+8*3.5B=32B.
17
10条指令所需访存读/写操作数的次数如下表所示。程序执行的访存信息量:包括取10条指令的访存信息量32B;7次取源操作数的访存信息量7*4B=28B;1次存结果数据的访存信息量4B。所以,程序执行的访存信息量为 32B+28B+4B=64B.
(4)用一地址指令编的程序共用12条指令,每条指令含1个操作码,1个源操作数地址或目的操作数地址;前者把源操作数取到累加器中,或者与累加器中暂存的操作数进行运算,将结果仍暂存于累加器中;后者把暂存于累加器中的数据送入目的地址指定的存储单元中。每条指令的字长为P+A=1B+2B=3B。所以,程序占用的存储量为12*3B=36B。每条指令的执行需2次访存:其中的1次为取指令,访存信息量为指令字长3B;另1次是取1个源操作数或存结果数据访存,访存信息量是1D=4B。总之,1条指令的执行访存信息量为3B+4B=7B。整个程序执行的访存信息量等于12*7B=84B。
(5)用零地址指令编的程序共用14条指令。零地址指令是堆栈型,指令,堆栈
是内存中的1个专用区域,专门用来存放堆栈型指令的操作数。
PUSH指令把指定存储单元中的操作数压入栈顶,指令字长为P+A=1B+2B=3B。一共需要3次访存:其中1次为取指令,1次为取操作数,1次为压入栈顶。 POP指令是把栈顶的操作数弹出并送入指定的存储单元中,指令字长为P+A=1B+2B=3B。也要访存3次:1次取指,1次取栈顶操作数,1次存操作数。 PUSH和POP指令的访存信息量均为P+A+2D=3B+8B=11B。
其余运算型堆栈指令的指令字长都是P+1B,每条指令都是取栈顶和次栈顶的2个源操作数进行运算,然后把运算结果压入栈顶。指令字长为P+1B。每条指令需4次访存:取指1次,取2个源操作数2次,把结果压入栈顶1次。,每条运算指令执行的访存信息量为P+3D=1B+3*4B=13B。
程序中有PUSH和POP指令8条,其余运算指令6条,所以,整个程序的存储量为:
8*(P+A)+6*P=8*3B+6*1B=30B.
整个程序的访存信息量为:
8*(P+A+2D)+6*(P+3D)= 8*11B+6*13B=166B.
18
不同指令编程的访存次数
指令 三址 指令 二址 指令 二址 多寄 指令 一址 指令 零地 址 指令 编号 取数 存数 取数 存数 取数 存数 指令 取数 存数 取数 存数 指令 次数 次数 次数 次数 次数 次数 字长 次数 次数 次数 次数 字长 1 2 3 4 5 6 7 8 9 2 2 2 2 2 2 6 15 1 1 1 1 1 1 1 2 2 1 2 2 1 2 2 9 1 1 1 1 1 1 1 1 1 7 1 1 1 1 1 1 1 1 1 3.5 3.5 3.5 3.5 3.5 2.0 3.5 3.5 2 3.5 32 9 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 1 3 1 3 3 1 1 3 3 1 1 3 10 11 12 13 14 合计 12
3 20 14 30 3.五个程序的时空开销排序
用不同指令系统编程的程序存储量和访存信息量如下表所示:
由表可见,不同指令系统编程的程序存储量差别不大,但是,决定程序执行速度的访存信息量却有较大的差别。所以,5个程序的时空开销的优劣可按访存信息量的大小来排序。时空开销最小的是用二地址多通用寄存器指令系统编的程序;时空开销最大的是用零地址指令系统编的程序。
19
5种不同指令编程的比较
指令类型 三地址指令 二地址指令 二地多寄指令 一地址指令 零地址指令 指令条数 访存次数 程序存储量 访存信息量 开销排序 6 9 10 12 14 24 33 18 24 48 42 45 32 36 30 114 141 64 84 166 3 4 1 2 5
20