Hallo Ich wüsste gerne, wie man ein Programm erstellt, das im Datenbereich ein Array der Fakultät der Zahlen 0...8 erzeugt. (mit Eingabe und Ausgabe (Mehrfachnutzung) und es soll erst beim Eintippen eine Buchstabe (Bsp. Q) Abbruch geben) Danke schön MfG, Elmo
Hi Start: Daten einlesen (wenn Q dann Quit) In einer Schleife n! berechnen Ausgeben goto Start Da 8! noch in ein 2-Byte-INT passt sollte das mit den 16-Bit Registern des 8086 kein Problem sein. Matthias
Hallo, danke für die Antwort, die mir leider nicht weiter helfen kann, da ich noch Probleme der Ein- und Ausgabe habe. Ich bin eigentlich ganz neu in diesem Gebiet von Assembler-Programmierung und ich kenne mich noch nicht so toll aus. >Start: > Daten einlesen (wenn Q dann Quit) > In einer Schleife n! berechnen > Ausgeben >goto Start Es ist mir ja klar, da zuerst die Daten eingelesen werden müssen, aber wie soll ich dann das machen? meine ersten Überlegungen sind, dass ich eine Zahl (0...8) Bsp.8 nach AX lade und und zuerst mit dem Inhalt 1 von einem anderen Register (BX) multipliziere. AX wird um 1 dekrementiert und wieder mit dem Inhalt vom BX (jetzt 8) multipliziert und das soll solang gemacht werden, bis mein Zähler (zähler=8) den Wert 1 hat erreicht hat. aber ich weisse trotzdem nicht, wie ich das mit der Eingabe und Ausgabe mache. mov ax,8 mov bx,1 M1: mul ax dec ax cmp ax,1 jg M1: je M2: M2: mov ah,02h mov dx,bx add dx,?????? ;hier ist auch ein Problem, da ich nicht weiss, was ich zu dx (addieren (oder davon subtr. ) damit ich den Wert 40320 auf auf dem Bildschirm bekommen kann !!? MfG, Elmo
Hallo Elmo, das kommt mir etwas bekannt vor. Kann es sein, daß Du noch unter MS-DOS arbeitest? Du willst jetzt mit mov ah,02h mov dx,bx add dx,?????? eine Systemfunktion (Biosfunktion) aufrufen, um eine ASCII-Ausgabe auf deinem Bildschirm zu erzeugen. Versuch mal ein altes PC-Intern 1.0 oder 2.0 Buch aufzutreiben (Bücherei?). Dort sind alle Betriebssystem- und Biosfunktionen ausführlich dargestellt. Grüße Oliver
Hallo, das Programm läuft jetzt bei mir, aber ich weiss nicht, ob es jetzt das richtige Programm ist, was eigentlich von mir verlangt wurde ... es kann sein, dass ich die Aufgabestellung falsch verstanden habe. Das Programm soll im "DATENBEREICH" ein "ARRAY" der Fakultät der Zahlen 0...8 erzeugen. ich habe's jetzt so gemacht, dass wenn ich eine Ziffer zwischen 0 und 8 eintippe bekomme ich gleich die Fakultät raus !!! Ist das jetzt das richtige was mit ARRAY gemeint wurde ??? MfG
Hi! Nö, das war wohl etwas anders gemeint, aber Du kannst Dein Programm bestimmt leicht entsprechend erweitern. Die wollen, daß Du erstmal 8 Bytes Speicher reservierst (im .DATA Segment mit .db) und dann am Programmstart die Fakultäten von 1, 2, ..., 8 berechnest und nacheinander in diesen Speicherbereich schreibst. Dann gehst Du in eine neue Schleife: Auf Zahlenengabe warten, Ascii - Wert umwandeln in Zahl 0-7, entsprechenden Fakultäts - Wert aus dem Speicher holen und ausgeben. Vorher prüfen, ob statt einer Zahl "q" eingegeben wurde. Der Ansatz von Matthias ist also nicht ganz richtig. Ich würde Dir das Buch "Assembler Programmierung" aus dem Franzis´ Verlag empfehlen, damit habe ich es recht schnell gelernt...
Hallo, ich habe jetzt ein Teil des Programms geschrieben, aber ohne Ein- und Ausgabe, womit ich jetzt (in diesem Fall) Probleme habe und weiss nicht, wie es weiter geht :-( !!! ;******************************************************************** ; Definition der Konstanten Lf equ 0Ah Cr equ 0Dh ; Code Segment definieren _TEXT segment assume CS:_TEXT, DS:_TEXT, SS:_TEXT org 100h ;COM-Programm beginnt bei Offset 100h ; Programmbereich Start: mov BX, 0 ; Zaehler für Zeiger auf Erg mov AX, 1 ; Fakultaet für 0 wird vorgegeben mov DI, 8 ; Zaehler für Schleife mov CX, 0 ; Zaehler für Multiplikation lea SI, Erg ; Zeiger auf Speicherstelle Erg L1: mov [SI+BX], AX ;Akkuinhalt wird in Speicher abgelegt dec DI ;DI wird um 1 verringert jz Ende ;Wenn Schleife 8mal durchlaufen->Ende add BX, 2 ; Zeigerdisplacement wird um 2 erhöht inc CX ; Erhhung CX um 1 mul CX ; AX * CX = AX jmp L1 ; Unbedingter Sprung nach L1 Ende: mov al, 0 ; Fehlercode 0 mov ah, 4Ch ; Funktion: Programm verlassen int 21h ; Schnittstelle zu DOS ;******************************************************************** ; Datenbereich Erg dW 8 DUP(?) _TEXT ends ; Codesegment schlieáen end Start ; Ende des Quellprogramms ;******************************************************************** Gruss
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.