如何将用Keil Software编写的汇编代码制作成可执行文件?

时间:2011-01-20 12:31:07

标签: assembly

我可以为x86处理器编写汇编代码。但我需要知道如何将其转换为可执行文件。

2 个答案:

答案 0 :(得分:0)

我认为Keil是一个C ++编译器,但我认为您正在尝试使用IDE接口来编写ASM代码。你需要的是一个x86汇编程序。

如果您希望继续使用C ++编译器,请注意C ++支持__asm关键字,因此您所要做的就是:

//all your includes here

int main()
{
    asm
    {
        //your assembly code here
    }

    return 0;
}

请注意,这是一项有风险的业务,C ++编译器不会为您在asm块中发生的任何编码错误提供错误,相反,它最有可能编译正常,并且只是在您运行它时崩溃,而这让调试变得很糟糕。但是,优势在于您可以将中级语言(如C ++(甚至use C++ code within those ASM blocks)的特权与使用ASM等低级语言(即速度和大小)的特权相结合,尽管这几乎可以忽略不计当你通过C ++编译器运行代码时,特别是因为编译器不会优化你的ASM代码,但我将保留我对ASM编码的批评另一次)。有关C ++和ASM的更多信息here

根据您的编码和目标操作系统的不同,您可以从许多汇编代码汇编程序中进行选择(从技术上讲,汇编程序汇编汇编代码,而编译器将更高级别的语言(如C ++)编译为汇编代码,然后编译成汇编代码。可执行的)那里,Nasm,Tasm,GoAsm,Masm,Gasm(只是谷歌他们的名字)。我相信FASM是最受欢迎的之一。请注意,它们似乎都与编码风格无法兼容,因此您可以适应您选择的特定编译器(我从未喜欢ASM的原因之一,我主要编写高级程序集)。

答案 1 :(得分:0)

我最后一次看,Keil制作了C51(8051),而不是i386(80386+)编译器。

所以,如果这是真的,你有一个C51编译器:没有机会。虽然8051是英特尔,有点横向与x86最早的谱系(8080),8086,更重要的是与i386(后来又用x86_64)有关,但是这一点有很大变化,这可能毫无结果。

Keil C51编译器是8051 8位,带有16位扩展(例如Hitachi 80515),您可能正在寻找i386或x86_64(32 / 64bit)

的东西