LINUX.ORG.RU

История изменений

Исправление MOPKOBKA, (текущая версия) :

Это медленно.

Ты по другому рекурсию и не сделаешь, или если регистры кончились. А если регистров хватает, то что их искать, описано какие сохраняются между вызовами, а какие нет.

Так что `a = b` это в общем случае далеко не один `mov`.

Ну в случае С, это может быть memcpy структур, вот как оно делается, можно написать макрос что бы указывать всего одну команду и размер:

mov rdi, %dst%
mov rsi, %src%
mov rcx, %sizeof%
rep movsb
struc point_t {
  .x dd ?
  .y dd ?
}

macro MEMCPY DST, SRC, SIZEOF {
  mov rdi, DST
  mov rsi, SRC
  mov rcx, SIZEOF
  rep movsb  
}

MEMCPY a, b, sizeof.point_t  

Исходная версия MOPKOBKA, :

Это медленно.

Ты по другому рекурсию и не сделаешь, или если регистры кончились. А если регистров хватает, то что их искать, описано какие сохраняются между вызовами, а какие нет.

Так что `a = b` это в общем случае далеко не один `mov`.

Ну в случае С, это может быть memcpy структур, вот как оно делается, можно написать макрос что бы указывать всего одну команду и размер:

mov rdi, %dst%
mov rsi, %src%
mov rcx, %sizeof%
rep movsb