mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-06 23:28:28 +02:00
75 lines
1.2 KiB
ObjectPascal
75 lines
1.2 KiB
ObjectPascal
{ %skiptarget=android }
|
|
{ %cpu=i386 }
|
|
{ %opt=-Cg- }
|
|
|
|
(*$ifdef FPC *)
|
|
(*$z1*)
|
|
(*$mode delphi *)
|
|
(*$packset 1 *)
|
|
(*$asmmode intel *)
|
|
(*$endif *)
|
|
(*$apptype console *)
|
|
|
|
program asm_test;
|
|
type
|
|
tr=packed record
|
|
case integer of
|
|
1: (bytes: array [0..31] of byte);
|
|
2: (a,b,c,d,e,f,g,h: byte);
|
|
3: (aa,bb,cc,dd: word);
|
|
end;
|
|
|
|
var
|
|
r: tr;
|
|
|
|
function check_byte:boolean;
|
|
asm
|
|
cmp [r.a],0
|
|
setnz al
|
|
end;
|
|
|
|
function check_byte_as_dword:boolean;
|
|
asm
|
|
// the dword ptr has to override the size of the field declaration
|
|
cmp dword ptr [r.a],0
|
|
setnz al
|
|
end;
|
|
|
|
|
|
function check_word:boolean;
|
|
asm
|
|
cmp [r.aa],0
|
|
setnz al
|
|
end;
|
|
|
|
|
|
function check_word_as_dword:boolean;
|
|
asm
|
|
// the dword ptr has to override the size of the field declaration
|
|
cmp dword ptr [r.aa],0
|
|
setnz al
|
|
end;
|
|
|
|
|
|
begin
|
|
fillchar(r,sizeof(r),#$ff);
|
|
r.a:=0;
|
|
if check_byte then
|
|
halt(1);
|
|
if not check_byte_as_dword then
|
|
halt(2);
|
|
r.aa:=0;
|
|
if check_word then
|
|
halt(3);
|
|
if not check_word_as_dword then
|
|
halt(4);
|
|
fillchar(r,sizeof(r),#$ff);
|
|
r.a:=1;
|
|
if not check_byte then
|
|
halt(5);
|
|
r.aa:=1;
|
|
if not check_word then
|
|
halt(6);
|
|
end.
|
|
|