Wie lese ich eine ganze zahlenfolge ein



  • ja wie lese ich in assembler (intel syntax) eine ganze zahlenfolge ein?

    denn
    MOV AH, 01H ;\
    INT 21H ; \
    MOV AH, 0H ; |- Eine Zahl Einlesen
    SUB AL, 30H ; /
    MOV ZAHL, AL ;/
    (was ich geproggt hab)
    liest nur 1ne zahl ein



  • Hier dazu ein kleiner Beispielcode (TASM) - liesst 32Bit lange ganzzahlen ein.

    [code]
    IDEAL
    P386
    MODEL TINY

    DATASEG

    TempStr db 06h,00h
    db 06h dup (?) ;in diese Array wird der Input von der Tastatur eingelesen. Der erste Byte gibt an, wieviele Zeichen maximal in diese Array geschrieben werden koennen. Der 2.Byte wird vom Interrupt gesetzt und enthaelt die Anzahl Zeichen, die tatsaechlich eingegeben wurden.

    CODESEG
    Org 100h
    Start:

    mov dx,offset TempStr
    mov ah,0Ah
    int 21h ;string von Tastatur einlesen. Eingabe kann mit Enter beedet werden.
    xor cx,cx
    mov cl,[byte ptr ds:TempStr+01h] ;Anzahl eingegebener Zeichen
    or cx,cx
    jz short @@ExitTransform0 ;wenn 0 Zeichen eingegeben wurden, gleich raus.
    mov si,offset TempStr+02h ;ab hier steht der vom Keyboard gelesene String.
    ;erste Zahl finden (0-9)
    @@Find1stNum:
    lodsb
    cmp al,39h
    jbe short @@1stFound
    @@FindNext0:
    loop @@Find1stNum
    jmp short @@ExitTransform0 ;der String enthaelt keine dec. Ziffern.
    @@1stFound:
    cmp al,30h
    jb short @@FindNext0
    push si ;si=Offset der ersten Ziffer +1
    ;pruefen, wieviele Ziffern hintereinander eingegeben wurden...
    @@FindEnd0:
    lodsb
    cmp al,39h
    ja short @@EndFound0
    cmp al,30h
    jb short @@EndFound0
    loop @@FindEnd0
    @@EndFound0:
    pop bx ;bx=offset 1. Ziffer +1
    mov cx,si ;si=offset letzte Ziffer +1
    sub cx,bx ;(offset 1.Ziffer)-(offset letzte Ziffer)=Laenge des Strings
    mov si,bx
    dec si ;si=offset 1. Ziffer.
    xor bx,bx
    xor ax,ax
    mov di,000Ah
    ;Ziffernfolge umwandeln...
    @@TransformLoop0:
    mul di
    mov bx,ax
    xor ax,ax
    lodsb
    sub al,30h
    add ax,bx
    loop @@TransformLoop0
    ;Eingelesene Zahl ist nun in ax:dx.
    @@ExitTransform0:
    ;Es konnte nichts eingelesen werden, wenn zu diesem Label gesprungen wurde...
    ret

    End Start

    so. Hoffe das hilft dir weiter 😉


Anmelden zum Antworten