Witam, mam za zadanie wprowadzić dwie liczby hex na 16 bitach każda (czyli po 4 znaki) i je wyświetlić. Jednak przy wpisywaniu pierwszej liczby, a konkretnie jej 4 znaku, wywala mnie. Nie wiem gdzie jest przyczyna, przekraczam pamięć, źle się odwołuję?
pisz macro txt
lea dx, txt
mov ah,9
int 21h
endm
clrscr macro
mov ax,3
int 10h
endm
ustawKursor macro X,Y
mov ah,2
mov bh,0
mov dl,Y
mov dh,X
int 10h
endm
sts segment stack 'stack'
db 512 dup(0)
sts ends
dane segment
zmienna1 db 0
txt2 db 'Podaj wartosc L1 hex = $'
txt3 db 'Podaj wartosc L2 hex = $'
txt4 db 'Podales L1 = $'
txt5 db 'Podales L2 = $'
dane ends
prog segment
assume cs:prog,ds:dane,ss:sts
P486N
start:
mov ax,seg dane
mov ds,ax
clrscr
ustawKursor 3,10
pisz txt1
ustawKursor 4,10
pisz txt2
call pobHex
ustawKursor 5,10
pisz txt3
call pobHex
ustawKursor 6,10
pisz txt4
call wyswHex
ustawKursor 7,10
pisz txt5
call wyswHex
mov ah,7
int 21h
mov ah,4ch
int 21h
pobHex proc
call pobHex1
shl al,4
push ax
call pobHex1
push ax
call pobHex1
push ax
call pobHex1
pop dx
and al,0Fh
and dl,0F0h
add al,dl
mov zmienna1,al
ret
endp
pobHex1 proc
ety1:
mov ah,7
int 21h
cmp al,'0'
jb ety1
cmp al,'9'
jbe cyfr
cmp al,'A'
jb ety1
cmp al,'F'
jbe lit_d
cmp al,'a'
jb ety1
cmp al,'f'
ja ety1
lit_m:
push ax
mov dl,al ; wyswietlenie
mov ah,2
int 21h
pop ax
sub al,87
jmp ety2
lit_d:
push ax
mov dl,al ; wyswietlenie
mov ah,2
int 21h
pop ax
sub al,55
jmp ety2
cyfr:
push ax
mov dl,al ; wyswietlenie
mov ah,2
int 21h
pop ax
sub al,30h ; 48
ety2:
ret ;4 mlodsze bity rejestru al zawieraja wartosc jednej liczby hex
endp
wyswHex proc
mov al,zmienna1 ; pierwszy znak
shr al,4
cmp al,10
jb ety4
add al,55 ; kody ascii liter
jmp ety5
ety4:
add al,30h
ety5:
mov dl,al
mov ah,2
int 21h
mov al,zmienna1 ; drugi znak
and al,0Fh
cmp al,10
jb ety6
add al,55 ; kody ascii liter
jmp ety7
ety6:
add al,30h
ety7:
mov dl,al
mov ah,2
int 21h
mov al,zmienna1 ; trzeci znak
and al,0Fh
cmp al,10
jb ety8
add al,55 ; kody ascii liter
jmp ety9
ety8:
add al,30h
ety9:
mov dl,al
mov ah,2
int 21h
mov al,zmienna1 ; czwarty znak
and al,0Fh
cmp al,10
jb ety10
add al,55 ; kody ascii liter
jmp ety11
ety10:
add al,30h
ety11:
mov dl,al
mov ah,2
int 21h
ret
endp
prog ends
end start