FYI, чтобы вырезать «шум» в gcc asm output (.cfi
директивы, неиспользованные метки и т. Д.), См. How to remove "noise" from GCC/clang assembly output?. TL: DR: просто поставить свой код на http://gcc.godbolt.org/
В руководстве разработчика Intel Software, Мнемоники представлены заглавные буквы (что означает, что они предлагают использовать его?).
Я думаю, что они используют все прописные в качестве альтернативы коды форматировать, чтобы они могли писать такие вещи, как «Performs a bitwise AND operation» без путаницы (потому что «побитовая и операция» также действуют английская фраза). Они могли бы «выполнить поразрядную операцию and
», но они этого не сделали.
Использование ими всех колпачков для имен мнемоники и регистрации не является предложением, что это правильный способ кода. В учебниках/статьях Intel часто есть фрагменты кода asm (like this one about detecting AVX). В листинге 1 из них они используют строчные мнемоники и имена регистров для всего, кроме XGETBV
, что, я думаю, они делают, чтобы выделить его, потому что это новая инструкция, о которой они вас учат. Их intrinsics guide также использует ячеистые мнемоники в поле, показывающие, какая инструкция мнемонична для сопоставления (оптимизация компилятора может выбирать разные insns ...).
Мнемоники и имена регистров не чувствительны к регистру. Большинство людей предпочитают нижний регистр. Хороший стиль также включает отступ ваших операндов до согласованного столбца, а также для комментариев, поэтому ваш код не выглядит полностью оборванным. И всегда отступывайте свой код больше, чем метки, чтобы вы могли быстро видеть метки (цепочки ветвей). Например, этот бит the source for a golfed (smallest code-size) Adler-32 in x86-64 machine code иллюстрирует то, что я думаю, является достаточно хорошим стилем.
xor eax,eax ; scratch reg for loading bytes
cdq ; edx: high=0
lea edi, [rdx+1] ; edi: low=1
;jrcxz .end ; We don't handle len=0. unlike rep, loop only checks rcx after decrementing
.byteloop:
lodsb ; upper 24b of eax stays zeroed (no partial-register stall on Intel P6/SnB-family CPUs, thanks to the xor-zeroing)
add edi, eax ; low += zero_extend(buf[i])
add edx, edi ; high += low
loop .byteloop
.end:
;; exit when ecx = 0, eax = last byte of buf
;; lodsb at this point would load the terminating 0 byte, conveniently leaving eax=0
Смотрите также эту NASM style guide, связанный с x86 тегов вики.
Есть вариант с ССАГПЗ, что дает мне прописные мнемоники?
Нет. Вы можете вставлять мнемонику инструкции и регистрировать имена с sed
или что-то, если хотите. (Но вы должны быть осторожны, чтобы не называть имена символов, которые чувствительны к регистру).
Возможно, для этого может быть полезно сопоставление образцов в сценариях, которые могут быть полезны для этого, но я не очень хорошо смотрю на источник js.
Это всего лишь вопрос стиля; ни один из ассемблеров x86, которые я знаю, не чувствителен к регистру в отношении мнемоники, а большинство «текущих» отладчиков, которые я использую (gdb, VC++, WinDbg), используют строчные мнемоники. Лично я считаю, что строчные буквы более читабельны. –
@MatteoItalia Я вижу, спасибо хорошая заметка :) – sjsam