Назначение (mov esi, ecx) & (mov edi, eax)? - PullRequest
0 голосов
/ 09 апреля 2020

Какова цель этих двух строк в коде ниже? (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;
}
...