Free Pascal supports Intel syntax for the Intel family of Ix86 processors in it’s asm blocks.
The Intel syntax in your asm block is converted to AT&T syntax by the compiler, after which it is inserted in the compiled source. The supported assembler constructs are a subset of the normal assembly syntax. In what follows we specify what constructs are not supported in Free Pascal, but which exist in Turbo Pascal:
mov al, byte ptr MyWord -- allowed,
mov al, byte(MyWord) -- allowed,
mov al, shortint(MyWord) -- not allowed.
|
const s= 10; const t = 32767;
|
mov al, byte(s) -- useless typecast.
mov al, byte(t) -- syntax error!
|
mov al,byte ptr ['c'] -- not allowed.
mov al,byte ptr [100h] -- not allowed.
|
mov al,[ds:bx] -- not allowed
|
mov al,ds:[bx]
|
Where Sreg is optional and specifies the segment override. Notes:
Possible fields are as follow:
@: -- not allowed
|
@1: -- allowed
|
lds si,@mylabel -- not allowed
|
mov al,[byte ptr myvar] -- not allowed.
|
mov al,byte ptr [myvar] -- allowed.
|
The Intel inline assembler supports the following macros: