Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- MAX_RADIX EQU 18
- jmp main
- ;ds:si - input buf
- proc_writeln:
- pusha
- cld
- 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
- ;cx - max buffer size
- proc_readln:
- pusha
- cld
- read:
- mov ah, 0
- int 16h
- cmp al, 13
- jz exit_read
- stosb
- loop read
- exit_read:
- mov al, 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
- proc_to_integer:
- pusha
- cld
- transform:
- lodsb
- test al,al
- jz transform_exit
- cmp al, 2Fh ;;validation start
- jng transform_error
- cmp al, 39h
- jg transform_error ;;validation end
- sub al, 30h
- stosb
- jmp transform
- transform_error:
- stc
- transform_exit:
- popa
- ret
- ;es:di - output buf
- proc_read_integer:
- pusha
- call proc_readln
- mov ax, es
- mov ds, ax
- mov si, di
- call proc_to_integer
- jc read_error
- popa
- ret
- read_error:
- lea si, Err_not_integer
- call proc_writeln
- popa
- call proc_read_integer
- 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
- lea si, Res_message
- call proc_writeln
- lea si, op_1
- call proc_writeln
- lea si, op_2
- call proc_writeln
- 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(0)
- op_2 db MAX_RADIX dup(0)
- res db MAX_RADIX dup(0)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement