www.delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/1997/03/25/22:48:44

From: Neil Stone <Neil_Stone AT CyberServices DOT Com>
Newsgroups: comp.os.msdos.djgpp
Subject: Re: info, FAQ not enough -> GCC and ASM
Date: Tue, 25 Mar 1997 23:23:10 +0000
Organization: [not set]
Lines: 27
Message-ID: <33385E5E.325E@CyberServices.Com>
References: <5g1hv1$qtb$1 AT thor DOT atcon DOT com>
NNTP-Posting-Host: n70i015.c1r2.pol.co.uk
Mime-Version: 1.0
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp

SteelGolem wrote:
> 
> asm( "mov %1, %0": "=i(var2)": "i(var1)" );
>
I don't know that much about assembler but what I have read is that for
one thing the above code won't work. In AT&T syntax you have to specify
the size of what you are moving. So the above would be:

asm("movw %1, %0": "=i(var2)": "i(var1)");

movw = 2 bytes, movb = 1 byte, movl = 4 bytes. There is also pushb,
pushw, etc. 

To access the registers you just specify them:

asm("movw %1, %%ax
     movw %%ax, %0"
    :"=i(var2)"
    :"ivar1");

The only point to make is that when using variables, %0, %1, etc, you
need to put %% in front of register names. If you don't use variables
then you only need one %:

asm("movw %bx, %ax");

I hope this helps (I hope this works!).

- Raw text -


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