2016-08-01 8 views
2

Компиляция простую программу на С с сНКУ -masm = Intel дает мне прописные мнемоники

gcc -masm=intel basic.c -o basic.asm 

генерируемой сборки, как показано ниже:

.cfi_startproc 
    push rbp 
    .cfi_def_cfa_offset 16 
    .cfi_offset 6, -16 
    mov rbp, rsp /I expected mov to be MOV 
    .cfi_def_cfa_register 6 
    mov QWORD PTR [rbp-8], OFFSET FLAT:.LC0 
    mov eax, 0 
    pop rbp /I expected pop to POP 
    .cfi_def_cfa 7, 8 
    ret 
    .cfi_endproc 

Я на машине Intel x86_64 и в программном обеспечении Intel Руководство разработчика, я понимаю, что мнемоники представлены все прописные (что означает, что они предлагают использовать его?).

Есть ли опция с gcc, которая дает мне прописную мнемонику?

+1

Это всего лишь вопрос стиля; ни один из ассемблеров x86, которые я знаю, не чувствителен к регистру в отношении мнемоники, а большинство «текущих» отладчиков, которые я использую (gdb, VC++, WinDbg), используют строчные мнемоники. Лично я считаю, что строчные буквы более читабельны. –

+0

@MatteoItalia Я вижу, спасибо хорошая заметка :) – sjsam

ответ

2

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, связанный с тегов вики.


Есть вариант с ССАГПЗ, что дает мне прописные мнемоники?

Нет. Вы можете вставлять мнемонику инструкции и регистрировать имена с sed или что-то, если хотите. (Но вы должны быть осторожны, чтобы не называть имена символов, которые чувствительны к регистру).

Возможно, для этого может быть полезно сопоставление образцов в сценариях, которые могут быть полезны для этого, но я не очень хорошо смотрю на источник js.

+0

Supercool :) Приятно объяснил и спасибо за ссылки .. И поверьте, я уже подумывал написать небольшой скрипт sed, чтобы преобразовать мнемонику в верхний регистр ..;) – sjsam