2

次のコード ブロック内で、ループの最初の繰り返しの後にnum_insts再割り当てされます。0

inst_t buf[5] = {0};
num_insts = 10;
int i = 5;
for( ; i > 0; i-- )
{
   buf[i] = buf[i-1];
}
buf[0] = next;

この行動の正当な理由は考えられませんが、睡眠不足でもあるので、セカンドオピニオンをいただければ幸いです。

buf シフトのために実行されるアセンブリは次のとおりです。

004017ed:   mov 0x90(%esp),%eax
004017f4:   lea -0x1(%eax),%ecx
004017f7:   mov 0x90(%esp),%edx
004017fe:   mov %edx,%eax
00401800:   shl $0x2,%eax
00401803:   add %edx,%eax
00401805:   shl $0x2,%eax
00401808:   lea 0xa0(%esp),%edi
0040180f:   lea (%edi,%eax,1),%eax
00401812:   lea -0x7c(%eax),%edx
00401815:   mov %ecx,%eax
00401817:   shl $0x2,%eax
0040181a:   add %ecx,%eax
0040181c:   shl $0x2,%eax
0040181f:   lea 0xa0(%esp),%ecx

上記の最初のアセンブリ命令を実行する前のレジスタの内容は次のとおりです。

eax 0
ecx 0
edx 0
ebx 2665332
esp 0x28ab50
ebp 0x28ac08
esi 0
edi 2665432
eip 0x4017ed <main+1593>

それらの指示に従って、これは:

eax 0
ecx 0
edx 2665432
ebx 2665332
esp 0x28ab50
ebp 0x28ac08
esi 0
edi 2665456
eip 0x401848 <main+1684>

これを理解するのに十分なアセンブリをほとんど知りませんが、これに答える誰かがそれから恩恵を受けるかもしれません.

4

1 に答える 1