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 -----------------------------------------------------------------------------