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.