tbs0276.pp 863 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. {$asmmode intel}
  2. type
  3. trec = record
  4. ypos,
  5. xpos : longint;
  6. end;
  7. z80cont = record
  8. dummy : longint;
  9. page: array [0..11,0..16383] of byte;
  10. end;
  11. var
  12. rec : tRec;
  13. myz80 : z80cont;
  14. error : boolean;
  15. test : byte;
  16. begin
  17. error:=false;
  18. test:=23;
  19. rec.xpos:=1;
  20. myz80.page[0,5]:=15;
  21. asm
  22. lea edi, Rec
  23. cmp byte ptr [edi+tRec.Xpos], 1
  24. jne @error
  25. cmp byte ptr [edi].trec.Xpos, 1
  26. jne @error
  27. mov ecx, 5
  28. mov dh,byte ptr myz80.page[ecx]
  29. cmp dh,15
  30. jne @error
  31. mov byte ptr myz80.page[ecx],51
  32. jmp @noerror
  33. @error:
  34. mov byte ptr error,1
  35. @noerror:
  36. end;
  37. if error or (test<>23) or (myz80.page[0,5]<>51) then
  38. begin
  39. Writeln('Error in assembler code generation');
  40. Halt(1);
  41. end
  42. else
  43. Writeln('Correct assembler generated');
  44. end.