Pour obtenir une clé
d'essai remplissez le formulaire ci-dessous
Demandez des tariffs
Nouvelle licence
Renouvellement de licence
--Sélectionnez la devise--
* En cliquant sur ce bouton, vous acceptez notre politique de confidentialité

Free PVS-Studio license for Microsoft MVP specialists
To get the licence for your open-source project, please fill out this form
** En cliquant sur ce bouton, vous acceptez notre politique de confidentialité.

I am interested to try it on the platforms:
** En cliquant sur ce bouton, vous acceptez notre politique de confidentialité.

Votre message a été envoyé.

Nous vous répondrons à

Si vous n'avez toujours pas reçu de réponse, vérifiez votre dossier
Spam/Junk et cliquez sur le bouton "Not Spam".
De cette façon, vous ne manquerez la réponse de notre équipe.

A common error occurring when compiling…

A common error occurring when compiling a 64-bit application: error C4235, Assembler

30 Oct 2010

Visual C++ does not support 64-bit inline assembler.

That is why you get an error when trying to compile a code like this:

void waitvrt(void)
  __asm {
      mov  dx,3dah
      in    al,dx
      test  al,8
      jnz    VRT
      in    al,dx
      test  al,8
      jz    NoVRT
1>.\Third_party\Src\CreditsThread.cpp(111) :
error C4235: nonstandard extension used :
'__asm' keyword not supported on this architecture

If you still need to use assembler code, you may use a third-party 64-bit assembler, for example, MASM.

But you will most likely need to rewrite the existing code in C/C++. The assembler code is likely to be obsolete and it is more reasonable to use modern functions provided by operating systems or C/C++ constructs. Using assembler for the purpose of optimization can rarely be justified because Visual C++ compiler creates rather efficient code in most cases. Also, remember that you may use intrinsic-functions.

Intrinsic-functions are special system-dependent functions performing such actions that cannot be performed at the level of C/C++ code or that do it much more efficiently than other means. On the whole, they allow you to get rid of inline-assembler because it is often undesirable or impossible to use it.

Programs can use intrinsic-functions to create faster code because there are no expenses on calling common functions. Of course, the size of the code will be a bit larger. MSDN gives the list of the functions that can be replaced with their intrinsic-versions. For example, these are memcpy, strcmp, etc.

Microsoft Visual C++ compiler has a special option "/Oi" that allows you to replace the calls of some functions with their intrinsic-versions automatically.

Besides automatic replacement of common functions with intrinsic-versions, you may use intrinsic-functions in the code explicitly. This is why it may be useful:

  • As I have already said, inline assembler is not supported by Visual C++ in the 64-bit mode. But intrinsic-code is.
  • Intrinsic-functions are simpler to use because you do not need to know registers or other similar low-level constructs when dealing with them.
  • Intrinsic-functions are updated in compilers. But assembler code must be updated manually.
  • The embedded optimizer does not work with assembler code, so you need external linking of the module. But this all does not concern intrinsic-code.
  • Intrinsic-code is easier to port than assembler code.

Using intrinsic-functions in automated mode (with the help of the compiler switch) allows you to get some per cent of performance gain at no cost, and "manual" introduction of intrinsic-functions allows you to get even more. That is why using them is absolutely justified.

To learn more about intrinsic-functions see the Visual C++ team blog.

Popular related articles
macOS 10.15 no longer supports 32-bit apps. What can you do?

Date: 15 Oct 2019

Author: Sergey Khrenov

On October 7, 2019, Apple released a new version of its Mac operating system, macOS Catalina. Version 10.15 contains many changes and improvements. One of the significant is the complete phasing out …
If the coding bug is banal, it doesn't mean it's not crucial

Date: 19 Avr 2017

Author: Andrey Karpov

Spreading the word about PVS-Studio static analyzer, we usually write articles for programmers. However, some things are seen by programmers quite one-sided. That is why there are project managers wh…
Detecting Overflows of 32-Bit Variables in Long Loops in 64-Bit Programs

Date: 22 Mar 2016

Author: Andrey Karpov

One of the problems that 64-bit software developers have to face is overflows of 32-bit variables in very long loops. PVS-Studio code analyzer is very good at catching issues of this type (see the Vi…
Is it possible to run 64-bit applications in a 32-bit OS?

Date: 08 Déc 2015

Author: Andrey Karpov

Nowadays 64-bit operating systems are very widespread. But 32-bit OS are still present on the market, in quite obvious quantities. A lot of modern program tools are developed to be run only in 64-bit…
How to Port a 9 Million Code Line Project to 64 bits?

Date: 03 Aoû 2015

Author: Evgeniy Ryzhkov, Ilya Ivanov

Our team has recently finished porting one pretty large project (9 million code lines, 300 Mbytes of source files) to the 64-bit platform. It took us one year and a half. Although we are not permitte…

Comments (0)

Next comments
Unicorn with delicious cookie
Nous utilisons des cookies pour améliorer votre expérience de navigation. En savoir plus