home *** CD-ROM | disk | FTP | other *** search
/ SuperHack / SuperHack CD.bin / CODING / PASCAL / ALLSWAGS.ZIP / SWAGG-M.ZIP / MISC.SWG / 0130_32-Bit ASM.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1995-05-26  |  1.5 KB  |  49 lines

  1.  
  2. { Updated MISC.SWG on May 26, 1995 }
  3.  
  4. {
  5. > I've seen a message where some guys were talking about 32 bits
  6. > graphics programming. It was something like this
  7. > db $66
  8. > MOVSW
  9. > When you use this it will move four bytes instead of 2.
  10. > My problem is were to put those 4 bytes which should be stord.
  11. > I know the first 2 bytes should be put in AX but were should you put
  12. > the next 2. The trouble is that you can't use EAX because it's a 386
  13. > instruction. I hope you can help me with this
  14.  
  15.  Using db 66h; Movsw is the same as the ASM instruction Movsd. AX and EAX
  16.  are not used in this operation. A double word at [ds:si] is moved to [es:di]
  17.  and si and di are incremented. In the case of db 66h; Stosw (an ASM Stosd),
  18.  you must have a value in EAX. If you are clearing a screen, you must place
  19.  the color value in each byte.
  20.  
  21.  Here are some sample procedures that use these ideas:
  22. }
  23. Procedure ClearScreen(Var Screen; Color : Byte); Assembler;
  24. {$G+} { Enable 286 instructions }
  25. Asm
  26.   Les  di,Screen    { Load a the pointer to the screen into [es:di] }
  27.   Mov  al,Color
  28.   Mov  ah,al
  29.  db 66h; Shl ax,16
  30.   Mov  al,Color
  31.   Mov  ah,al
  32.   Mov  cx,16000   { Store 16000 DWords }
  33.  db 66h Rep Stosw
  34. End;
  35.  
  36. In this case, if the color value was $34, EAX would equal $34343434, and
  37. this would be stored to the screen.
  38.  
  39. Procedure CopyScreen(Var Source, Dest); Assembler;
  40.  
  41. Asm
  42.   Push  ds        { TP doesn't save DS }
  43.   Les   di,Dest
  44.   Lds   si,Source
  45.   Mov   cx,16000
  46.  db 66h; Rep Movsw  { Move 16000 words at [ds:si] to [es:di] }
  47.   Pop   ds
  48. End;
  49.