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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Peter B. (funkheld)


Bewertung
-1 lesenswert
nicht 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?
void testasm()
{
   asm more: ;
   asm mov ax,bx ;
   asm jns  more ;   
}

int main ()
{
    testasm();
    while( !kbhit() ){ }               
}


: Bearbeitet durch User
von Nils (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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

#include <stdio.h>

int b;

void testasm(int a)
{  
   asm mov ax,a ;
   asm add ax,255 ;
   asm mov b,ax ;   
}

int main ()
{
    int a;
    
    a=1000;
    testasm(a);
    printf("%d", b);
    while( !kbhit() ){ }               
}

: Bearbeitet durch User
von Thomas Z. (usbman)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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:

Bewertung
0 lesenswert
nicht lesenswert
Manchmal fühle ich mich wie ein Kaiser.

TCC testasm.c

Einmal ohne TASM im Ordner.
Einmal mit TASM im Ordner.

#include <stdio.h>

int b;

void testasm(int a)
{  
   asm mov ax,a ;
   asm add ax,255 ;
   asm mov b,ax ;   
}

int main ()
{
    int a;
    
    a=1000;
    testasm(a);
    printf("%d", b);
    while( !kbhit() ){ }               
}

von Peter B. (funkheld)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.