Witam, mam projekt z asemblera (przeliczanie liczb z systemu 10 na dowolny inny z przedzialu 2 - 16) zrobilem, teoretycznie chodzi, tylko....osoba u ktorej robie projekt chce zeby bylo dla wiekszych liczb bo na razie moj dziala do liczby 65539, przekroczenie rejestru pewnie gdzies mam, a z asemblera jestem totalnie ciemny prosilbym bym zeby ktos pomogl to poprawic...drugi problem to obsluga bledow, wykladowca nie chce zeby dalo sie wprowadzac liczby powyzej ograniczenia (czyli jak sien ie uda poprawic tego z tym rejestrem to zeby tylko zczytywal 65539, u mnie niby wyswietla blad, ale moge wpisywac kupe liczb dopoki nie wcisne entera to bedzie wczytywal, jemu chodzi oto zeby Od razu po przekroczeniu wywalil blad, czyli znak po znaku probowalem to robic ale wrzucal smieci do tablicy...bede bardzo wdzieczny za wszelka pomoc, wklejam kod (kompilator tasm)...
.model tiny
.stack 100h
.data
tekst1 db 'Podaj liczbe w systemie 10 ',10,13,'$'
tekst2 db 'Szukana liczba to: ',10,13,'$'
tekst3 db 'Maksymalna liczba jaka mozesz podac to 65539 dziesietnie',10,13,'$'
tekst4 db 'Podaj na jaki system chcesz zamienic (od 2 do 16)',10,13,'$'
tekst5 db 'Podano zla dana',10,13,'$'
en db 10,13,'$'
tablica db 100,?,102 dup('$')
tablica2 db 50,?,52 dup('$')
liczba dd 0
licznik dw 0
dzielnik dd 1
.code
start:
.486
mov ax,@data
mov ds,ax
lea dx,tekst3
mov ah,09h
int 21h
lea dx,en
mov ah,09h
int 21h
lea dx,tekst1
mov ah,09h
int 21h
lea dx,tablica
mov ah,0ah
int 21h
mov di,2
mov cl,tablica[1]
xor ch,ch
etykieta1:
mov eax,liczba
mov bx,10
mul bx
mov liczba,eax
mov bl, tablica[di]
sub bl,'0'
xor bh,bh
add liczba,ebx
inc di
loop etykieta1
poczatek:
cmp tablica[2],'0'
jb blad2
cmp tablica[2],'9'
ja blad2
cmp tablica[3],'9'
ja blad2
cmp tablica[4],'9'
ja blad2
cmp tablica[5],'9'
ja blad2
cmp tablica[6],'9'
ja blad2
cmp tablica[7],'0'
jnb blad2
cmp tablica[8],'0'
jnb blad2
lea dx,en
mov ah,09h
int 21h
lea dx,tekst4
mov ah,09h
int 21h
lea dx,tablica2
mov ah,0ah
int 21h
cmp tablica2[2],'1'
jb blad
cmp tablica2[2],'9'
ja blad
cmp tablica2[3],'7'
jnb blad
cmp tablica2[4],'0'
jnb blad
cmp tablica2[3],'1'
je inna
cmp tablica2[3],'2'
je inna
cmp tablica2[3],'3'
je inna
cmp tablica2[3],'4'
je inna
cmp tablica2[3],'5'
je inna
cmp tablica2[3],'6'
je inna
mov bl,tablica2[2]
sub bl,'0'
xor bh,bh
mov dzielnik,ebx
jakasetykieta:
mov eax,liczba
petla:
mov edx,0
div dzielnik
push dx
inc licznik
cmp ax,0
jne petla
lea dx,en
mov ah,09h
int 21h
lea dx,tekst2
mov ah,09h
int 21h
mov cx,licznik
wypisz:
pop dx
cmp dx,11
je etyk11
cmp dx,10
je etyk10
cmp dx,12
je etyk12
cmp dx,13
je etyk13
cmp dx,14
je etyk14
cmp dx,15
je etyk15
add dx,'0'
mov ah,02h
int 21h
jmp koniec1
etyk10:
mov dx,'A'
mov ah,02h
int 21h
jmp koniec1
etyk11:
mov dx,'B'
mov ah,02h
int 21h
jmp koniec1
etyk12:
mov dx,'C'
mov ah,02h
int 21h
jmp koniec1
etyk13:
mov dx,'D'
mov ah,02h
int 21h
jmp koniec1
etyk14:
mov dx,'E'
mov ah,02h
int 21h
jmp koniec1
etyk15:
mov dx,'F'
mov ah,02h
int 21h
jmp koniec1
koniec1:
loop wypisz
jmp koniec
inna:
mov bl,tablica2[3]
sub bl,'0'
xor bh,bh
add ebx,10
mov dzielnik,ebx
jmp jakasetykieta
blad:
lea dx,en
mov ah,09h
int 21h
lea dx,tekst5
mov ah,09h
int 21h
jmp poczatek
jmp koniec
blad2:
lea dx,en
mov ah,09h
int 21h
lea dx,tekst5
mov ah,09h
int 21h
jmp koniec
koniec:
mov ah,4ch
int 21h
end start
end