Hi,
On Sun, Jul 31, 2016 at 9:07 AM, Joe Forster/STA <[email protected]> wrote:
>
>> Furthermore, any inline assembler, beside being 32bit, is by default in
>> AT&T syntax and not the Intel like syntax used in the Borland compilers...
>
> I put online a well-commented sed script that _partially_ converts inline
> assembler blocks in Turbo Pascal source from Intel syntax to AT&T.
> I used it for porting my assembler-optimized libraries into Free Pascal
> DOS32-compatible format.
(DOS32, aka Go32v2, aka DPMI, is much harder to use. Address
translation, transfer buffer, etc.)
Free Pascal already supports {$asmmode intel} (which is default for
{$mode tp} anyways).
"
1.2.3 $ASMMODE : Assembler mode (Intel 80x86 only)
The default assembler reader is the AT&T reader [and default
dialect/mode is "fpc", but you can change that manually or put it in
fpc.cfg].
"
However, there are still various caveats / incompatibilities, so read this:
"Porting Turbo Pascal to Free Pascal"
http://www.freepascal.org/port.var
...
Here's a very sloppy example (try putting "//" before {$mode tp} to
cause errors):
====================================
{$mode tp}
program d2x;
var n:byte; err:integer;
procedure hexbyte(b: byte); assembler;
asm
mov al,b
push ax
mov cl,4
shr al,cl
cmp al,10
sbb al,105
das
int 29h
pop ax
and al,15
cmp al,10
sbb al,105
das
int 29h
end;
begin if paramcount=0 then halt;
val(paramstr(1),n,err); hexbyte(n); writeln('=',hexstr(n,2))
end.
====================================
------------------------------------------------------------------------------
_______________________________________________
Freedos-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freedos-devel