Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- model small
- stack 100h
- dataseg
- INPUT1 db 0Ah, 0Dh, 'Input first number (10 digits or less): ', 0Ah, 0Dh, '$'
- BUF1 db 13, ?, 15 dup(?)
- INPUT2 db 'Input second number (10 digits or less): ', 0Ah, 0Dh, '$'
- BUF2 db 13, ?, 15 dup(?)
- RES db 12 dup(020h), '$'
- NL db 0Ah, 0Dh, '$'
- codeseg
- startupcode
- ; Input first number
- lea DX, INPUT1 ; Output input1
- mov AH, 09h
- int 21h
- lea DX, BUF1 ; input buf1
- mov AH, 0Ah
- int 21h
- cmp [BUF1+1], 0 ; check empty input
- jne C1
- jmp INERR
- C1: ; check incorrect input and clear high bits
- lea BX, BUF1+2
- xor CX, CX
- mov CL, [BUF1+1]
- CHECK1: mov AL, [BX]
- cmp AL, '0'
- jb E1
- cmp AL, '9'
- jnbe E1
- jmp C2
- E1: jmp INERR
- C2: and AL, 0Fh
- mov [BX], AL
- inc BX
- loop CHECK1
- ; convert to compact BCD
- xor CX, CX
- mov CL, [BUF1+1]
- lea BX, BUF1+11
- lea DI, BUF1+2
- add DI, CX
- dec DI
- CONV1: mov AL, [DI]
- mov [BX], AL
- dec DI
- dec CX
- jz OUT12
- mov AL, [DI]
- sal AL, 4
- or [BX], AL
- dec BX
- dec DI
- loop CONV1
- jmp OUT1
- OUT12: dec BX
- OUT1: lea DX, BUF1+1
- mov CX, BX
- sub CX, DX
- push CX
- ZERO1: mov byte ptr [BX], 0
- dec BX
- loop ZERO1
- lea DX, NL ; Output new line
- mov AH, 09h
- int 21h
- ; Input second number
- lea DX, INPUT2 ; Output input1
- mov AH, 09h
- int 21h
- lea DX, BUF2 ; input buf1
- mov AH, 0Ah
- int 21h
- cmp [BUF2+1], 0 ; check empty input
- jne C3
- jmp INERR
- C3: ; check incorrect input and clear high bits
- lea BX, BUF2+2
- xor CX, CX
- mov CL, [BUF2+1]
- CHECK2: mov AL, [BX]
- cmp AL, '0'
- jb E2
- cmp AL, '9'
- jnbe E2
- jmp C4
- E2: jmp INERR
- C4: and AL, 0Fh
- mov [BX], AL
- inc BX
- loop CHECK2
- ; convert to compact BCD
- xor CX, CX
- mov CL, [BUF2+1]
- lea BX, BUF2+11
- lea DI, BUF2+2
- add DI, CX
- dec DI
- CONV2: mov AL, [DI]
- mov [BX], AL
- dec DI
- dec CX
- jz OUT22
- mov AL, [DI]
- sal AL, 4
- or [BX], AL
- dec BX
- dec DI
- loop CONV2
- jmp OUT2
- OUT22: dec BX
- OUT2: lea DX, BUF2+1
- mov CX, BX
- sub CX, DX
- push CX
- ZERO2: mov byte ptr [BX], 0
- dec BX
- loop ZERO2
- lea DX, NL ; Output new line
- mov AH, 09h
- int 21h
- pop AX
- pop DX
- mov CX, 10
- cmp AX, DX
- jb FL
- sub CX, DX
- jmp SADD
- FL: sub CX, AX
- SADD: ; add nums
- lea DI, BUF1+11
- lea SI, BUF2+11
- lea BX, RES+11
- xor DX, DX
- ADDN: mov AL, [DI]
- add AL, [SI]
- daa
- jnc OV1
- mov DH, 01h
- OV1: add AL, DL
- daa
- jnc CONT
- mov DH, 01h
- CONT: shr DX, 8
- xor DH, DH
- mov [BX], AL
- dec DI
- dec SI
- dec BX
- loop ADDN
- mov [BX], DL
- mov AL, [BX]
- cmp AL, 20h
- jne CONVTA
- inc BX
- CONVTA: ; convert res to ascii
- lea DI, RES
- mov DX, BX
- sub DX, DI
- mov CX, 12
- sub CX, DX
- SCL: mov DH, [BX]
- mov AL, DH
- shr AL, 4
- or AL, 30h
- mov [DI], AL
- inc DI
- mov AL, DH
- and AL, 00Fh
- or AL, 30h
- mov [DI], AL
- inc DI
- inc BX
- loop SCL
- mov byte ptr [DI], '$'
- mov CX, 3
- lea BX, RES
- DZ: inc BX
- cmp byte ptr [BX], 30h
- jne OUTPUT
- loop DZ
- OUTPUT: mov DX, BX ; Output input1
- mov AH, 09h
- int 21h
- INERR:
- exitcode 0
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement