kleines String-Problem



  • Hallo,
    Ich hab wiedereinmal ein kleines Problem, diesmal mit Strings. Wahrscheinlich ist die Lösung eh ganz einfach nur ich steh wiedermal auf der Leitung.
    Mein Problem:
    Ich habe einen String aus beliebig vielen Zeichen, aus diesem String soll immer ein Zeichen in die 1-Byte grosse Variable Puffer geladen werden. mit

    mov ah,[String+1]
    mov Puffer,ah
    mov ah,[String+2]
    mov Puffer,ah
    

    geht´s ja, nur möchte ich das dynamisch machen, so auf die Art
    mov ah,[String+Zahl]
    Zahl ist eine Variable die immer 1 raufzählt.

    mfg und thx im Voraus
    Noob



  • Da haette ich 2 Vorschlaege:
    (dieser code ist kuerzer, aber langsamer, als Vorschlag 2)

    cld
    mov si,offset String
    lodsb ;das Zeichen von String+0
    mov [Puffer],al
    lodsb ;das Zeichen von String+1
    mov [puffer],al
    add si,0006h
    lodsb ;das Zeichen von String+8
    sub si,0008h
    ;und wieder bei 0...
    ;...
    ;so etwas geht auch:
    mov si,offset String+10h
    ;und so etwas natuerlich ebenfalls:
    mov si,offset String
    mov bx,0002h
    add si,bx ;si zeigt zu String+2
    ;...
    

    Hier kannst du eine beliebige 16Bit zahl als Index zu si addieren, oder subtrahieren.

    Fuer den Anfang vielleicht etwas uebersichtlicher ist das hier:
    (dieser code ist laenger, aber schneller als Beispiel 1)

    mov bx,0001h
    mov al,[String+bx] ;String+1
    mov bx,0006h
    mov al,[String+bx] ;String+6
    ;usw...
    

    [ Dieser Beitrag wurde am 28.07.2002 um 17:17 Uhr von Nobuo T editiert. ]



  • Grosses thx, die zweite Variante hätte mir auch einfallen können, hätte.
    Alle 2 Varianten funktionieren super.

    thx und mfg
    Noob



  • dafuer ist mir noch ein Fehler aufgefallen:
    *
    lodsb ;das Zeichen von String+8
    sub si,0009h ;muss natuerlich -9 sein...
    ;und wieder bei 0...
    *


Anmelden zum Antworten