0

How many memory accesses are required in the worst case for the following instructions:

add edx, (to_printf-next_i) ; where to_printf and next_i are labels defined in .text
inc dword [myarray + ebx*4] ; where myarray is a label defined in .data 

Is my answer true?

  1. 0 , since we do not access memory here
  2. fetch: 4 bytes for the address : myarray + ebx*4 -> 2 memory accesses in the worst case
     write: 4 bytes because of "dword" -> 2 memory accesses in the worst case
     read? 
4

1 に答える 1

2

inc3 つのことを行います: オペランドを読み取り、それに 1 を追加し、オペランドを書き戻します。オペランドがメモリ内にある場合、通常は 1 回の読み取りアクセスと 1 回の書き込みアクセスがあります。

オペランドがキャッシュ ラインの境界を越えると、すべてのアクセスが 2 つのアクセスになります。

しかし、ページ変換と仮想メモリが有効で、この命令が参照するメモリがディスク上にある場合、これはさらに悪化する可能性があります。TLB ミス、その他のキャッシュ ミス、および OS が命令を実行するために必要なすべてのページ テーブルと I/O アクティビティにより、さらに多くのメモリ アクセスが発生する可能性があります。この種の最悪の場合に必要な数を判断することはほとんど不可能です。

于 2012-06-25T08:34:06.387 に答える