Forum: PC-Programmierung Turbo C 2 mit ASM Inline mit Schleife ?


von Peter B. (funkheld)


Lesenswert?

Hallo, guten Tag.

In Turbo C 2 kann man ja ASM verwenden wenn man es so macht: "asm mov 
ax,bx".
Dann mit TCC -B testasm.c compiliert. Natürlich muss sich der TASM im 
Ordner befinden.

Wie macht man denn bitte eine Schleife?
Es kommt eine Fehlermeldung : undefenid label 'more'
Wie kann man auch bitte Variable übergeben?
1
void testasm()
2
{
3
   asm more: ;
4
   asm mov ax,bx ;
5
   asm jns  more ;   
6
}
7
8
int main ()
9
{
10
    testasm();
11
    while( !kbhit() ){ }               
12
}

: Bearbeitet durch User
von Nils (Gast)


Lesenswert?

Ist lange her, aber du musst normale C Label, wie sie auch für goto 
nutzbar sind verwenden.

void testasm()
{
  more:
  {
     asm mov ax,bx ;
     asm jns  more ;
  }
}


Blöde Frage vielleicht, aber warum schreibst Du die Funktionen nicht 
gleich in TASM. Dann hast Du die ganzen Einschränkungen von Inline 
Assembler nicht.

von cppbert (Gast)


Lesenswert?

Peter B. schrieb:
> Natürlich muss sich der TASM im
> Ordner befinden.

muss er das wirklich - inline-assembler hat doch eine leicht andere 
syntax, was soll der TASM damit anfangen?

von Thomas Z. (usbman)


Lesenswert?

und wieder kein vollständiges Programm... Das Forum ist sicher nicht 
dazu da dir jede Kleinigkeit in Häppchen zu zeigen. Lad dir jetzt 
endlich mal die TC Handbücher von bitsavers.org. Dort ist alles 
ausführlich beschrieben. Diesen Hinweis hast du übrigens schon vor 
Wochen in einem der anderen Threads bekommen.

von Peter B. (funkheld)


Lesenswert?

Ohne TASM.EXE passierte nichts.
--------------------
muss er das wirklich - inline-assembler hat doch eine leicht andere
syntax, was soll der TASM damit anfangen?
--------------------

ganz unten der hinweis:
https://stackoverflow.com/questions/47580731/how-to-write-inline-assembly-with-turbo-c-2-01

So funktioniert es: tcc testasm.c , der TASM wird dann vom TCC 
aktiviert.
Print ist dann 1255
1
#include <stdio.h>
2
3
int b;
4
5
void testasm(int a)
6
{  
7
   asm mov ax,a ;
8
   asm add ax,255 ;
9
   asm mov b,ax ;   
10
}
11
12
int main ()
13
{
14
    int a;
15
    
16
    a=1000;
17
    testasm(a);
18
    printf("%d", b);
19
    while( !kbhit() ){ }               
20
}

: Bearbeitet durch User
von Thomas Z. (usbman)


Lesenswert?

Peter B. schrieb:
> So funktioniert es: tcc testasm.c , der TASM wird dann vom TCC aktiviert

Das ist (mal wieder) kompletter Unsinn was du hier schreibst.
tcc braucht in keinem Fall tasm um Inline asm übersetzen zu können.
tasm ist nur notwendig wenn du dein c Programm mit -B zuerst in ein 
Assembler Programm ausgibst.

Beitrag #6221947 wurde vom Autor gelöscht.
von Peter B. (funkheld)


Lesenswert?

-----------------------
Das ist (mal wieder) kompletter Unsinn was du hier schreibst.
----------------------
Du schreibst immer so nette Sätze....
Macht wohl diese Corona-Zeit. Entspann dich mal...oder man sagt auch : 
Komm mal wieder auf diese Welt.

Man kann auch so schreiben :
----------------------------------------------------------------------
Den TASM brauchts du nicht für Inline, nur wenn du das -B benutzt.
Ich wünsche dir noch eine schöne Zeit.
----------------------------------------------------------------------

: Bearbeitet durch User
von cppbert (Gast)


Lesenswert?

Peter B. schrieb:
> Du schreibst immer so nette Sätze....
> Macht wohl diese Corona-Zeit. Entspann dich mal...oder man sagt auch :
> Komm mal wieder auf diese Welt.

Du provozierst so ein Verhalten in dem du nur Stückchenweise Infos raus 
gibts, ewig (in anderen Post) nicht direkt antwortest und dann noch 
solche Sachen wie mit dem Inline-Assembler postest

der TASM ist ein unabhängiges Produkt (wo hattest du den her?) und die 
inline-asm Syntax wird von TASM nicht verstanden weil die C-orientiert 
ist

