bug0201.pp 578 B

12345678910111213141516171819202122232425262728293031323334
  1. program bug0201;
  2. type rec = record
  3. a : DWord;
  4. b : Word;
  5. end;
  6. function x(r1 : rec; r2 : rec; var r3 : rec); assembler;
  7. asm
  8. movl r3, %edi
  9. movl r1.a, %eax
  10. addl r2.a, %eax
  11. movl %eax, rec.a(%edi)
  12. movw r1.b, %cx
  13. addw r2.b, %cx
  14. movw %cx, rec.b(%edi)
  15. end;
  16. var r1, r2, r3 : rec;
  17. begin
  18. r1.a := 100; r1.b := 200;
  19. r2.a := 300; r2.b := 400;
  20. x(r1, r2, r3);
  21. Writeln(r3.a, ' ', r3.b);
  22. if (r3.a<>400) or (r3.b<>600) then
  23. begin
  24. Writeln('Error in assembler code');
  25. Halt(1);
  26. end;
  27. end.