Các gcc -S
tùy chọn sẽ tạo ra mã lắp ráp trong cú pháp của AT & T, là có một cách để tạo ra tập tin trong cú pháp của Intel? Hoặc có một cách để chuyển đổi giữa hai?
Các gcc -S
tùy chọn sẽ tạo ra mã lắp ráp trong cú pháp của AT & T, là có một cách để tạo ra tập tin trong cú pháp của Intel? Hoặc có một cách để chuyển đổi giữa hai?
Câu trả lời:
Bạn đã thử điều này?
gcc -S -masm=intel test.c
Chưa được kiểm tra, nhưng tôi đã tìm thấy nó trong diễn đàn này , nơi ai đó tuyên bố nó đã làm việc cho họ.
Tôi mới thử cái này trên mac và nó thất bại, vì vậy tôi đã xem trang người đàn ông của mình:
-masm=dialect
Output asm instructions using selected dialect. Supported choices
are intel or att (the default one). Darwin does not support intel.
Nó có thể hoạt động trên nền tảng của bạn.
Đối với Mac OSX:
clang++ -S -mllvm --x86-asm-syntax=intel test.cpp
prefix
/ noprefix
(không chắc chắn nếu nó quan trọng nếu Clang tiêu thụ lắp ráp).
Các
gcc -S -masm=intel test.c
Không làm việc với tôi. Nhưng tôi có thể nói một cách khác, mặc dù điều này không liên quan gì đến việc chạy gcc. Biên dịch tệp thực thi hoặc tệp mã đối tượng và sau đó phân tách mã đối tượng trong cú pháp mã asm của Intel với objdump như dưới đây:
objdump -d --disassembler-options=intel a.out
Điều này có thể giúp.
Tôi có mã này trong tệp 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;
};
Mã đó đã hoạt động với dòng lệnh GCC này:
gcc.exe File.cpp -masm=intel -mconsole -o File.exe
Nó sẽ dẫn đến tập tin * .exe và nó hoạt động theo kinh nghiệm của tôi.
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.
Đó là tất cả.
$ gcc -S -masm=intel -mconsole a.c -o a.out gcc: error: unrecognized command line option ‘-mconsole’
-o a.out
bạn sẽ không nhận được tệp .s.
echo "packsswb mm0,[bp+si-0x54]" | llvm-mc-3.2 -x86-asm-syntax=intel
chopacksswb -84(%bp,%si), %mm0