Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- MAX_RADIX EQU 18
- jmp main
- ;ds:si - input buf
- ;df - direction
- proc_writeln:
- pusha
- mov ah, 0Eh
- write:
- lodsb
- test al,al
- jz exit_write
- int 10h
- jmp write
- exit_write:
- ;newline
- mov al, 0Dh
- int 10h
- mov al, 0Ah
- int 10h
- popa
- ret
- ;es:di - output buf
- ;df - direction
- ;cx - max buffer size
- proc_readln:
- pusha
- read:
- mov ah, 0
- int 16h
- cmp al, 13
- jz exit_read
- stosb
- loop read
- exit_read:
- mov al, 0 ;;\0
- stosb
- mov ah, 0Eh
- ;newline
- mov al, 0Dh
- int 10h
- mov al, 0Ah
- int 10h
- popa
- ret
- ;ds:si - char buf
- ;es:di - integer buf
- ;df - direction
- proc_to_integer:
- pusha
- transform_integer:
- lodsb
- test al,al
- jz transform_integer_exit
- cmp al, 2Fh ;;validation start
- jng transform_integer_error
- cmp al, 39h
- jg transform_integer_error ;;validation end
- sub al, 30h
- stosb
- jmp transform_integer
- transform_integer_error:
- stc
- transform_integer_exit:
- mov al, '$'
- stosb
- popa
- ret
- ;ds:si - integer buf
- ;es:di - char buf
- ;df - direction
- proc_to_char:
- pusha
- transform_char:
- lodsb
- cmp al, '$'
- jz transform_char_exit
- add al, 30h
- stosb
- jmp transform_char
- transform_char_exit:
- mov al, 0
- stosb
- popa
- ret
- ;es:di - buf
- proc_reverse:
- pusha
- lea si, di+MAX_RADIX-1
- reverse_loop:
- mov al, [di]
- mov ah, [si]
- mov [di], ah
- mov [si], al
- inc di
- dec si
- cmp di, si
- jb reverse_loop
- popa
- ret
- ;es:di - output buf
- proc_read_integer:
- pusha
- mov cx, MAX_RADIX - 1
- cld
- call proc_readln
- mov ax, es
- mov ds, ax
- mov si, di
- call proc_to_integer
- jc read_error
- call proc_reverse
- popa
- ret
- read_error:
- lea si, Err_not_integer
- call proc_writeln
- popa
- call proc_read_integer
- ret
- ;ds:si - output buf
- proc_write_integer:
- pusha
- add si, MAX_RADIX - 1
- mov ax, ds
- mov es, ax
- mov di, si
- call proc_to_char
- call proc_writeln
- popa
- ret
- ;;stack top - op_1
- ;;next - op_2
- ;;next - res
- proc_sum:
- pusha
- mov bp, sp
- ret
- main:
- mov ax, cs
- mov ds, ax
- lea si, Invite_1
- call proc_writeln
- mov ax, cs
- mov es, ax
- lea di, op_1
- call proc_read_integer
- lea si, Invite_2
- call proc_writeln
- lea di, op_2
- call proc_read_integer
- push offset res
- push offset op_2
- push offset op_1
- call proc_sum
- lea si, Res_message
- call proc_writeln
- lea si, op_1
- call proc_write_integer
- mov ah, 4Ch
- int 21h
- Invite_1 db 'Enter first number: ', 0
- Invite_2 db 'Enter second number: ', 0
- Res_message db 'Result is: ', 0
- Err_not_integer db 'This is not a number. Try again: ', 0
- op_1 db MAX_RADIX dup('$')
- op_2 db MAX_RADIX dup('$')
- res db MAX_RADIX dup('$')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement