Wstawka asemblerowa

0

Witam.
Mam takie pytanie jak zrobic wstawke asemblerowa w C. Uzywam Turbo C (tego z muzeum:-)). Nieznam sie ale moj (jak sie okazalo zaburzony) instynkt podpowiedzial mi ze asm{i tu cos tam w asm}, ale wyskakuja bledy ze to jest niedozwolone. Wiem, ze wiekszosc z was wie jak to zrobic, jesli by ktos byl tak mily i podzielil sie swa wiedza to bylbym bardzo szczesliwy. Jezeli jakas sila wyzsza uwaza, ze post takowy niepowinien istniec to blagam o jego usuniecie.

0

Ja bym zrobił tak w Turbo C:

__asm
{
mov ah,2
mov dl,7
int 21h
}

Ale bardzo prawdopodobne, że to kompletna herezja, bo nie mam pod ręką Turbo C i łba se za to uciąć nie dam :p

0

Dziekuje za zainteresowanie. Lecz to nie jest to.

0

int main()
{
asm <-- i tutaj cytuje: "In-line assembly not allowed in function main"
{
mov ah, 5
...
int 100h
}
return 0;
}

Pisze, ze w main, jak umieszcze w innej to wyskakuje cos podobnego tylko, ze w odpowiedniej funkcji.

0

Może masz w kompilatorze wyłączone wstawki asemblera?

<font color="blue">[</span><font color="red">ADD</span><font color="blue">]</span>
Faktycznie, Flabra, to już było i to kilka razy... skleroza nie choroba, nie boli:)

0

Gdyby tak bylo to by tego postu nie bylo. To byla pierwsz rzecz jaka sprawdzalem.

0

Jesli wpiszesz...

asm mov ax,3

...to bedzie działało.
Jesli wpiszesz...

asm{
  mov ax,3
}

...to też będzie działało
Jesli zaś wpiszesz...

asm
{
  mov ax,3
}

...to nie będzie działało ( 1. warning: 'unknown assembler instruction' i 2. error: 'undefined symbol'), dlatego, że w assemblerze linii nie kończy się średnikiem, więc kompilator mysli, że:
ad 1. po asm brak jakiejkolwiek instrukcji assemblera.
ad 2. blok {} jest normalnym blokiem w którym uzywa sie normalnego c++.

Gdy uzywasz słówka kluczowego asm, to po nim musi byc albo początek bloku {}, albo pojedyncza instrukcja.

0

No chyba sie potne, tego tez probowalem i dalej to samo. Moze to wina muzealnej wersji.

0

To po prostu wrzuć tu ten kod i napisz, gdzie wyskakuje bład.

// Nie sądzę, że to wina kompilatora.
// Ja np. najchętniej pracuję na tc 1.01,
// (to tez muzeum) mimo że mam kilka (5)
// innych kompilatorów c++.

0

Najprostszy przyklad juz podalem, wraz z bledem jaki mi wyskakuje, ale napisze jeszcze raz:

int main()
{
  asm{ mov ax, 05h
    int 33h  
  }
  return 0;
}

Mesage:

Compiling D:\TC\NONAME.C:
Error D:\TC\NONAME.C 3: In-line assembly not allowed in function main
Error D:\TC\NONAME.C 3: Expression syntax in function main
Error D:\TC\NONAME.C 5: Declaration syntax error
Error D:\TC\NONAME.C 6: Declaration syntax error

0

Error D:\TC\NONAME.C 3: In-line assembly not allowed in function main

To jest bląd, reszta zniknie, gdy to usuniesz. Co to znaczy? Albo nie można uzyc assemblera w funkcji main, albo w ogóle nie mozna uzyc assemblera, a błąd ten wystapił w funkcji main. Pierwszy przypadek: assembler dozwolony jest wszędzie indziej. Drugi przypadek, to faktycznie kompilator z epoki kamienia łupanego.

// Do postu poniżej
// Przejrzałem sobie opcje w trójeczce i czwóreczce,
// ale nie znalazłem nic, co może pomóc, więc mogę
// jedynie zaprosić cię do sćiągnięcia sobie tej jedynki.
// (sam kompilator potrafi zawiesić system [cygaro] )
// http://members.chello.pl/l.szczesniak/tcpp.zip

// once again. Zapomniałem napsać, że to turbo jedynka, ale c++.

0

Ja jestem za opcja 2, bo sprawdzalem w innych funkcjach i to samo, a wersja jest wyzsz od wspomnianego przez Ciebie 1... bo to 2 i cos tam po kropce jest, i ja juz nic z tego niekumam.

0

No nareszcie, juz wiem co bylo zle. W pakiecie, ktory sciagnalem z Borlanda nie bylo TASM-a, teraz tylko znalezc odpowiednia wersje i mam nadzieje, ze bedzie wszystko gralo.

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