Cześć.Mam problem z wyswietleniem liczby ósemkowej w postaci dziesiętnej. Stosuję tutaj algorytm dzielenia przez 10. Wszystko by działało gdyby nie fakt, że nie wyświetla mi się liczba dziesiątek i nie wiem dokładnie dlaczego. Np. po wpisaniu liczby 171o, wyświetla się dziesiętnie 101, zamiast 121 itp.
Mam taki kod:
format PE Console 4.0
entry start
include 'win32ax.inc'
include 'win_macros.inc'
section '.text' code readable executable
start:
ustaw_kursor 0,0
wyswietl txt1
xor dx, dx
mov [zm1], dx
mov ecx,10
ety1:
push ecx
ety2:
pob_znak
cmp al,8 ;Backspace
jne ety3
pop ecx
cmp cx,10
je ety1
inc cx
push ecx
wysw_znak 8
wysw_znak ' '
wysw_znak 8
jmp ety2
ety3:
cmp al, 'q'
je koniec
cmp al, 13 ;enter
je konwertowanie
push ecx
cmp al,'0'
jb ety2
cmp al,'7'
ja ety2
wysw_znak al
and ax, 7
shl word [zm1], 3
add [zm1], ax
pop ecx
dec ecx
cmp ecx, 0
jne ety1
; loop ety1
ustaw_kursor 20,10
wyswietl txt2
ety4:
pob_znak
cmp al,1bh ;Esc
jne ety4
konwertowanie:
pop ecx
cmp ecx, 10
je ety1
wysw_bin:
wyswietl txt4
mov bx, [zm1]
mov ecx, 16
ety5: ;ety1 w 6asm
push ecx
shl bx, 1
jc ety6
mov dl, '0'
jmp ety7
ety6: ;ety2 w 6asm
mov dl, '1'
ety7: ;ety3 w 6asm
wysw_znak dl
pop ecx
loop ety5
wysw_dec:
wyswietl txt6
mov ax,[zm1]
mov dx,0
mov bx,10
div bx
add dx,30h
push edx
mov dx,0
div bx
add ax,3030h
push eax
wysw_znak al
pop eax
wysw_znak ah
pop edx
wysw_znak dl
wysw_oct:
pob_znak
koniec:
end_prog
section '.data' data readable writeable
txt1 db 'Wprowadz w postaci osemkowej',10,13,NULL
txt2 db 'nacisnij Esc',NULL
zm1 dw 32
txt3 db 10,13,'konwertowanie',13, 13, NULL
txt4 db 10,10,'wartosc BIN: ', NULL
txt5 db 10,10,'wartosc OCT: ', NULL
txt6 db 10,10,'wartosc DEC: ',NULL