几年前,我编写了一些重要的Cpp代码,通过切换为汇编语言的编码命令来访问硬件寄存器。我丢失了编译器和计算机。请告诉我一个Cpp编译器,该编译器允许在Cpp代码中间插入内联汇编程序。英特尔cpu,Windows。谢谢。
看来我在这个问题上缺乏清晰度。我很抱歉。给出的答案是代码的更新。做得好。今天给出的答案表明C ++编译器可能尚未针对64位汇编器进行更新。这是一个更明确的问题,仅得到部分回答。它需要更新的响应。
我正在考虑购买Intel i7台式计算机。我将为I / O和设置编写C ++代码。内部循环将以汇编语言编写,以利用硬件寄存器的乘和除法:在单独寄存器中的两个被乘数给出一个双寄存器乘积。几年前的经验是,并不是所有的C ++编译器都是一样的。在众多的C ++软件品牌中,哪个品牌与__asm汇编程序有很好的链接,并可以充分利用64位计算机的优势?
我觉得这个问题没有被问到。感谢到目前为止的出色回答。
答案 0 :(得分:0)
我曾经使用Microsoft Visual Studio编写内联汇编,如下所示:
// --- Get current frame pointer
ADDR oriFramePtr = 0;
_asm mov DWORD PTR [oriFramePtr], ebp
不幸的是,这仅适用于32位,因为当时Microsoft的64位编译器不支持内联汇编(最近未检查)。
答案 1 :(得分:0)
默认情况下,C ++提供了asm
关键字来编写程序集(由我强制执行):
7.4 asm声明[dcl.asm]
1 asm声明的格式为
asm-definition:
asm ( string-literal ) ;
条件声明支持asm声明; 其含义是实现定义的。 [注意:通常,它用于将信息通过实现传递给汇编器。 —尾注]
GCC appears to support asm
基于上述asm
上的文章,但我找不到任何besides its support in C
MSVC does support assembly,但不通过asm
关键字;一个人必须使用__asm
:
__asm
关键字将调用内联汇编程序,并且可以在C或C ++语句合法的任何地方出现。
Visual C ++对Standard C ++
asm
关键字的支持仅限于编译器不会在关键字上生成错误的事实。但是,asm
块将不会生成任何有意义的代码。使用__asm
代替asm
。