[Assembler] Mein erstes Programm

Azi

Erfahrenes Mitglied
Ich weiß nicht, woran es liegt... Mein Programm soll folgendes machen:
Zuerst soll eine Zahl eingegeben werden. Danach werden so viele Zeichen eingegeben, wie die eingegebene Zahl sagt. Danach werden die Zeichen in umgekehrter Reihenfolge ausgegeben.

Code:
.model small
.stack 256
.Code
neu:
          mov ah,08h   ;lesen
          int 21h

          cmp al,30h   ;wenn keine Zahl, wiederholen
          jb neu
          cmp al,39h
          ja neu
          mov dl,al    ;Ausgabe
          mov ah,02h
          int 21h
          mov bh,0     ;bh=0
          mov bl,dl    ;bl=eingegebene zahl

eingabe:
          mov ah,08h   ;Befehl zum Zeichenlesen eingeben
          int 21h      ;Befehl ausführen
          push ax      ;AX sichern
          add bh,1     ;bh um eins erhöhen
          cmp bl,bh    ;wenn bl und bh nicht gleich groß sind
          jne eingabe  ;springe zu eingabe

          mov bh,0     ;bh wieder 0
ausgabe:
          pop dx       ;Letztes Zeichen nach DX
          mov ah,02h   ;Befehl zur Ausgabe von DL eingeben
          int 21h      ;Befehl ausführen
          add bh,1     ;bh um eins erhöhen
          cmp bl,bh    ;wenn bl und bh nicht gleich groß sind
          jne ausgabe  ;springe zu ausgabe


          mov ah,4CH   ;Befehl zum Beenden eingeben
          int 21h      ;Befehl ausführen
END
 
Hallo,

im BL-Register steht ja noch der ASCII-Code von der Zahl.
Damit die Anzahl der Durchläufe korrekt wird, mußt Du von diesem Wert
noch 30h abziehen.


Gruß
Flo
 
Und wie geht das? Ich kenne den Befehl vom Abziehen nicht. Ich würde auf SUB tippen, stimmt das? Und könntest du mir den entsprechenden Code nennen uned wo ich ihn einfügen muss? Also ungefähr so:
Code:
...
          int 21h
          mov bh,0     ;bh=0
          mov bl,dl    ;bl=eingegebene zahl
          sub bl,30h   ;Aus ASCII-Wert Zahl erzeugen

eingabe:
          mov ah,08h   ;Befehl zum Zeichenlesen eingeben
...
 
Hallo,

eigentlich kann ich gar nicht mehr viel sagen. Der Befehl zum Abziehen heißt tatsächlich SUB, und du mußt BL eben vor der Eingabeschleife ändern.
So wie Du das gemacht hast, paßt es also:

Azi hat gesagt.:
Code:
  ...
            int 21h
            mov bh,0     ;bh=0
            mov bl,dl    ;bl=eingegebene zahl
            sub bl,30h   ;Aus ASCII-Wert Zahl erzeugen
  
  eingabe:
            mov ah,08h   ;Befehl zum Zeichenlesen eingeben
  ...

Gruß
Flo
 

Neue Beiträge

Zurück