fpc/tests/webtbs/tw18019.pp

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.