Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: Hauke am 03. February 2007, 15:59

Titel: Frage zu assembler und c
Beitrag von: Hauke am 03. February 2007, 15:59
Ich hab ein paar Frage in Bezug auf c (gcc) und assembler.
Unterstützt der gcc auch 16Bit Code? Ich hab nämlich Labels und Makros, die ich für 16Bit und 32Bit brauche also mit *.obj und extern und global. :?
Andre Frage was ist „return a;“ in assembler Code (ret)? :?
Und wo gibt man c bei einem Funktionsaufruf  die Parameter mit? :?
Titel: Re: Frage zu assembler und c
Beitrag von: bluecode am 03. February 2007, 16:40
Unterstützt der gcc auch 16Bit Code?
Der C-Compiler nicht, falls der gemeint war, gas schon, aber auch nur eingeschränkt.

Zitat
Andre Frage was ist „return a;“ in assembler Code (ret)? :?
Kommt afaik auf die calling convention an, bei mir wars bis jetzt immer so:
mov eax/ax/al, [a]
ret
d.h. das retval ist in eax/ax/al (je nach Größe des retval)

Zitat
Und wo gibt man c bei einem Funktionsaufruf  die Parameter mit? :?
Kommt ganz auf die calling convention an, normalerweise auf dem Stack. Wobei das erste Argument das zuletzt gepushte ist.
Titel: Re: Frage zu assembler und c
Beitrag von: Thoth am 16. February 2007, 13:18
Ich würde ein return a; so implementieren (16 Bit Code, NASM Syntax):

popa
mov    sp, bp
pop    bp
mov   ax, a
ret