Witam, pracuje w turbo assemblerze nad programem pod procesor 8086 i potrzebuje jakiegoś sposobu na wczytanie liczby (cyfry od 0-9) (maksymalnie liczba 16 bitowa), w przeciwnym wypadku ma wyświetlać błąd i przerwać program. Jakieś wskazówki, gotowce? :)
0
1
Musisz to po prostu zaklepać ręcznie. Opcje są dwie:
- czytanie po znaku
- czytanie całego ciągu
Ale to bez większego znaczenia bo tak czy siak musisz zaklepać logikę przeliczania wczytanych znaków ascii na liczby, tzn:
- liczba = 0
- Wyliczasz wartość wczytanej cyfry (cyfra - '0')
- Mnożysz aktualną liczbę przez 10
- Dodajesz do aktualnej liczby tą nową wyliczoną cyfrę
Powtarzasz 1-3 aż wczytasz calą liczbę.
Przykładowo dla liczby 123 będziesz miał
- liczba = 0
- cyfra '1', wartość '1'-'0' = 1, liczba = 0*10+1 = 1
- cyfra '2', wartość '2'-'0' = 2, liczba = 1*10+2 = 12
- cyfra '3', wartość '3'-'0' = 3, liczba = 12*10+3 = 123
0
Nie bardzo rozumiem o co chodzi z 1. Wyliczasz wartość wczytanej cyfry (cyfra - '0') i dlaczego w 3 dalej jest 1* ?
0
Odświeżam, nadal nie wiem, jak rozwiązać problem :/
1
Ale czego teraz nie rozumiesz? Przykład jest napisany poprawnie.
Jakoś tak to będzie (nie testowane, pisane z palca):
xor ax,ax ;zerowanie wyniku
nextSymbol:
mov dx,ax ;aktualny wynik
xor ax,ax
mov al,ds:[wejscie] ; tu sobie jakoś musisz iterowac po kolejnych symbolach z wejścia
cmp al,0
je end
sub al,'0' ;wyznaczenie cyfry
mov bl,10
mul bl ;wynik mnożenia al*bl w ax
add ax,dx
jmp nextSymbol
end:
0
Można prosić o przedstawienie jakiegoś sposobu na iterowanie po wejściu, liczba którą podamy ma być maksymalnie 16 bitowa.