Name
Asm Keyword
Syntax
asm
assembler instructions
end;
Description
The asm
keyword starts a block of assembler
instructions.
Tips and Tricks
An
asm
block is a statement, and you can use it anywhere that calls for a Pascal statement or block, such as the body of a subroutine.You can refer to variable names within the assembly block and jump to labels declared elsewhere in the procedure. Do not jump into a loop unless you know what you are doing. A label that starts with an
@
sign is local to the subroutine and does not need to be declared.Delphi’s built-in assembler tends to lag behind the technology, so you cannot usually rely on having the latest and greatest instruction set. Instead, you can use
DB
,DW
, orDD
directives to compile the opcodes manually.An
asm
block can change theEAX
,ECX
, andEDX
registers, but must preserve the values ofEBX
,ESI
,EDI
,EBP
, andESP
. As a rule, you should not assume that any registers contain special values, but if you are careful, you can access a subroutine’s parameters in their registers. See the calling convention directives (cdecl
,pascal
,register
,safecall
, andstdcall
) to learn how arguments are passed to a subroutine.Writing assembly code by hand rarely gives you better performance. The most common reason to use an
asm
block is to use instructions that are not available in Delphi, such as the CPUID instruction shown in the example.
Example
unit cpuid; // CPU identification. // This unit defines the GetCpuID function, which uses the CPUID ...
Get Delphi in a Nutshell now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.