分享

双操作数运算类指令的执行

 Kinetis 2013-09-03
对于双操作数运算类指令(如加法指令)来说,每条指令中都需要包含以下4 个地址
信息:
① 第一操作数地址A 1 ;
② 第二操作数地址A 2 ;
③ 操作结果存放地址A 3 ;
④ 下条将要执行指令的地址A 4 。
这些地址信息可以明显地给出,称为显地址;也可以依照某种事先的约定,用隐含的方式给出,称为隐地址。

大多数计算机中用程序计数器P C 指出下一条将要执行指令的地址。 P C 是一个兼有寄存器和计数器功能的部件,它指引着C P U 从何处去读取指令。 通常,程序往往存放在主存的一段连续区域中,C P U 在执行完一条指令后,P C 的内容计数(P C + 1 ) ,指出下条指令的地址,所以指令中不需要明显地给出A 4 。 除去隐含约定的地址A 4 以外,其余3个地址的处理方式有4 种。
(1 ) 三地址双操作数指令
三地址双操作数指令有3 个显地址,指令的含义为
(A 1 )O P (A 2 ) → A 3
假设指令存放在主存的50 号单元中,第一、第二操作数分别存放在主存的1 00 和2 00 号单元中,结果存放在主存的300 号单元
执行一条三地址的加法指令需要访问4 次主存。 第一次从50号单元中取指令,第二次从100 号单元中取第一操作数,第三次从200 号单元中取第二操作数,第四次将加法的结果保存到主存的300号单元。
(2 ) 二地址双操作数指令
二地址双操作数指令有两个显地址,第一操作数地址同时兼作结果存放地址(目的地址) ,指令的含义为
(A 1 )O P (A 2 ) → A 1
执行一条二地址的加法指令同样需要访问4 次主存。 第一次从50 号单元中取指令,
第二次从100 号单元中取第一操作数,第三次从200 号单元中取第二操作数,第四次将加
法的结果保存到主存的100 号单元。
(3 ) 一地址双操作数指令
一地址双操作数指令只有一个显地址,参加运算的另一个操作数来自累加寄存器A cc 。 指令的含义为
(A cc )O P (A 1 ) → A cc
执行一条一地址的加法指令只需要访问两次主存,第一次从50 号单元中取指令,第二次从100 号单元中取操作数。 由于第一操作数和运算结果都放在累加寄存器中,所以读取第一操作数和存放加法的结果都不需要访问主存。
(4 ) 零地址双操作数指令
零地址双操作数指令中只有操作码字段,操作数地址都是隐含的。 操作数在堆栈的栈顶位置和次栈顶位置,它们分别从堆栈中弹出,送到运算器中进行运算,运算的结果再压入堆栈。
执行一条零地址的加法指令访问主存的次数取决于堆栈的结构。 如果是软堆栈,则需要访问主存4 次,因为软堆栈就是主存的一部分;如果是硬堆栈,则只需要访存1 次,因为硬堆栈是由寄存器组成的。

从缩短程序长度、用户使用方便、增加操作并行度等方面来看,选用三地址指令较好;从缩短指令长度、减少访存次数、简化硬件设计等方面来看,一地址指令较好。 对于同一个问题,用三地址指令编写的程序最短,但指令长度最长,而用二、一、零地址指令来编写程序,程序的长度一个比一个长,但指令的长度一个比一个短。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多