什么Cpp编译器允许内联汇编代码?

时间:2019-04-03 06:08:21

标签: c++ assembly

几年前,我编写了一些重要的Cpp代码,通过切换为汇编语言的编码命令来访问硬件寄存器。我丢失了编译器和计算机。请告诉我一个Cpp编译器,该编译器允许在Cpp代码中间插入内联汇编程序。英特尔cpu,Windows。谢谢。

看来我在这个问题上缺乏清晰度。我很抱歉。给出的答案是代码的更新。做得好。今天给出的答案表明C ++编译器可能尚未针对64位汇编器进行更新。这是一个更明确的问题,仅得到部分回答。它需要更新的响应。

我正在考虑购买Intel i7台式计算机。我将为I / O和设置编写C ++代码。内部循环将以汇编语言编写,以利用硬件寄存器的乘和除法:在单独寄存器中的两个被乘数给出一个双寄存器乘积。几年前的经验是,并不是所有的C ++编译器都是一样的。在众多的C ++软件品牌中,哪个品牌与__asm汇编程序有很好的链接,并可以充分利用64位计算机的优势?

我觉得这个问题没有被问到。感谢到目前为止的出色回答。

2 个答案:

答案 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