-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\
");
}