Linkowanie asm i C

0

Na jakiej zasadzie działa takie coś że mam plik w C i mam funkcje napisane w asm i ustawione na GLOBAL tzn to i to to 2 różne pliki, obydwa sie kompiluje i linkuje i mozna zrobić np funkcje print itp

GLOBAL _print
_print: ...

ret
.....
print("ssss");

jak to dziala??? i jak dzila tez takie cos ze mam np:

version()
i coś sie zadeklarowanego wczesniej sie pojawia?

chodzi mi o zasade dzialania tego, tzn komunikacji miedzy C i asm
niechcial bym stosowac wstawek asm tylko linkowanie jak w przykladzie :D

0

nie czaję Cię za bardzo. Nie ma tu żadnej komunikacji między asm i c ponieważ i tak wszystko jest przerabiane na asm a potem kompilowane.

0

CyberKid: on mowi ogolnie.

A zasada dzialania jest prosta (przynajmniej w teorii ;) )
Gdy kompilujesz program jest on najpierw przerabiany na kod relokowalny. Tzn. zamiast wlasciwych adresow procedur itp. sa jedynie symbole. Dopiero po przejsciu przez linker te luki sa uzupelniane. Jezeli podasz w programie w C prototyp jakiejs funkcji, a potem ja wywolasz to tak, jakbys tworzyl taka luke w programie. Nastepnie, gdy juz linkujesz ta luka jest uzupelniana o adres wlasciwej procedury z pliku obj (powstalego z C, asm czy czego tam jeszcze sie da).
A jak polaczyc w praktyce C i asm to juz chyba wiesz :)

0

mam sobie funkcję printf("ddd")

i jak asm ma wydostac te ddd?? do jakiego rejestru czy gdzie jest to wewalane??

macie jakies spisy funkcji drukujacych takie cos?

mam wywolywanie trybu 320x200x256: mov ax,13h
int 10h

ale jak wywolac 640x480x16????

0

Dorwałem taki kod:

mov ax,1112h
xor bl,bl
int 10h

obraz robi się 80 na 50 znaków i jest spox ale ile on ma kolorków?

0

Proponuje zaczac od podstaw...
Najpierw zerknij do dzialu asm. Tam w FAQ masz link do listy przerwan. Sprawdz odpowiednie przerwanie (w twoim wypadku 10h) i tam jest lista trybow: rozdzielczosci i kolorow.
Co do "dostania sie do ddd", to jezeli wpisujesz printf("blabla") to po prostu wskaznik do stringa jest przekazywany przez stos do procedury. Ot tyle.

0

Dzięki o to mi chodziło :D

0

Mam problem z tą rozdzielczością a mianowicie wziąłem mov ah,00h
mov al,xxh
int 10h

ale co pod te xxh podstawić czy może ah zmienić na inny?

bo niemoge znaleźć w ah=00h rozdzielczości 640x480x16 z fontami 8x8 macie może gdzies?? albo cos podobnego moze byc trochce wieksza rozdzielczosc np 800x600 itp ale fonty maja byc takie same

o to chodzi ze poczatkowe ah obsluguje wszystkie biosy itp ale jak sie dalej idzie to maja duzo werski dla kazdego biosa, karty graficznej czy tam czegos a mi chodzi zeby chodzilo tak jak ja chce w trybie rzeczywistym. Wystarczy mi zebyscie podsuneli jakis numerek ah w którym można to ustawic bo tego jest multum :( i znaleźć jeszcze nie moge

0

25h
26h
73h
lub tryby VESA:
int 10h/AX = 4F02h. Wiecej w RBIL

1 użytkowników online, w tym zalogowanych: 0, gości: 1