UMBC CMSC 211 Fall 1999 |
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
#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; }
Initial value of a = 16 new value of a = 255 address of a = 0065FDF4 address of main = 00401005