gcc -S
ตัวเลือกที่จะสร้างรหัสการชุมนุมใน AT & T ไวยากรณ์จะมีวิธีในการสร้างไฟล์ในไวยากรณ์อินเทล? หรือมีวิธีการแปลงระหว่างทั้งสอง?
gcc -S
ตัวเลือกที่จะสร้างรหัสการชุมนุมใน AT & T ไวยากรณ์จะมีวิธีในการสร้างไฟล์ในไวยากรณ์อินเทล? หรือมีวิธีการแปลงระหว่างทั้งสอง?
คำตอบ:
คุณเคยลองสิ่งนี้หรือไม่?
gcc -S -masm=intel test.c
ยังไม่ทดลอง แต่ฉันพบในฟอรัมนี้ที่มีคนอ้างว่าใช้งานได้กับพวกเขา
ฉันเพิ่งลองทำสิ่งนี้ใน mac และมันล้มเหลวดังนั้นฉันจึงดูในหน้า man ของฉัน:
-masm=dialect
Output asm instructions using selected dialect. Supported choices
are intel or att (the default one). Darwin does not support intel.
มันอาจทำงานบนแพลตฟอร์มของคุณ
สำหรับ Mac OSX:
clang++ -S -mllvm --x86-asm-syntax=intel test.cpp
prefix
/ noprefix
(ไม่แน่ใจว่ามันสำคัญถ้าเสียงดังกราวใช้ชุดประกอบ)
The
gcc -S -masm=intel test.c
ทำงานกับฉันได้ไหม แต่ฉันสามารถบอกวิธีอื่นได้แม้ว่าจะไม่เกี่ยวข้องกับการรัน gcc คอมไพล์ไฟล์เรียกทำงานหรือไฟล์โค้ดออบเจ็กต์แล้วแยกส่วนรหัสออบเจ็กต์ในไวยากรณ์ Intel asm ด้วย objdump ดังนี้:
objdump -d --disassembler-options=intel a.out
สิ่งนี้อาจช่วยได้
ฉันมีรหัสนี้ในไฟล์ CPP:
#include <conio.h>
#include <stdio.h>
#include <windows.h>
int a = 0;
int main(int argc, char *argv[]) {
asm("mov eax, 0xFF");
asm("mov _a, eax");
printf("Result of a = %d\n", a);
getch();
return 0;
};
นั่นเป็นรหัสที่ทำงานกับบรรทัดคำสั่ง GCC นี้:
gcc.exe File.cpp -masm=intel -mconsole -o File.exe
มันจะส่งผลให้ไฟล์ * .exe และทำงานได้ในประสบการณ์ของฉัน
Notes:
immediate operand must be use _variable in global variabel, not local variable.
example: mov _nLength, eax NOT mov $nLength, eax or mov nLength, eax
A number in hexadecimal format must use at&t syntax, cannot use intel syntax.
example: mov eax, 0xFF -> TRUE, mov eax, 0FFh -> FALSE.
นั่นคือทั้งหมดที่
$ gcc -S -masm=intel -mconsole a.c -o a.out gcc: error: unrecognized command line option ‘-mconsole’
-o a.out
คุณจะไม่ได้รับไฟล์. s
echo "packsswb mm0,[bp+si-0x54]" | llvm-mc-3.2 -x86-asm-syntax=intel
ให้packsswb -84(%bp,%si), %mm0