org 100h
start:
mov ah, 9
mov dx, info
int 21h
xor bx, bx ;miejsce na liczbę
l_pentla:
;call far _we_z ;pobierz znak z klawiatury
mov ah, 01h
int 21h
cmp al, 0dh ;czy Enter?
je l_juz ;jesli tak to wychodzimy
cmp al, 20h ;przepuszczam spacje
je l_pentla
cmp al, '0' ;jesli nie cyfra to błąd
jb l_blad
cmp al, '9'
ja l_blad
and al, 0fh ;izolujemu wartosc (sub al, '0')
mov cl, al
mov ax, bx
shl bx, 1 ;miejsce na nowa cyfre
jc l_blad
shl ax, 1
jc l_blad
shl ax, 1
jc l_blad
shl ax, 1
jc l_blad
add bx, ax ;bx=bx*10- bieżąca liczbę mnożymy przez 10
jc l_blad
add bl, cl ;dadajemy cyfrę
adc bh, 0
jc l_blad ;jeśli przekroczymy limit, to błąd
jmp short l_pentla
l_juz:
; wynik w AX
wyswietl:
;mov ax, [liczba]
xor dx, dx
mov cx, 10000
div cx
or al, '0'
;wyswietl AL jako znak
mov ax, dx
xor dx, dx
mov cx, 1000
div cx,
or al, '0'
;wyswietl AL jako znak
mov ax, dx
mov cl, 100
div cl
or al, '0'
;wyswietl AL jako znak
mov al, ah
xor ah, ah
mov cl, 10
div cl
or ax, '00'
;wyswietl AL jako znak
;potem wyświetl AH jako znak
mov ah, 9
mov dx, ax
int 21h
mov ah, 9
;;mov dx, ah
int 21h
l_blad:
mov ah, 9
mov dx, info
int 21h
stop:
mov ax, 4C00h ;EXIT
int 21h ;wywołanie DOS
info db "Czesc.$"
b3JnIDEwMGgKCnN0YXJ0OgoJbW92CWFoLCA5Cgltb3YgZHgsIGluZm8KCWludCAyMWgKCQoKCXhvcglieCwgYngJO21pZWpzY2UgbmEgbGljemLEmQpsX3BlbnRsYToKCQoJO2NhbGwJZmFyIF93ZV96CTtwb2JpZXJ6IHpuYWsgeiBrbGF3aWF0dXJ5Cgltb3YgYWgsIDAxaAoJaW50CTIxaAoJCgljbXAJCWFsLCAwZGgJCTtjenkgRW50ZXI/CglqZQkJbF9qdXoJCQk7amVzbGkgdGFrIHRvIHd5Y2hvZHppbXkKCQoJY21wCWFsLCAyMGgJCTtwcnplcHVzemN6YW0gc3BhY2plCglqZQkJbF9wZW50bGEKCQoJY21wCWFsLCAnMCcJCTtqZXNsaSBuaWUgY3lmcmEgdG8gYsWCxIVkCglqYgkJbF9ibGFkCgljbXAJYWwsICc5JwoJamEJCWxfYmxhZAoJCglhbmQJYWwsIDBmaAkJO2l6b2x1amVtdSB3YXJ0b3NjIChzdWIgYWwsICcwJykKCW1vdgljbCwgYWwKCQoJbW92CWF4LCBieAoJCglzaGwJYngsIDEJCQk7bWllanNjZSBuYSBub3dhIGN5ZnJlCglqYwkJbF9ibGFkCgkKCXNobAlheCwgMQoJamMJCWxfYmxhZAoJc2hsCWF4LCAxCglqYwkJbF9ibGFkCglzaGwJYXgsIDEKCWpjCQlsX2JsYWQKCQoJYWRkCWJ4LCBheAkJO2J4PWJ4KjEwLSBiaWXFvMSFY2EgbGljemLEmSBtbm/FvHlteSBwcnpleiAxMAoJamMJCWxfYmxhZAoJCglhZGQJYmwsIGNsCQkJO2RhZGFqZW15IGN5ZnLEmQoJYWRjCWJoLCAwCglqYwkJbF9ibGFkCQk7amXFm2xpIHByemVrcm9jenlteSBsaW1pdCwgdG8gYsWCxIVkCgkKCWptcAlzaG9ydCBsX3BlbnRsYQoJCmxfanV6OgoJOyB3eW5payB3IEFYCgkKd3lzd2lldGw6Cgk7bW92IGF4LCBbbGljemJhXQoJeG9yCWR4LCBkeAoJbW92CWN4LCAxMDAwMAoJZGl2CWN4CglvcglhbCwgJzAnCgk7d3lzd2lldGwgQUwgamFrbyB6bmFrCgltb3YJYXgsIGR4Cgl4b3IJZHgsIGR4Cgltb3YgY3gsIDEwMDAKCWRpdgljeCwgCglvcglhbCwgJzAnCgk7d3lzd2lldGwgQUwgIGpha28gem5hawoJbW92CWF4LCBkeAoJbW92CWNsLCAxMDAKCWRpdiAJY2wKCW9yCWFsLCAnMCcKCTt3eXN3aWV0bCBBTCBqYWtvIHpuYWsKCW1vdglhbCwgYWgKCXhvcglhaCwgYWgKCW1vdiBjbCwgMTAKCWRpdgljbAoJb3IJYXgsICcwMCcKCTt3eXN3aWV0bCBBTCBqYWtvIHpuYWsKCTtwb3RlbSB3ecWbd2lldGwgQUggamFrbyB6bmFrCgkKCW1vdiBhaCwgOQoJbW92IGR4LCAgYXgKCWludCAyMWgKCQoJbW92IGFoLCA5Cgk7O21vdiBkeCwgIGFoCglpbnQgMjFoCgkKbF9ibGFkOgoJbW92CWFoLCA5Cgltb3YgZHgsIGluZm8KCWludCAyMWgKc3RvcDoJCQoJCQoJCW1vdglheCwgNEMwMGgJO0VYSVQKCQlpbnQJMjFoCQkJO3d5d2/FgmFuaWUgRE9TCgkJCgkJaW5mbyBkYiAiQ3plc2MuJCIKCQkKCQkKCQkKCQoJCgk=