From: Newsgroups: comp.os.msdos.djgpp Subject: Re: Why add 36008 to offset to reach buffer? Date: Mon, 14 Apr 97 21:15:27 CST Organization: University of Wisconsin, Madison Lines: 59 Message-ID: <86332.fremlin@oncology.wisc.edu> NNTP-Posting-Host: f209-146.net.wisc.edu To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp On 11 Apr 1997 00:36:59 GMT, Guido Bursch wrote: >Hi all! > >I have a question for my little virtual screen program. >I made up a virtual scree in mode 13h with: > >unsigned char virtscreen[64000]; > >Then I try to access it via inline-asm: > >__asm__(" > pushl %%eax\n > movl $36008, %%eax\n ????? > movb $15, %0(,%%eax,1)\n > popl %%eax" > : > : "m"(&virtscreen) This is wrong. As far as I see it, you are putting the address where the variable 'virtscreen' is stored in a register. 'virtscreen' is already a pointer so you should just store 'virtscreen' in the register, i.e. : "m" (virtscreen). >); > >and then copy it with dosmemput or movedata to video memory. >It changes the first pixel to white (what I want). >But why I have to add 36008 to the 'offset' (eax) to >reach the first pixel? It appears to be just luck that adding 36008 to the memory address where 'virtscreen' is stored gets you the address where the data pointed to by 'virtscreen' is stored. But how did you get 36008? By trial and error?! >It would be great, if anyone would tell me what I'm >doing wrong. > > Thanks alot!! Good luck and happy coding! > >BTW: Please dont't email me personally (it may cause problems). > > (fremlin AT oncology DOT wisc DOT edu or fremdh AT essex DOT ac DOT uk) Cattle die, kindred die, Every man is mortal; But I know one thing that does not die, The glory of a great deed The Elder Edda