delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/2003/08/09/00:33:25

From: jbs30000 AT aol DOT com (Joel)
Newsgroups: comp.os.msdos.djgpp
Subject: Re: Inline assembly error
Date: 8 Aug 2003 21:24:22 -0700
Organization: http://groups.google.com/
Lines: 41
Message-ID: <84e4e2a9.0308082024.59e5816b@posting.google.com>
References: <84e4e2a9 DOT 0308072140 DOT 47872db2 AT posting DOT google DOT com>
NNTP-Posting-Host: 205.188.208.170
X-Trace: posting.google.com 1060403062 4402 127.0.0.1 (9 Aug 2003 04:24:22 GMT)
X-Complaints-To: groups-abuse AT google DOT com
NNTP-Posting-Date: 9 Aug 2003 04:24:22 GMT
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp
Reply-To: djgpp AT delorie DOT com

jbs30000 AT aol DOT com (Joel) wrote in message news:<84e4e2a9 DOT 0308072140 DOT 47872db2 AT posting DOT google DOT com>...
> One of the SVGA graphics routines I'm making has given me an inline
> error message.
> What I'm doing is making a routine to call the protected mode verson
> of
> Function 9 -Set/Get Palette Data
> BL = 0 - Set Palette Data / 80H Set Palette Data During Vertical
> Retrace
> CX = Number of Palette Registers to Update
> DX = First of the Palette Registers to Update
> ES:EDI = Table of Palette Values
> So, here's my routine
> unsigned short PM_Palette_Data(unsigned char Flag, unsigned short
> PCount, unsigned short FirstPal, unsigned short TableSeg, unsigned
> long TableOff)
> {
>         asm("movw %%ax, %%es\n\t"
>             "call *%0"
>             :
>             : "r" (PMPaletteData), "b" (Flag), "C" (PCount), "a"
> (TableSeg), "D" (TableOff)
>         );
> }
> 
> And here's the error I get
> Error: inconsistent operand constraints in an `asm'
> Referring of course, to the "movw %%ax, %%es\n\t"
> I'm not sure why this is happening.  movw is move word ax and es are
> words, although maybe it's confusing es as esi, but then what would I
> use to represent ES?
> Anyway, I'm still getting use to AT&T style DJGPP extended inline
> assembly, so any help is appreciated.  Thanks.

All right, nobody is answering me, so it must be that the answer is
obvious, and you're waiting for me to figure it out on my own.  But
going over everything, I shouldn't be having a problem.  movw moves
words, and ax and es are words.  I used two %% with each register
which is required in extended inline assembly.  The source and dest
are in the correct order, movw %%ax, %%es should move ax into ex, and
I put the required \n\t at the end since I had two lines of assembly. 
So, I have no clue what's wrong.

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019