On Apr 27, 1:39 pm, Daniel Krügler <daniel.krueg...@[EMAIL PROTECTED]
>
wrote:
> On 27 Apr., 15:29, Le Chaud Lapin <jaibudu...@[EMAIL PROTECTED]
> wrote:
`> 1) IMO the x86 processor does not accept a literal
> as argument of mul (B == 0). Only registers or
> variables are allowed.
You're right. The example I gave was erroneous.
> 2) MS does not officially sup****t _asm, it seems
> to be a relict, which just may work. You will find
> out that it does *not* work, if you disable language
> extensions (/Za). I recommend to use the officially
> sup****ted __asm (double underscore) notation.
Fixed. :)
> > Naturally, I would like to understand not just how to do this for
> > VS2005, but for all systems/compilers, so that I am not left guessing
> > whether I got it right or not.
>
> Unfortunately this seems an impossible task, because
> no compiler I'm aware of uses the standardized syntax
> for assembler declaration, which would change your code to
>
> #define MULTIPLY(A, B, lower_word, upper_word)\
> {\
> asm("mov eax, A");\
> asm("mul B");\
> asm("mov upper_word, edx");\
> asm("mov lower_word, eax");\
What I meant was to keep the interface seen by the pure C++ code the
same.
> Back to your compiler/pre-processor problem: It seems
> that you can solve your problem in this case by
> removing the final semicola (according to the MS
> do***entation this is feasible). My recommended
> syntax would be to write the code as follows (note
> that I use __asm instead of _asm):
>
> #define MULTIPLY(A, B, lower_word, upper_word)\
> {\
> __asm mov eax, A\
> __asm mul B\
> __asm mov upper_word, edx\
> __asm mov lower_word, eax\
>
> }
Changes made.
Thanks for comments,
-Le Chaud Lapin-
--
[ See http://www.gotw.ca/resources/clcm.htm
for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]


|