Little_hobbit

lab 5 mop

Oct 30th, 2020 (edited)
844
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. model   small
  2. stack   100h
  3. dataseg
  4.     INPUT1  db 0Ah, 0Dh, 'Input first number (10 digits or less): ', 0Ah, 0Dh, '$'
  5.     BUF1    db 13, ?, 15 dup(?)
  6.    
  7.     INPUT2  db 'Input second number (10 digits or less): ', 0Ah, 0Dh, '$'
  8.    
  9.     BUF2    db 13, ?, 15 dup(?)
  10.    
  11.     RES db 12 dup(020h), '$'
  12.    
  13.     NL  db 0Ah, 0Dh, '$'
  14. codeseg
  15.     startupcode
  16.  
  17.     ; Input first number
  18.     lea DX, INPUT1  ; Output input1
  19.     mov AH, 09h
  20.     int 21h
  21.    
  22.     lea DX, BUF1    ; input buf1
  23.     mov AH, 0Ah
  24.     int 21h
  25.  
  26.     cmp [BUF1+1], 0 ; check empty input
  27.     jne C1
  28.     jmp INERR
  29.    
  30. C1: ; check incorrect input and clear high bits
  31.     lea BX, BUF1+2
  32.     xor CX, CX
  33.     mov CL, [BUF1+1]
  34.    
  35. CHECK1: mov AL, [BX]
  36.     cmp AL, '0'
  37.     jb  E1
  38.     cmp AL, '9'
  39.     jnbe    E1
  40.     jmp C2
  41.    
  42. E1: jmp INERR
  43. C2: and AL, 0Fh
  44.     mov [BX], AL
  45.    
  46.     inc BX
  47.     loop CHECK1
  48.  
  49.     ; convert to compact BCD
  50.     xor CX, CX
  51.     mov CL, [BUF1+1]
  52.     lea BX, BUF1+11
  53.     lea DI, BUF1+2
  54.     add DI, CX
  55.     dec DI
  56.  
  57. CONV1:  mov AL, [DI]
  58.     mov [BX], AL
  59.    
  60.     dec DI
  61.     dec CX
  62.     jz  OUT12
  63.    
  64.     mov AL, [DI]
  65.     sal AL, 4
  66.     or  [BX], AL
  67.     dec BX
  68.     dec DI
  69.     loop    CONV1
  70.     jmp OUT1
  71. OUT12:  dec BX
  72.  
  73. OUT1:   lea DX, BUF1+1
  74.     mov CX, BX
  75.     sub CX, DX
  76.     push    CX
  77.  
  78. ZERO1:  mov byte ptr [BX], 0
  79.     dec BX
  80.     loop    ZERO1
  81.    
  82.     lea DX, NL  ; Output new line
  83.     mov AH, 09h
  84.     int 21h
  85.    
  86.     ; Input second number
  87.     lea DX, INPUT2  ; Output input1
  88.     mov AH, 09h
  89.     int 21h
  90.    
  91.     lea DX, BUF2    ; input buf1
  92.     mov AH, 0Ah
  93.     int 21h
  94.  
  95.     cmp [BUF2+1], 0 ; check empty input
  96.     jne C3
  97.     jmp INERR
  98.    
  99. C3: ; check incorrect input and clear high bits
  100.     lea BX, BUF2+2
  101.     xor CX, CX
  102.     mov CL, [BUF2+1]
  103.    
  104. CHECK2: mov AL, [BX]
  105.     cmp AL, '0'
  106.     jb  E2
  107.     cmp AL, '9'
  108.     jnbe    E2
  109.     jmp C4
  110. E2: jmp INERR
  111. C4: and AL, 0Fh
  112.     mov [BX], AL
  113.    
  114.     inc BX
  115.     loop    CHECK2
  116.  
  117.     ; convert to compact BCD
  118.     xor CX, CX
  119.     mov CL, [BUF2+1]
  120.     lea BX, BUF2+11
  121.     lea DI, BUF2+2
  122.     add DI, CX
  123.     dec DI
  124.  
  125. CONV2:  mov AL, [DI]
  126.     mov [BX], AL
  127.    
  128.     dec DI
  129.     dec CX
  130.     jz  OUT22
  131.    
  132.     mov AL, [DI]
  133.     sal AL, 4
  134.     or  [BX], AL
  135.     dec BX
  136.     dec DI
  137.     loop    CONV2
  138.     jmp OUT2
  139. OUT22:  dec BX
  140.  
  141. OUT2:   lea DX, BUF2+1
  142.     mov CX, BX
  143.     sub CX, DX
  144.     push    CX
  145.  
  146. ZERO2:  mov byte ptr [BX], 0
  147.     dec BX
  148.     loop    ZERO2
  149.    
  150.     lea DX, NL  ; Output new line
  151.     mov AH, 09h
  152.     int 21h
  153.    
  154.     pop AX
  155.     pop DX
  156.     mov CX, 10
  157.    
  158.     cmp AX, DX
  159.     jb  FL
  160.     sub CX, DX
  161.     jmp SADD
  162. FL: sub CX, AX
  163.  
  164. SADD:   ; add nums
  165.     lea DI, BUF1+11
  166.     lea SI, BUF2+11
  167.     lea BX, RES+11
  168.     xor DX, DX
  169.    
  170. ADDN:   mov AL, [DI]
  171.     add AL, [SI]
  172.     daa
  173.     jnc OV1
  174.     mov DH, 01h
  175.    
  176. OV1:    add AL, DL
  177.     daa
  178.     jnc CONT
  179.     mov DH, 01h
  180.    
  181. CONT:   shr DX, 8
  182.     xor DH, DH
  183.     mov [BX], AL
  184.     dec DI
  185.     dec SI
  186.     dec BX
  187.     loop    ADDN
  188.     mov [BX], DL
  189.    
  190.     mov AL, [BX]
  191.     cmp AL, 20h
  192.     jne CONVTA
  193.     inc BX
  194.  
  195. CONVTA: ; convert res to ascii
  196.     lea DI, RES
  197.     mov DX, BX
  198.     sub DX, DI
  199.     mov CX, 12
  200.     sub CX, DX
  201.  
  202.    
  203. SCL:    mov DH, [BX]
  204.     mov AL, DH
  205.     shr AL, 4
  206.     or  AL, 30h
  207.     mov [DI], AL
  208.     inc DI
  209.    
  210.     mov AL, DH
  211.     and AL, 00Fh
  212.     or  AL, 30h
  213.     mov [DI], AL
  214.    
  215.     inc DI
  216.     inc BX
  217.     loop    SCL
  218.    
  219.     mov     byte ptr [DI], '$'
  220.    
  221.     mov CX, 3
  222.     lea BX, RES
  223. DZ: inc BX
  224.     cmp byte ptr [BX], 30h
  225.     jne OUTPUT
  226.     loop    DZ 
  227.    
  228.    
  229. OUTPUT: mov DX, BX  ; Output input1
  230.     mov AH, 09h
  231.     int 21h
  232. INERR:
  233.  
  234.     exitcode 0
  235. end
RAW Paste Data