Asm+Pascal prob. (vajon megold6atlan?)

Asm+Pascal prob. (vajon megold6atlan?)
2005-02-02T14:19:36+01:00
2005-02-07T16:29:50+01:00
2022-10-23T15:35:43+02:00
gargoil19
Na szevasztok!

Fura 1 problémával találkoztam asm+pascal kombóban!

Nem tudom melyik a hibás. A probléma a következő képpen néz ki.
Csináltam egy programot (vagyis csak majdnem) amelyik figyeli az egér pozícióját és a megfelelő helyre grafikusan kirajzol egy pixelt.

Leellenőriztem, és a számolással nincs baj! A probléma a következő : Amikor a videómemóriát címzem, az offset címemet regiszterből érem el. Így abszolút nem működik, mert csak a bal oldali pixeloszlopban tudok mozogni. Ha konstansként adom át akkor már a képernyő többi része is működik, igaz kicsit (nagyon) korlátoltan, de működik. hol a hiba? Nézzétek a forráskódot. Kommentezve van:

uses crt; var bank,off,wordmax : word; color : shortint; x,y,sorhossz : integer; poz : longint; begin sorhossz := 640; {1 pixelsor hossza} wordmax := 65535; {Ezzel osztok majd a banksz m +6 roz s hoz} color := 15; {a feh‚r szˇn} asm mov ax,4F02h mov bx,101h {640*480*256 m˘d be llˇt sa} int 10h {+szakˇt s} {eg‚r inicializ l sa} xor ax,ax {ax := 0} int 33h {az eg‚r +szakˇt sa} {eg‚r x poz be llˇt s} mov ax,4 mov cx,320 int 33h {eg‚r y poz be llˇt s} mov ax,4 mov dx,240 int 33h end; {ciklus gomblenyom sig} repeat asm {eg‚r x koord kiolvas s} mov ax,3 int 33h; mov x,cx {eg‚r y koord kiolvas s} mov ax,3 int 33h; mov y,dx mov ax,y {ax-be az sorindex} mul sorhossz {megszorzom a sorindexet 640-nel} {ax-be a szorzat fels‹ 2 b jtja} {dx-be az als˘} {ezt gondoltam megjegyz‚sbe teszem, mert en‚lk?l is megy} { mov word ptr [poz],ax mov word ptr [poz+2],dx {a pozˇci˘t elt rolom a mem˘ri ba} { mov ax,word ptr [poz] mov dx,word ptr [poz+2] {a pozˇci˘t visszaolvasom} div wordmax {ax:dx-et elosztom 65535-tel, hogy megkapjam} {h nyadik bankba kell kirajzolnom az egeret} mov bank,ax {bank(sz m) := eg‚szr‚sz} mov off,dx {off := marad‚k=(a bankon bel?li pozˇci˘)} {bankv lt s} mov ax,4F05h xor bx,bx mov dx,bank {dx-be banksz m} int 10h {pont megjelenˇt‚se} mov al,color {al := a pont szˇne} mov es,segA000 {es := a vide˘mem˘ria szegmenscˇme} mov di,off {di := az offsetcˇm } mov es:[di],al {szˇn elhelyez‚se a vide˘ mem˘ri ban} {ez a r‚sz hib s vmi miatt!!!} {ugyanis, ha di-be konkr‚t ‚rt‚ket ˇrok, akkor} {műk"dik, de ˇgy mindig csak a bal pixeloszlopban} {mozoghatok az eg‚rrel => HIHHETETLEN} end; until keypressed; end.

Köszi a segítséget! -Gargoil-
Mutasd a teljes hozzászólást!
uses crt; var x,y:word; begin asm mov ax,13h int 10h {320*200*256} xor ax,ax int 33h mov ax,08h mov cx,0 mov dx,320 int 33h mov ax,07h mov cx,0 mov dx,200 int 33h {Egér terület állítása az egész felületre. Hátha...} mov ax,04h mov cx,160 mov dx,100 int 33h end; repeat asm mov ax,03h int 33h mov x,cx mov y,dx mov ax,a000h mov es,ax mov ax,320 mul y mov di,ax add di,x mov al,color stosb end; until keypressed; end.
Mutasd a teljes hozzászólást!

Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd