N
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