-masm=dialect
Output asm instructions using selected dialect. Supported choices are ‘intel’
or ‘att’ (the default one). Darwin does not support ‘intel’.
intel_syntax风格语法,AT&T实在看的不顺眼,呵呵。
compiled with g++ asmtest.cpp -o asmtest.exe -Wno-write-strings -mconsole -masm=intel -m32 (或者)
compiled with gcc asmtest.c -o asmtest.exe -Wno-write-strings -mconsole -masm=intel -m32
/* Gcc asmtest By G-Spider */ /* compiled with g++ asmtest.cpp -o asmtest.exe -Wno-write-strings -mconsole -masm=intel -m32*/ /* compiled with gcc asmtest.c -o asmtest.exe -Wno-write-strings -mconsole -masm=intel -m32*/ #include <stdio.h> void edmUCASE(char* a) { int alen = 5;//strlen(a); __asm__( ".intel_syntax noprefix \n" "mov ecx,[ebp-4] \n" //alen "mov eax,[ebp+8] \n" //a "A00: \n" "mov dl,[eax] \n" "cmp dl,'a' \n" "jb A01 \n" "cmp dl,'z' \n" "ja A01 \n" "sub dl,32 \n" "mov byte ptr [eax],dl \n" //mov [eax],dl "A01: \n" "inc eax \n" "loop A00 \n" ); } int main (int argc, char** argv) { char S[]="jaMes"; printf("%s\n",S); edmUCASE(S); printf("%s\n",S); return 0; }
以下方式简洁一些,但不能加注释:
void edmUCASE(char* a) { int alen = 5;//strlen(a); __asm__(".intel_syntax noprefix \n\ mov ecx,[ebp-4] \n\ mov eax,[ebp+8] \n\ A00: \n\ mov dl,[eax] \n\ cmp dl,'a' \n\ jb A01 \n\ cmp dl,'z' \n\ ja A01 \n\ sub dl,32 \n\ mov [eax],dl \n\ A01: \n\ inc eax \n\ loop A00 \n\ "); }