亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

您如何使用gcc以Intel語法生成匯編代碼?

您如何使用gcc以Intel語法生成匯編代碼?

catspeake 2019-10-15 14:47:34
該gcc -S選項將以AT&T語法生成匯編代碼,是否可以以Intel語法生成文件?還是有辦法在兩者之間轉換?
查看完整描述

3 回答

?
料青山看我應如是

TA貢獻1772條經驗 獲得超8個贊

你有嘗試過嗎?


gcc -S -masm=intel test.c

未經測試,但我在這個論壇上找到了它,有人聲稱它為他們工作。


我只是在Mac上嘗試過,但失敗了,因此我在手冊頁中進行了查找:


   -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


查看完整回答
反對 回復 2019-10-15
?
守候你守候我

TA貢獻1802條經驗 獲得超10個贊


gcc -S -masm=intel test.c

和我一起工作。但是我可以說另一種方式,盡管這與運行gcc無關。編譯可執行文件或目標代碼文件,然后使用objdump以Intel asm語法反匯編目標代碼,如下所示:


 objdump -d --disassembler-options=intel a.out

這可能會有所幫助。


查看完整回答
反對 回復 2019-10-15
?
瀟瀟雨雨

TA貢獻1833條經驗 獲得超4個贊

我在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.

就這樣。


查看完整回答
反對 回復 2019-10-15
  • 3 回答
  • 0 關注
  • 983 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號