bug0201.pp 595 B

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