UMBC CMSC 211 Fall 1999

CSEE | 211 | 211 F'99 | lectures | news | help


Inline Assembly Language

Microsoft Visual C++ can have inline assembly language:

Microsoft Specific

__asm (also _asm)

Two versions

__asm assembly-language-instruction __asm { assembly-language-instructions } If used without braces, the __asm keyword means that the rest of the line is an assembly-language statement. If used with braces, it means that each line between the braces is an assembly-language statement. For compatibility with previous versions, _asm is a synonym for __asm. Since the __asm keyword is a statement separator, you can put assembly instructions on the same line. For related information, see Assembler (Inline) Topics. Note Microsoft C++ does not support the AT&T C++ asm keyword.

Example

// Example of the __asm keyword __asm // __asm block { mov eax, 01h int 10h } __asm mov eax, 01h // Separate __asm lines __asm int 10h // Multiple __asm statements on a line __asm mov eax, 01h __asm int 10h

My Simple example of Inline Assembly Language

#include <stdio.h>

/* Visual C++ defines int's as 32-bit numbers */

int main( )
{

    int a = 16;

	printf( "Initial value of a = %d\n\n", a );
	
	/* Use the extended registers because this is a 32-bit application */

	_asm
	{
		push eax  
		mov eax, 0xFF
		mov a, eax
		pop eax
	}

	printf( "new value of a     = %d\n", a );
	printf( "address of a       = %p\n", &a );
	printf( "address of main    = %p\n", &main );

	return 0;

}
  

Output:


Initial value of a = 16

new value of a     = 255
address of a       = 0065FDF4
address of main    = 00401005
  


CSEE | 211 | 211 F'99 | lectures | news | help