Какова цель этих двух строк в коде ниже? (gcc -g func.c -o func
). Кажется, что ничто не ссылается на регистры ESI и EDI после его настройки?
0x000000000000116d <+38>: mov esi,ecx # esi = 10 ???
0x000000000000116f <+40>: mov edi,eax # edi = 1 ???
Я думал, что это может быть связано с CALL, настройкой адреса возврата, но я не могу найти документацию, которая подтверждает Это.
# Main Function
0x0000000000001147 <+0>: push rbp # Prologue
0x0000000000001148 <+1>: mov rbp,rsp # Prologue
0x000000000000114b <+4>: sub rsp,0x10
0x000000000000114f <+8>: mov DWORD PTR [rbp-0x4],0x1 # int a = 1
0x0000000000001156 <+15>: mov DWORD PTR [rbp-0x8],0xa # int b = 10
0x000000000000115d <+22>: mov DWORD PTR [rbp-0xc],0x64 # int c = 100
0x0000000000001164 <+29>: mov edx,DWORD PTR [rbp-0xc] # edx = 100
0x0000000000001167 <+32>: mov ecx,DWORD PTR [rbp-0x8] # ecx = 10
0x000000000000116a <+35>: mov eax,DWORD PTR [rbp-0x4] # eax = 1
0x000000000000116d <+38>: mov esi,ecx # esi = 10 ???
0x000000000000116f <+40>: mov edi,eax # edi = 1 ???
0x0000000000001171 <+42>: call 0x1125 <add> # Jump to Add()
0x0000000000001176 <+47>: mov DWORD PTR [rbp-0x10],eax # Stack 111
0x0000000000001179 <+50>: mov eax,0x0 # eax = 0
0x000000000000117e <+55>: leave # Epilogue
0x000000000000117f <+56>: ret # Epilogue
# Add Function
0x0000000000001125 <+0>: push rbp # Prologue
0x0000000000001126 <+1>: mov rbp,rsp # Prologue
0x0000000000001129 <+4>: mov DWORD PTR [rbp-0x14],edi # Stack 1
0x000000000000112c <+7>: mov DWORD PTR [rbp-0x18],esi # Stack 10
0x000000000000112f <+10>: mov DWORD PTR [rbp-0x1c],edx # Stack 100
0x0000000000001132 <+13>: mov edx,DWORD PTR [rbp-0x14] # edx = 1
0x0000000000001135 <+16>: mov eax,DWORD PTR [rbp-0x18] # eax = 10
0x0000000000001138 <+19>: add edx,eax # edx = 1 + 10
0x000000000000113a <+21>: mov eax,DWORD PTR [rbp-0x1c] # eax = 100
0x000000000000113d <+24>: add eax,edx # eax = 100 + 11
0x000000000000113f <+26>: mov DWORD PTR [rbp-0x4],eax # Stack 111
0x0000000000001142 <+29>: mov eax,DWORD PTR [rbp-0x4] # eax = 111
0x0000000000001145 <+32>: pop rbp # Epilogue
0x0000000000001146 <+33>: ret # Epilogue
int add(int a, int b, int c)
{
int ans = a + b + c;
return ans;
}
int main()
{
int a = 1;
int b = 10;
int c = 100;
int res = add(a, b, c);
return 0;
}