Advertisement
xladomaz

Input 2 numbers and ouput summ

Nov 10th, 2019
1,349
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. data    segment
  2.         a dw ?
  3.         b dw 9
  4.         nmb db ?
  5.         pnt dw 0h
  6.         answer db 0h
  7.        
  8.         tt_d db 0h
  9.        
  10.         ax_temp dw ?
  11.         bx_temp dw ?
  12. data    ends
  13.  
  14. code    segment
  15.         assume cs:code, ds:data
  16. main:   mov dx, data
  17.         mov ds, dx
  18.  
  19.         mov dx, 0B800h
  20.         mov es, dx
  21.         xor di, di
  22.         xor dx, dx ; Clear display
  23.         mov ax, 0720h
  24.         mov cx, 80*25
  25.         rep stosw
  26.         jmp gen
  27.  
  28. outp_n:
  29.         mov di, 80*4
  30.         mov ax, 0730h
  31.         add al, nmb
  32.         add di, pnt
  33.         mov es:[di], ax
  34. ret
  35.  
  36. start:  mov cx, 02h
  37. inloop: in  al, 60h
  38.         cmp al, bl
  39.         je  inloop
  40.         mov bl, al
  41.         cmp al, 01h
  42.         jne NotEsc
  43.         jmp quit
  44. NotEsc: cmp al, 0Bh
  45.         jne CkInNum
  46.         mov a, 0
  47.         mov es:[di], 0730h
  48.         jmp NxtNum
  49. CkInNum:cmp al, 02h ; check scancode in range
  50.         jl Not9
  51.         cmp al, 0Ah
  52.         jg Not9
  53.         mov ah, 0h
  54.         mov si, ax
  55.         dec si
  56.         mov a, si
  57.         add si, 0730h
  58.         mov es:[di], si
  59.         jmp NxtNum
  60. Not9:   jmp inloop
  61. NxtNum:
  62.         mov ax_temp, ax ; Answer
  63.         mov bx_temp, bx
  64.         mov bl, 0Ah
  65.         mov al, answer
  66.         mul bl
  67.         add ax, a
  68.         mov answer, al
  69.         mov ax, ax_temp
  70.         mov bx, bx_temp
  71.        
  72.         inc di
  73.         inc di
  74.         dec cx
  75.        
  76.         jnz Not9
  77.         mov ax, 0h
  78. ret
  79.  
  80. gen:    
  81.         mov di, 0 ; Input 2 numbers
  82.         call start
  83.         mov al, tt_d
  84.         add al, answer
  85.         mov tt_d, al
  86.         mov answer, 0h
  87.         mov di, 80*2
  88.         call start
  89.         mov al, tt_d
  90.         add al, answer
  91.        
  92.         mov bl, 0Ah
  93.         div bl ; Get div of number
  94.  
  95.         mov nmb, al ; Number output
  96.         mov bl, ah
  97.         call outp_n
  98.         add pnt, 2
  99.         mov nmb, bl
  100.         call outp_n
  101.        
  102. pause:  in al, 60h
  103.         cmp al, 01h
  104.         jne pause
  105. quit:   mov ax, 4C00h
  106.         int  21h
  107. code    ends
  108.         end main
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement