The __asm Keyword in SHx Inline Assembly
The __asm keyword invokes the inline assembler, and can appear anywhere in a C or C++ statement. The compiler treats the __asm statement as an intrinsic function call.
Before an __asm call is invoked, its function prototype must be declared. The following code fragments show how to make an __asm prototype declaration in C++.
extern "C" { void __asm(const char *, ...); }
extern "C" { int __asm(const char *, ...); }
extern "C" { unsigned int __asm(const char *, ...); }
In C statements, the compiler requires a different form of declaration.
void __asm(const char *, ...);
int __asm(const char *, ...);
unsigned int __asm(const char *, ...);
In an __asm declaration, the string argument is a null terminated character string consisting of one or more valid SH-3 or SH-4 assembly source statements. The compiler passes any subsequent arguments to the assembly code described by the first string argument.
The following syntax shows the structure of an assembly source statement.
[<label>:] [<operation> [<operand(s)>]] [comment]
The following example shows how to use an assembly source statement.
Label1: MOV.L@RO,R1 ;This is an example source statement
Multiple assembly-language instructions may be listed in a single __asm statement by using embedded newline characters (\n) as separators within the string argument. A comment can be included on any line, started with a semicolon.
The following code fragment shows how to use multiple assembly language statements to write a program that prints out "Hello".
#include <stdio.h>
extern void __asm(const char *, ...);
main() {
__asm(
"jsr @R5; Call printf\n"
"nop ; Don't forget the delay slot"
,"Hello\n"
,printf
);
}
See Also
Elements of the SHx __asm Block | __asm Restrictions in SHx Inline Assembly | Constants in SHx Inline Assembly | Symbols and Labels in SHx Inline Assembly | SHx Inline Assembly Parameters | SH-4 Mode Bits | Branching in SHx Inline Assembly
Last updated on Thursday, April 08, 2004
© 1992-2003 Microsoft Corporation. All rights reserved.