Procesor 8086 wczytanie liczb

0

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? :)

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:
  1. liczba = 0
  2. Wyliczasz wartość wczytanej cyfry (cyfra - '0')
  3. Mnożysz aktualną liczbę przez 10
  4. 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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1