我们正在为周二的计算机组织与设计中期学习,我们都不理解以下问题:
procedure:
addi $sp, $sp, -4
sw $ra, 0($sp)
... Some unknown work is done ...
addi $sp, $sp, 4
lw $ra, -4($sp)
jr $ra
(1-H)再次考虑上面的代码,并假设它有效。如果在执行期间,'未知 work'部分导致从内存中读取100个单词,将从中读取多少个单词 整个程序执行期间的内存? (考虑所有内存访问。
答案如下:106。对于未知工作读取100个存储器,读取显示的指令加上5个存储器读取,在“lw”指令期间读取1个存储器。
如果有人能够帮助我们准确理解这6个内存读取的确切位置,那将非常感激!
答案 0 :(得分:3)
让我们从明显的开始:在“未知工作”部分执行100次读取,留下6次读取。一次读取是针对lw
指令(lw $ra, -4($sp)
),它从内存中读取单词。最后5次读取由指令提取阶段的CPU隐式完成。
addi $sp, $sp, -4 # 1 read (CPU reads the instruction word)
sw $ra, 0($sp) # 1 read -------------- ## --------------
... Some unknown work is done ... # 100 reads (given in question)
addi $sp, $sp, 4 # 1 read (CPU reads the instruction word)
lw $ra, -4($sp) # 2 reads (CPU reads the instruction word, lw instruction also reads)
jr $ra # 1 read (CPU reads the instruction word)