Что произошло в Y86, когда у вас более 6 функциональных параметров? - PullRequest
0 голосов
/ 27 марта 2019

Рассмотрим эту функцию в c: long arithEx (long, long, long, long, long, long, long, long);

long main()
{

long a,b,c,d,e,f,g,h,w;
a=100;
b=12345;
c=98765;
d=23;
e=25;
f=27;
g=29;
h=31;
w=arithEx(a,b,c,d,e,f,g,h);
w++;
return w;

}

В X-86 ассемблерный код выглядит так:

   main:
subq  $24, %rsp
movq  $31, 8(%rsp)
movq  $29, (%rsp)
movq$27, %r9
movq$25, %r8
movq$23, %rcx
movq$98765, %rdx
movq$12345, %rsi
movq$100, %rdi
call  arithEx
addq  $1, %rax
addq  $24, %rsp
ret

Это имеет смысл для меня, поскольку X-86 и Y-86 имеют только 6 регистров для получения аргументов функции. А для X-86, поскольку он поддерживает режим немедленной адресации в память, мы можем просто сохранить остальные параметры в памяти.

Однако, для Y-86, у нас нет инструкции, которая может перемещать немедленный в память, так куда же должны идти остальные параметры?

...