8086 - Inline-Assembler(C)



  • Hallo!

    Folgendes Porgrammstück ist gegeben:

    #include <stdio.h>
    #include <conio.h>
    
    // mul_b()
    // Inlineassembler -Funktion, die zwei vorzeichenbehaftete Bytes
    // (C-Typ: signed char) multipliziert und in einem Word
    // (C-Typ:unsigned)zurückgibt
    
    unsigned mul_sb (signed char fakt1, signed char fakt2)
    {
     asm{ .186
          mov AL, fakt1
          imul fakt2    }
    
          return(_AX);
    }
    
    // Beispielaufruf von mul_b
    
    void main(void)
    {
     signed char x=-3, y=6;
     unsigned    erg = 0;
    
     erg = mul_sb(x,y);
     printf("Das Ergebnis von %d * %d = %d\r\n", x, y, erg);
     getch();
    }
    

    Quelle: http://www.goblack.de/desy/sc12chip/c/theorie/inlineasm.htm

    Ich programmiere mit VS08. Nun gut, statt "asm" "_asm" hinzuschreiben, hab ich noch hinbekommen.
    return (_AX) kennt er aber nicht. In welche Bibliothe ist _AX denn definiert?



  • Du kannst eine Variable zuhilfe nehmen:

    signed short mul_sb (signed char fakt1, signed char fakt2)
    {
     signed short res;
     _asm {
          mov AL, fakt1
          imul fakt2    
          mov res, ax
     }
     return res;
    }
    

    "unsigned" macht als Ergebnis einer vorzeichenbehafteten Multiplikation wenig Sinn und die Groesse (32-Bit Umgebung) waere falsch.


Anmelden zum Antworten