Advertisement
Guest User

Untitled

a guest
Oct 26th, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. MAX_RADIX EQU 18
  2. jmp main
  3.  
  4. ;ds:si - input buf
  5. proc_writeln:
  6.     pusha
  7.     cld
  8.     mov ah, 0Eh
  9.     write:
  10.         lodsb
  11.         test al,al
  12.         jz exit_write
  13.         int 10h
  14.         jmp write    
  15.     exit_write:
  16.         ;newline
  17.         mov al, 0Dh
  18.         int 10h
  19.         mov al, 0Ah
  20.         int 10h
  21.         popa
  22.         ret
  23.              
  24.        
  25. ;es:di - output buf
  26. ;cx - max buffer size  
  27. proc_readln:
  28.     pusha
  29.     cld
  30.     read:
  31.         mov ah, 0
  32.         int 16h
  33.         cmp al, 13
  34.         jz exit_read
  35.         stosb
  36.         loop read
  37.        
  38.     exit_read:
  39.         mov al, 0
  40.         stosb
  41.    
  42.         mov ah, 0Eh
  43.        
  44.         ;newline
  45.         mov al, 0Dh
  46.         int 10h
  47.         mov al, 0Ah
  48.         int 10h
  49.        
  50.         popa
  51.         ret
  52.  
  53. ;ds:si - char buf
  54. ;es:di - integer buf        
  55. proc_to_integer:
  56.     pusha
  57.     cld
  58.     transform:
  59.         lodsb
  60.         test al,al
  61.         jz transform_exit
  62.        
  63.         cmp al, 2Fh             ;;validation start
  64.         jng transform_error
  65.         cmp al, 39h
  66.         jg transform_error      ;;validation end
  67.        
  68.         sub al, 30h
  69.         stosb
  70.         jmp transform    
  71.            
  72.     transform_error:
  73.         stc      
  74.            
  75.     transform_exit:
  76.         popa
  77.         ret
  78.  
  79. ;es:di - output buf        
  80. proc_read_integer:
  81.     pusha
  82.     call proc_readln
  83.     mov ax, es
  84.     mov ds, ax
  85.     mov si, di
  86.     call proc_to_integer
  87.     jc read_error
  88.    
  89.     popa
  90.     ret
  91.    
  92.     read_error:
  93.         lea si, Err_not_integer
  94.         call proc_writeln
  95.         popa
  96.         call proc_read_integer
  97.         ret    
  98.    
  99.    
  100. main:    
  101.     mov ax, cs
  102.     mov ds, ax
  103.     lea si, Invite_1
  104.     call proc_writeln
  105.    
  106.     mov ax, cs
  107.     mov es, ax
  108.     lea di, op_1
  109.     call proc_read_integer
  110.  
  111.     lea si, Invite_2
  112.     call proc_writeln
  113.    
  114.     lea di, op_2
  115.     call proc_read_integer
  116.    
  117.     lea si, Res_message
  118.     call proc_writeln
  119.    
  120.     lea si, op_1
  121.     call proc_writeln
  122.    
  123.     lea si, op_2
  124.     call proc_writeln
  125.    
  126.     mov ah, 4Ch
  127.     int 21h
  128.    
  129. Invite_1 db 'Enter first number: ', 0
  130. Invite_2 db 'Enter second number: ', 0
  131. Res_message db 'Result is: ', 0
  132. Err_not_integer db 'This is not a number. Try again: ', 0
  133. op_1 db MAX_RADIX dup(0)
  134. op_2 db MAX_RADIX dup(0)
  135. res db MAX_RADIX dup(0)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement