Witam. Na zaliczenie muszę oddać program zamieniający liczbę dec na oct, jednakże najpierw zatrzymałem się na samym wczytaniu liczby oraz jej wyświetleniu. Jestem początkującym programistą asemblera. Piszę w TASM'ie. Oto mój kod:
dane segment
napis1 db 'Podaj liczbe dziesietna:', 10, 13, '$'
dane ends
sts segment
dw 512 dup(?)
sts ends
program segment
assume cs:program, ss:sts, ds:dane
start:
mov ax, seg dane
mov ds, ax
mov ah, 9 ;funkcja pobierania danych z klawiatury
mov dx, offset napis1
int 21h
xor bx, bx ;zerujemy bx
mov cx, 5
wczytywanie:
mov ah, 1 ;funkcja pobierania danych z klawiatury
int 21h
cmp al, 13 ;czy to jest enter?
je wyswietl ;jeśli tak, idziemy dalej
cmp al, '9'
jg koniec
cmp al, '0'
jl koniec
sub ax, '0' ;zamiana znaku ASCII na liczbę
push ax
mov ax, 10 ;wczytanie mnożnika
mul bx
mov bx, ax
pop ax
add bx, ax
jc koniec
loop wczytywanie
wyswietl:
mov ax, bx
add ax, '0'
mov ah, 2
int 21h
mov ah, 1
int 21h
koniec:
mov ah, 4ch
int 21h
program ends
end start
Dwie rzeczy, w których prosiłbym o pomoc. Po pierwsze, czy poprawnie zrobione jest zabezpieczenie zapobiegające przekroczeniu 16 bitów? Jeśli nie bardzo proszę o poprawienie kodu lub jakieś wskazówki. Po drugie, samo wyświetlanie liczby. Obecnie program wyświetla tylko jeden znak i to nie liczbę, po prostu jakiś znak. Nie wiem w jaki sposób zmienić kod, aby działał poprawnie.