tw13563a.pp 533 B

1234567891011121314151617181920212223242526272829303132
  1. { %cpu=i386 }
  2. { %fail }
  3. program bug;
  4. type
  5. br=bitpacked record //Note! "bitpacked"
  6. l:0..31;
  7. m:0..31;
  8. h:0..63;
  9. end;
  10. var
  11. test:br;
  12. {$asmmode att}
  13. begin
  14. with test do
  15. begin
  16. l:=4;
  17. m:=8;
  18. l:=$f
  19. end;
  20. asm
  21. movb br.m,%al //eax should be 4,but it is 32. Eight times. error!
  22. movb test.m,%al //eax should be 8,but it is, a strange number. error!
  23. end;
  24. asm
  25. movb $br.m/8,%al //OK, eax is 4 now, it is the right offset.
  26. movb test+br.m/8,%al //OK, eax is 8 now, it is right, too.
  27. end;
  28. end.