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