Разбор фрагментов кода из загадочной книги, которая содержит только ассемблерный листинг и никаких комментариев. Часть 1 Читать далее
LLVM оптимизирует суммы степеней, например: int sum(int count) { int result = 0; for (int j = 0; j < count; ++j) result += j*j; return result; } генерируя код, вычисляющий результат без цикла (godbolt): sum(int): test edi, edi jle .LBB0_1 lea eax, [rdi - 1] lea ecx, [rdi - 2] imul rcx, rax lea eax, [rdi - 3] imul rax, rcx shr rax imul eax, eax, 1431655766 add eax, edi shr rcx lea ecx, [rcx + 2*rcx] lea eax, [rax + rcx] add eax, -1…
Возможно не только мне интересно, а каков микрокод инструкции XCHG на RISC для x86 CISC?Например ни для кого не секрет, что на языках высокого уровня, чтобы обменять значениями две переменные "X" и "Y", нужна ещё одна переменная, скажем "Z".X=5, Y=7Z=YY=XX=ZX=7, Y=5Но, процессоры это умеют делать…
Начну с определений. Симкод — это последовательность симкоманд. Симкоманда — это символьная машинная макрокоманда с Си-подобным синтаксисом. Например, ассемблерной команде add rax, rbx соответствует симкоманда rax += rbx. Симкод позволяет выразить любой ассемблерный код [и как…