bei mir baut dein Beispiel ohne TASM

von cppbert (Gast)


Lesenswert?

cppbert schrieb:
> der TASM ist ein unabhängiges Produkt (wo hattest du den her?) und die
> inline-asm Syntax wird von TASM nicht verstanden weil die C-orientiert
> ist

ich hab Borland C++ V2.0

der TASM "IST" dabei aber ich kann alle Tasm Exen verschieben und es 
geht trotzdem, die Frage ist wiso du bei dir den TASM reinkopieren 
musstes?

von Peter B. (funkheld)


Angehängte Dateien:

Lesenswert?

Manchmal fühle ich mich wie ein Kaiser.

TCC testasm.c

Einmal ohne TASM im Ordner.
Einmal mit TASM im Ordner.
1
#include <stdio.h>
2
3
int b;
4
5
void testasm(int a)
6
{  
7
   asm mov ax,a ;
8
   asm add ax,255 ;
9
   asm mov b,ax ;   
10
}
11
12
int main ()
13
{
14
    int a;
15
    
16
    a=1000;
17
    testasm(a);
18
    printf("%d", b);
19
    while( !kbhit() ){ }               
20
}

von Peter B. (funkheld)


Lesenswert?

Ich habe kein Turbo 2 C++ ich habe den Turbo C 2.

---------------------------------------------
> der TASM ist ein unabhängiges Produkt (wo hattest du den her?) und die
> inline-asm Syntax wird von TASM nicht verstanden weil die C-orientiert
> ist
---------------------------------------------

Der TASM ist mit dabei bei Turbo C 2
Der TASM versteht nicht die Syntax mit diesem {} sondern nur mit :
asm mov ax,bx ; siehe weiter oben mein Programm.
.........
.........

: Bearbeitet durch User
von cppbert (Gast)


Lesenswert?

Peter B. schrieb:
> Ich habe kein Turbo 2 C++ ich habe den Turbo C 2.
>
> ---------------------------------------------
>> der TASM ist ein unabhängiges Produkt (wo hattest du den her?) und die
>> inline-asm Syntax wird von TASM nicht verstanden weil die C-orientiert
>> ist
> ---------------------------------------------
>
> Der TASM ist mit dabei bei Turbo C 2

Der unterschied zwischen Borland und Turbo ist nur die Menge an Libs und 
supportete Systeme, die Tasm version ist bestimmt die gleiche

> Der TASM versteht nicht die Syntax mit diesem {} sondern nur mit :

Klar, aber warum soll er die inline syntax können? Und nochmal: wenn er 
dabei ist, warum musstest du ihn "hineinkopieren"?

Und welches interface soll denn der kompiler da bedienen, es gibt ja 
nicht wie beim linker die obj dateien, höchsten du kompilierst über den 
Weg mit assembler listings mit -B oder als option in der IDE

von cppbert (Gast)


Lesenswert?

Peter B. schrieb:
> ganz unten der hinweis:
> 
https://stackoverflow.com/questions/47580731/how-to-write-inline-assembly-with-turbo-c-2-01

Ich dachte du kannst kein englisch?

Mit dem turbo c 2 und dem tasm scheinst du recht zu haben, sehr 
verwirrend, mit dem borland c 2 geht es

von Peter B. (funkheld)


Lesenswert?

Ich schiebe das Englisch in ein Übersetzungsprogramm.
Kommen dann lustige Sachen raus und sehe aber einige Dinge die man dann 
hinbiegen kann.

von Peter B. (funkheld)


Lesenswert?

--------------------------------------------
warum musstest du ihn "hineinkopieren"?
--------------------------------------------
Weil er auf eine andere Disk liegt von Turbo c 2 als Erweiterung.

: Bearbeitet durch User
von Peter B. (funkheld)


Lesenswert?

------------------------
Mit dem turbo c 2 und dem tasm scheinst du recht zu haben, sehr
verwirrend, mit dem borland c 2 geht es
------------------------

So wie ich euch von hier kenne , spielt ihr damit nicht mehr.
Alles höher...alles schneller.

Wenn du weiterhin so skeptisch bist , reicht dein Leben nicht aus
um auch noch die anderen schönen Sachen kennen zu lernen.

: Bearbeitet durch User
von cppbert (Gast)


Lesenswert?

Peter B. schrieb:
> Wenn du weiterhin so skeptisch bist , reicht dein Leben nicht aus
> um auch noch die anderen schönen Sachen kennen zu lernen.

Es war doch nur ein Buchstabe anders :)
bcc gegen tcc, sogar die Version hat gestimmt

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.