Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- MAX_PATH EQU 30
- jmp main
- num1 db MAX_PATH dup(0), 0
- num2 db MAX_PATH dup(0), 0
- len1 db 0
- len2 db 0
- ptr1 db 0
- ptr2 db 0
- ptr3 db 28
- duh db 0
- res db 0
- res2 db MAX_PATH dup(0), 0
- ;ds:si - input buf
- proc_writeln:
- pusha
- cld
- mov ah, 0Eh
- write:
- lodsb
- add al, 48
- cmp al, 95
- jz exit_write
- int 10h
- jmp write
- exit_write:
- popa
- ret
- proc_sum:
- push bp
- mov bp, sp
- xor dx, dx
- mov si, [bp + 4]
- mov dl, [si]
- mov ptr2, dl
- mov si, [bp + 6]
- mov dl, [si]
- mov ptr1, dl
- dec ptr1
- dec ptr2
- point1:
- add [bp + 10], 1
- dec ptr1
- jnz point1
- point2:
- add [bp + 8], 1
- dec ptr2
- jnz point2
- point3:
- add [bp + 12], 1
- dec ptr3
- jnz point3
- mov si, [bp + 4] ;len2
- mov bl, [si] ;counter
- loopstart:
- mov si, [bp + 10]
- mov di, [bp + 8]
- xor ax, ax ;;sum
- add al, [si]
- add al, [di]
- add al,bh
- xor bh, bh
- dec [bp + 10]
- dec [bp + 8]
- cmp al, 10
- jl no_carry
- ;
- inc bh
- sub al, 10
- ;
- no_carry:
- mov si, [bp+12]
- mov [si], al
- dec [bp+12]
- inc res
- dec bl
- jnz loopstart
- mov bl, len1
- sub bl, len2
- cmp bl, 0
- jz here1
- loop2:
- mov si, [bp + 10]
- add [si], bh
- xor bh, bh
- cmp [si], 10
- jnge go
- sub [si], 10
- mov bh, 1
- ;add [si - 1], 1
- go:
- mov ah, [si]
- mov di, [bp + 12]
- mov [di], ah
- inc res
- dec [bp + 10]
- dec [bp + 12]
- dec bl
- cmp bl, 0
- jg loop2
- here1:
- cmp bh, 1
- jnz here2
- ;dec [bp + 12]
- mov di, [bp + 12]
- mov [di], 1
- dec [bp + 12]
- inc res
- ;inc res
- ;dec [bp + 12]
- here2:
- inc [bp + 12]
- mov bl, res
- loop3:
- mov si, [bp + 12]
- mov dl, [si]
- add dl, 48
- mov ah,2
- int 21h
- inc [bp + 12]
- dec bl
- jnz loop3
- ;sub al, 10
- ;add [si], 1
- ;jmp loopstart
- ret
- ;es:di - output buf
- readln macro len
- LOCAL read, exit_read
- pusha
- cld
- mov bl, 0
- read:
- mov ah, 0
- int 16h
- cmp al, 13
- jz exit_read
- sub al, 48
- stosb
- add bl,1
- jmp read
- exit_read:
- ;mov al, 65
- ;stosb
- mov len, bl
- popa
- endm
- main:
- mov ax, cs
- mov es, ax
- lea di, num1
- readln len1
- lea di, num2
- readln len2
- push offset res2
- push offset num1
- push offset num2
- push offset len1
- push offset len2
- call proc_sum
- ;printing nums
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement