tasmseg2.pp 964 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. { %cpu=i8086 }
  2. program tasmseg2;
  3. { i8086 test for the SEG inline assembler directive, when used in 32-bit
  4. instructions }
  5. {$asmmode intel}
  6. {$asmcpu 80386}
  7. var
  8. err, err2, err3: Boolean;
  9. begin
  10. err := False;
  11. asm
  12. xor eax, eax
  13. mov ebx, 0ffffffffh
  14. mov ax, seg @data
  15. mov ebx, seg @data
  16. cmp eax, ebx
  17. je @@ok
  18. mov err, 1
  19. @@ok:
  20. end;
  21. if err then
  22. Writeln('32-bit and 16-bit seg @data don''t match!');
  23. err2 := False;
  24. asm
  25. xor eax, eax
  26. mov ebx, 0ffffffffh
  27. mov ax, seg @code
  28. mov ebx, seg @code
  29. cmp eax, ebx
  30. je @@ok2
  31. mov err2, 1
  32. @@ok2:
  33. end;
  34. if err2 then
  35. Writeln('32-bit and 16-bit seg @code don''t match!');
  36. err3 := False;
  37. asm
  38. xor eax, eax
  39. mov ebx, 0ffffffffh
  40. mov ax, seg err3
  41. mov ebx, seg err3
  42. cmp eax, ebx
  43. je @@ok3
  44. mov err3, 1
  45. @@ok3:
  46. end;
  47. if err3 then
  48. Writeln('32-bit and 16-bit seg err3 don''t match!');
  49. if err or err2 or err3 then
  50. Halt(1);
  51. end.