Wczytanie jednej liczby 5 cyfrowej (jako ciągu znaków), sprawdzenie czy jest to rzeczywiście liczba (czy nie podano innych niż cyfry znaków), konwersja ciągu znaków na liczbę całkowitą oraz sprawdzenie czy liczba ta mieści się w zakresie liczb 16-to bitowych.
.model small
.stack 100h
.data
t1 db 'Podaj liczbe(potwierdz ESC) : $'
t2 db 'Liczba to :'
crlf db 0dh,0ah,'$'
.code
mov ax,@data ;wpisanie zmiennych data do pamieci
mov ds,ax ;wpisanie zmiennych data do pamieci
mov dx,offset t1 ;przygotuj napis
mov ah,09h
int 21h
mov cx,0 ;wyzerowanie licznika stosu
wczytaj:
mov ah,01h
int 21h
cmp al,39
jg koniec
cmp al,30
jl koniec
cmp al,27
je dalej
sub ax,0
push ax
add cx,1
jmp wczytaj
dalej:
mov dx,offset crlf ;przygotwanie offsetu
mov ah,09h ;czyszczenie
int 21h ;ekranu (wyswietlenie niczego:D?)
mov dx,offset t2 ;przygotowanie tekstu
mov ah,09h ;wyswietlenie
int 21h ;na ekranie
mov bx,0 ;wyzerowanie bx
liczba:
cmp cx,4
je mnozenie10
cmp cx,3
je mnozenie100
cmp cx,2
je mnozenie1000
cmp cx,1
je mnozenie10000
pop ax ;pobranie ze stosu
add bx,ax ;dodanie do bx tego co w akumulatorze
loop liczba ;petla, bezwarunkowa, ktora zmniejsza licznik cx (wykonuje dec i sprawdzenie dopoki=0).
mnozenie10:
pop ax ;pobranie ze stosu
mov dx,10
mul dx ;pomnozenie ax razy mnoznik
add bx,ax ;dodanie do bx tego co w akumulatorze
dec cx ;zmniejszenie cx, aby petla krecila sie tylko i rowno 5 razy.
jmp liczba
mnozenie100:
pop ax ;pobranie ze stosu
mov dx,100
mul dx ;pomnozenie ax razy mnoznik
add bx,ax ;dodanie do bx tego co w akumulatorze
dec cx ;zmniejszenie cx, aby petla krecila sie tylko i rowno 5 razy.
jmp liczba
mnozenie1000:
pop ax ;pobranie ze stosu
mov dx,1000
mul dx ;pomnozenie ax razy mnoznik
add bx,ax ;dodanie do bx tego co w akumulatorze
dec cx ;zmniejszenie cx, aby petla krecila sie tylko i rowno 5 razy.
jmp liczba
mnozenie10000:
pop ax ;pobranie ze stosu
mov dx,10000
mul dx ;pomnozenie ax razy mnoznik
add bx,ax ;dodanie do bx tego co w akumulatorze
dec cx ;zmniejszenie cx, aby petla krecila sie tylko i rowno 5 razy.
jmp liczba
wyswietl:
mov ax,bx
mov ah,02h
int 21h
mov ah,01h
int 21h
koniec:
mov ah,4ch ;instrukcja
int 21h ;przerwania
end
Warunki przy wczytywaniu sa najprawodpodobniej zle, niestety samemu nie udalo mi sie zlokalizowac bledu. Calosc kompiluje w tasm (taki kompilator przekazal nam prowadzacy). Program kompiluje sie, nawet gdy zakomentuje warunki przy wczytywaniu program nie dziala, wczytuje liczby aczkolwiek na tym konczy sie jego dzialanie. Prosilbym wszelakie glupoty, ktore sa zawarte w tym kodzie - wybaczyc. Prowadzacy po 20 minutowym wstepie teoretycznym, zadał zadanie i to cale moje "doswiadczenie" z procesorem 8086. Wczesniej pracowalismy na procesorze 8080. Z gory dzieki za pomoc, nie bede ukrywal, ze potrzebna jest mi ona dzisiaj, jutro bedize juz "po ptokach".
Z gory wielkie dzieki, pozdrawiam.