tbs0201.pp 760 B

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