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.