Mail Archives: djgpp/1996/07/31/11:00:46
Xref: | news2.mv.net comp.os.msdos.djgpp:6615
|
From: | dbarrett AT srvr1 DOT engin DOT umich DOT edu (David M Barrett)
|
Newsgroups: | comp.os.msdos.djgpp
|
Subject: | Inline ASM : "Error: operands given ..."
|
Date: | 30 Jul 1996 19:33:26 GMT
|
Organization: | University of Michigan Engineering, Ann Arbor
|
Lines: | 62
|
Message-ID: | <4tlo26$8cb@srvr1.engin.umich.edu>
|
NNTP-Posting-Host: | blazers.engin.umich.edu
|
To: | djgpp AT delorie DOT com
|
DJ-Gateway: | from newsgroup comp.os.msdos.djgpp
|
I've got some inline assembly that I just can't get to work. It's a
simple routine to move an offscreen buffer onto the screen. But, when I
try to compile it I get an "Error: operands given don't match any known
386 instruction" with a line number that doesn't coorespond to any line
in my C code (I have 120 lines of C code and the error is on line 140 and
148). So, I did a "gcc -S vga13h.c" and looked at lines 140 and 148, but
there was nothing fancy going on there. I've looked over it with a
couple of friends and we are all stumped. Could someone please help
out? Here's the code: I've made arrows pointing to the lines that could
be associated with the line numbers (when compiled with -S option) that
have the errors. Thanks! (Oh, and I've noticed that my algorithm is
messed up; I should add 320-Buffer width instead of 320 to the line, but
that isn't causing me the errors).
-David :)
// -- VGA_Mode_13h_Normal_Blit_Video_Buffer --
// This draws a Video_Buffer to the screen without any filters (ie, no
// transparency, translucency, etc) or clipping
// In: *In_Buf - pointer to the Video_Buffer to draw
// X,Y - location to put the buffer on the screen
// Out: none
// Returns: none
void VGA_Mode_13h_Normal_Blit_Video_Buffer(Video_Buffer *In_Buf,
U16 X, U16 Y){
U8 *Data_Ptr;
U16 A,B;
ASM(" \n
pushw %%es \n
movw _our_global_selector, %%es \n
--------------> movw %%es, %%ds \n
movl $0xA0000, %%edi \n
imulw $320, %%ax \n
addw %%bx, %%ax \n
--------------> addw %%ax, %%edi \n
next_line: \n
pushw %%cx \n
movw %%dx, %%cx \n
rep \n
movsb \n
pop %%cx \n
addw $320, %%edi \n
loop next_lineb \n
popw %%es \n
"
:
: "a" (Y),
"b" (X),
"c" (In_Buf->Dimensions.Y),
"d" (In_Buf->Dimensions.X),
"S" (In_Buf->Data));
}
--
-----------------------------------------------------------------------------
David M. Barrett :) | University of Michigan / CAEN Hotline
dbarrett AT engin DOT umich DOT edu | http://www-personal.engin.umich.edu/~dbarrett
-----------------------------------------------------------------------------
- Raw text -