Witam mam program w asemeblerze, konkretnie w TASMie.
Problem tkwi w tym, że nie potrafię wyświetlić wczytanych znaków.
Cały czas wyświetla mi ten sam wynik:2340.
Oto kod:
; An= M1*An-1 + M2*An-2 +M3
.model tiny
.stack
.data
pod1 db "Wartosc M1 :", "$"
pod2 db "Wartosc M2 :", "$"
pod3 db "Wartosc M3 :", "$"
podn db "Liczba n :", "$"
wyp db "Podane :", "$"
m1 dw ?
m2 dw ?
m3 dw ?
liczN dw ?
Tab dw 25 dup(?)
er db "Error!", "$"
bufor db 20
db 0
db 22 dup('$')
pisz_bufor db 20
db 0
db 22 dup('$')
liczba dw ?
.code
;org 100h
main proc
mov ax, SEG DGROUP
mov ds, ax
lea dx, pod1
mov ah, 9
int 21h
call pobierz
mov [m1], ax
call newline
lea dx, pod2
mov ah, 9
int 21h
call pobierz
mov [m2], ax
call newline
lea dx, pod3
mov ah, 9
int 21h
call pobierz
mov [m3], ax
call newline
lea dx, podn
mov ah, 9
int 21h
call pobierz
mov [liczN], ax
; An= M1*An-1 + M2*An-2 +M3
mov ax, [m3]
mov [Tab+1], ax
mov ax, [Tab+1]
mov cx, [m3]
imul cx
add ax, [m3]
mov [Tab+2], ax
lea dx, wyp
mov ah, 9
int 21h
call wypisz
call exit
pobierz:
mov ah, 0ah
lea dx, bufor
int 21h
xor bx, bx
xor si, si ;;;
l_petla:
call pob_z
;cmp al, 10;lf
;je l_juz
;cmp al, 13;cr
;je l_juz
;cmp al, 32;spc
;je l_petla
;cmp al, '$'
cmp al, '0'
jb l_blad
cmp al, '9'
ja l_blad
and al, 0fh
mov cl, al
mov ax, bx
shl bx, 1
jc l_blad
shl ax, 1
jc l_blad
shl ax, 1
jc l_blad
shl ax, 1
jc l_blad
add bx, ax
jc l_blad
add bl, cl
adc bh, 0
jc l_blad
je l_juz ;;;;
jmp short l_petla
l_juz:
;wynik w AX
mov [liczba], ax ;;;
;mov ah, 0eh
;int 10h ; znak z AL
call newline
ret
pob_z:
mov al, [bufor+2]
;inc si
ret
l_blad:
mov ax,seg er
mov ds,ax
mov ah,09
lea dx,er
int 21h
call exit
wypisz:
;mov ax, [liczba]
xor si, si
mov cx, 10
_pisz_l_petla:
xor dx, dx
div cx
or dl, '0'
mov [pisz_bufor+si], dl
inc si
test ax, ax
jnz _pisz_l_petla
_pisz_l_wypis:
mov al, [pisz_bufor+si-1]
call _pisz_z
dec si
jnz _pisz_l_wypis
ret
_pisz_z:
mov ah, 0eh
int 10h
ret
newline:
mov dx, 0Ah ; nowa linia
mov ah, 2
int 21h
ret
exit:
mov ah,4ch
int 21h
main endp
end main