Miałem problem z logowaniem więc powtarzam mój post.

Posiadam i przedstawiam poniżej kod programu, który podaną z klawiatury liczbę dziesiętną przelicza na dwojkową i szesnastkową
DEC - BIN - HEX

Mam do wykonania na pierwszym semestrze nauki program, ktory podaną z klawiatury liczbe dziesiętną przelicza na dwojkową i ósemkową.
DEC - BIN - OCT

Niestety nie potrafię się w tak krótkim czasie nauczyć Assemblera i proszę o POMOC. Czy mógłby mi ktoś przesłać zmodyfikowany poniższy kod, tak aby program przeliczał z DEC na dwójkowy i ósemkowy ??? Będę ogromnie wdzięczny bo muszę wykonać zadanie na zaliczenie. Jeszcze raz ogromnie proszę o pomoc i serdecznie pozdrawiam.

ASSUME cs:prog,ds:dane,ss:stoss,es:nothing

stoss segment stack
dw 100h dup(?)
top:
stoss ENDS

dane segment
bufor db 6,?,6 dup(?)   ;1-szy bit max liczba znakow do wszytania dla(f-0A,int 21h)
liczba dw 0
enter_ db 10,13,"$"
l_dec db "podaj liczbe z zakresu 0-65536:",10,13,"$"
l_bin db "binarnie:",10,13,"$"
l_hex db "heksadecymalnie:",10,13,"$"
dane ENDS

prog segment

wielkosc_liczby PROC near
  push dx
  mov bx,liczba
  mov dx,bx
  mov cx,10h
skok:
  shl bx,1h
  jc dalej              ;sprawdza od konca na ktorej pozycji lezy jedynka
  shl dx,1h
loop skok
  inc cx
dalej:
  mov bx,dx
  pop dx
  ret
wielkosc_liczby ENDP

powrot_cr PROC near
  mov ah,09h
  mov dx,offset enter_
  int 21h
  ret
powrot_cr ENDP

start:
  mov ax,dane           ;przypisanie segmentow
  mov ds,ax
  mov ax,stoss
  mov ss,ax
  mov sp,offset top
poczatek:
  mov ah,09h            ;wywolanie komunikatu na ekran
  mov dx,offset l_dec   ;z offsetu l_dec
  int 21h

  mov dx,offset bufor   ;zczytanie z ekranu do bufora
  mov ah,0Ah
  int 21h

  mov ch,0h             ;wyczyszczenie gornej czesci cx
  mov cl,bufor[1]       ;do cx liczba znakow
  mov bx,offset bufor
  add bx,cx             ;przesuniecie bx
  inc bx                ;na ostatni znak
  mov ax,1h             ;wrzucenie do ax jednosci
  mov dh,0h
petla:                 ;zamiana stringa na liczbe
  mov dl,[bx]           ;zaladowanie znaku
  cmp dl,30h            ;sprawdzenie czy znak
  jb blad               ;nalezy do
  cmp dl,39h            ;zakresu od 0-9
  ja blad               ;dla ASCII 30=0, 39=9
  jmp dobrze
blad:
  call powrot_cr
  mov liczba,0h
  jmp poczatek
dobrze:
  sub dl,30h
  push ax
  mul dx                ;ax*dx=ax (DX:AX), jednosci, dziesiatki, itd
  jc blad
  clc                   ;czysci CF
  add liczba,ax
  jc blad               ;jesli liczba > 64k to wraca do poczatku
  pop ax
  mov dx,0Ah            ;mnozymy ax*10=ax zeby dodawac do wyniku
  mul dx                ;jednosci, dziesiatki, setki, itd
  dec bx                ;przesuwamy bx na kolejny znak od konca
loop petla

  call powrot_cr
  mov ah,09h
  mov dx,offset l_bin
  int 21h

  call wielkosc_liczby  ;zwraca w bx liczbe dosunieta do lewej
                        ;krawedzi rejestru, a w cx ilosc cyfr
petla1:                ;wypisuje binarnie liczbe
  shl bx,1h
  jc jeden              ;sprawdza czy przeniesienie
  mov dl,"0"
  jmp dla_zera          ;jak nie bylo przeniesienia omija jedynke
jeden:
  mov dl,"1"
dla_zera:
  mov ah,2h             ;f-02h int 21h wywala na ekran znak DL
  int 21h
loop petla1

  call powrot_cr        ;wywala komunikat z offsetu 1_hex
  mov ah,09h
  mov dx,offset l_hex
  int 21h

  call wielkosc_liczby  ;zwraca w bx liczbe dosuniecia do lewej
                        ;krawedzi rejestru, a w CX ilosc cyfr(bin)
  mov ax,cx             ;liczbe cyfr dzieli przez 4
  mov cl,04h            ;bo bedzie wypisana hexadecymalnie
  div cl                ;sprawdza czy nie ma reszty z dzielenia
  cmp ah,0h             ;jak nie ma to dalej
  jz dalej1
  mov cl,4h
  sub cl,ah             ;odejmuje od cl (4h w cl) reszte
  shr bx,cl             ;przesuwa o roznice bx (liczba w bx)
  mov ch,0h             ;poniewaz bity beda grupowane po 4
  mov cl,al
  inc cx                ;zwiekszam cx bo wypisze o jeden znak wiecej
  jmp dalej2
dalej1:
  mov ch,0h             ;zeruje CH
  mov cl,al             ;do CL liczba cyfr do wypisania
dalej2:

petla2:                ;wypisanie heksadecymalnie
  mov dl,bh             ;do dl nastarszy bajt liczby
  shr dl,4h             ;przesuwam o 4 w prawo bo chce tylko 4 bity
  cmp dl,0Ah            ;sprawdzam czy litera czy cyfra do wypisania
  jb dla_cyfr
  add dl,7h             ;jak litera to dodaje jeszcze 7 bo a-9=7
  dla_cyfr:
  add dl,30h            ;dodaje 30 do wartosci cyfry zeby uzyskac
  mov ah,2h             ;odwzorowanie w ASCII
  int 21h
  shl bx,4h             ;przesuwam w lewo liczbe o 4 bity
loop petla2            ;ktore wypisalem na ekran

  mov ah,4ch            ;zakonczenie programu
  int 21h

prog ENDS
end start