У мене є кілька додаткових аспектів тут:
Подумайте, що операція "a = b / c" x86 реалізує це як
mov eax,b
xor edx,edx
div dword ptr c
mov a,eax
В якості додаткового бонусу інструкція div буде містити решту.
Процесор RISC потребує спочатку завантаження адрес b і c, завантаження b і c з пам'яті в регістри, проведення поділу та завантаження адреси a, а потім збереження результату. Dst, src синтаксис:
mov r5,addr b
mov r5,[r5]
mov r6,addr c
mov r6,[r6]
div r7,r5,r6
mov r5,addr a
mov [r5],r7
Тут зазвичай не залишиться залишку.
Якщо будь-які змінні потрібно завантажувати через покажчики, обидві послідовності можуть бути довшими, хоча це менше можливостей для RISC, оскільки він може мати один або більше покажчиків, вже завантажених в інший реєстр. x86 має менше реєстру, тому ймовірність того, що вказівник опиниться в одному з них, менша.
Плюси і мінуси:
Інструкція RISC може бути змішана з оточуючим кодом для поліпшення планування інструкцій, це менше можливості з x86, що натомість робить це (більш-менш добре залежно від послідовності) всередині самого процесора. Послідовність RISC вище, як правило, буде довжиною 28 байт (7 інструкцій по 32-бітової / 4 байтової ширини кожна) для 32-бітної архітектури. Це призведе до того, що пам'ять, що не входить у мікросхему, працюватиме більше під час отримання інструкцій (сім варіантів). Більш щільна послідовність x86 містить менше інструкцій, і хоча їх ширина різниться, ви, мабуть, дивитесь і в середньому 4 байти / інструкція. Навіть якщо у вас є кеш-інструкція для прискорення цього семи результатів, це означає, що у вас буде дефіцит у трьох інших місцях, щоб компенсувати порівняно з x86.
Архітектура x86 з меншою кількістю регістрів для збереження / відновлення означає, що вона, ймовірно, буде робити потокові комутатори і обробляти переривання швидше, ніж RISC. Більше регістрів для збереження та відновлення вимагає більше тимчасового простору стека оперативної пам’яті, щоб робити переривання та більше постійного простору стека для зберігання станів потоку. Ці аспекти повинні зробити x86 кращим кандидатом для використання чистого RTOS.
На більш особистій ноті мені складніше написати збірку RISC, ніж x86. Я вирішую це, записуючи процедуру RISC в C, компілюючи та змінюючи створений код. Це більш ефективно з точки зору виробництва коду і, ймовірно, менш ефективно з точки зору виконання. Усі ці 32 регістри, які слід вести. З x86 - навпаки: 6-8 регістрів з "справжніми" іменами робить проблему більш керованою і вселяє більше впевненості, що створений код буде працювати, як очікувалося.
Потворний? Це на очах у глядача. Я віддаю перевагу "іншим".