tb0168.pp 874 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. { %CPU=i386 }
  2. { %OPT= -Ratt }
  3. { Old file: tbs0201.pp }
  4. { problem with record var-parameters and assembler OK 0.99.11 (PFV) }
  5. program bug0201;
  6. type rec = record
  7. a : DWord;
  8. b : Word;
  9. end;
  10. { this is really for tests but
  11. this should be coded with const r1 and r2 !! }
  12. function x(r1 : rec; r2 : rec; var r3 : rec) : integer; assembler;
  13. asm
  14. movl r3, %edi
  15. movl r1, %ebx
  16. movl r2, %ecx
  17. movl rec.a(%ebx), %eax
  18. addl rec.a(%ecx), %eax
  19. movl %eax, rec.a(%edi)
  20. movw rec.b(%ebx), %ax
  21. addw rec.b(%ecx), %ax
  22. movw %ax, rec.b(%edi)
  23. movw $1,%ax
  24. end;
  25. var r1, r2, r3 : rec;
  26. begin
  27. r1.a := 100; r1.b := 200;
  28. r2.a := 300; r2.b := 400;
  29. x(r1, r2, r3);
  30. Writeln(r3.a, ' ', r3.b);
  31. if (r3.a<>400) or (r3.b<>600) then
  32. begin
  33. Writeln('Error in assembler code');
  34. Halt(1);
  35. end;
  36. end.