Asembler drobne poprawki

0

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
0

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 ort! moj dziala do liczby 65539, przekroczenie rejestru pewnie gdzies mam, a z asemblera jestem totalnie ciemny

Sam napisałeś ten program, czy nie? Bo nie potrafię już dojść...
No i w ogóle pytanie zasadnicze, na zaliczenie jakiego przedmiotu to ma byc zrobione, bo ja przerabiałem assemblera w technikum i na studiach i wszystko oparte było na gotowych układach mikroprocesorowych stricte czysto elektronicznych

0

Nie chce mi sie brnąć w cały ten kod .. ale pierwsze co mi do głowy przychodzi to zmiana

 mov bx,10
 mul bx

na instrukcje 32 bitowe :

 mov ebx, 10
  mul ebx

w ten sposób wynik mnożenia nie jest już w rejestrach dx:ax /32-bitach tylko w edx:eax /64-bitach.

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