Advertisement
Guest User

lab5.asm

a guest
Nov 9th, 2018
206
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. assume cs: code, ds: data
  2.  
  3. data segment
  4.     dummy db 0Ah, '$'
  5.     aLen db ?
  6.     bLen db ?
  7.     cLen db ?
  8.     msg1Num db 'Enter first number line:', 10, 13, '$'
  9.     msg2Num db 'Enter second number line:', 10, 13, '$'
  10.     msgRes  db 'Result:', 10, 13, '$'
  11.     tab  db 10, 13, '$'
  12.     a db 40, 40 dup(0)
  13.     b db 40, 40 dup(0)
  14.     c db 40, 40 dup(0)
  15. data ends
  16.  
  17. code segment
  18.  
  19. read proc
  20.     push  bp
  21.     mov   bp, sp
  22.    
  23.     mov   ah,0ah
  24.     mov   dx, [bp+4]
  25.     int   21h
  26.     pop   bp
  27.     ret   2
  28. read endp
  29.  
  30. print proc
  31.     push  bp
  32.     mov   bp, sp
  33.    
  34.     mov   ah,09h
  35.     mov   dx, [bp+4]
  36.     int   21h
  37.     pop   bp
  38.     ret   2
  39. print endp
  40.  
  41. addInt proc
  42.     push    bp
  43.     mov bp, sp
  44.    
  45.     mov bx, [bp+4]
  46.     mov cl, byte ptr [bx+1] ; len(b)
  47.     mov bLen, cl
  48.    
  49.     xor ax, ax
  50.     mov dx, [bp+6]
  51.     mov si, [bp+6]
  52.     mov al, byte ptr [si+1] ; len(a)
  53.     mov aLen, al
  54.    
  55.     cmp al, cl ; bx = b ; dx = a = si
  56.     jle a1
  57.  
  58.     mov dx, bx
  59.     mov bx, si
  60.    
  61. a1:
  62.     mov cl, bLen
  63.     inc cl
  64.     mov cLen, cl
  65.     mov di, [bp+8]
  66.     mov byte ptr [di+1], cl ; cLen
  67.     mov byte ptr [di+2], '0' ; cLen
  68.     mov cl, bLen
  69.     mov si, bx
  70.     mov cl, byte ptr [si+1]
  71.     add si, 2
  72.     add di, 3
  73.     rep movsb
  74.     mov byte ptr [di], '$'
  75.    
  76.     dec di ; last digit 'c'
  77.     mov si, dx ; a
  78.     mov cl, aLen
  79.     inc cl
  80.     add si, cx
  81.     dec cl
  82.     mov ch, cLen
  83.    
  84.     xor dx, dx
  85.     std
  86.     sum:
  87.         mov bl, byte ptr [di]
  88.         sub bl, 30h ;
  89.         add bl, byte ptr [si]
  90.     cycle:sub bl, 30h ; temp sum
  91.         cmp dl, 1
  92.         je one
  93.         ret1: cmp bl, 9h
  94.         jg rem
  95.        
  96.         ret2: add bl, 30h
  97.         mov byte ptr [di], bl
  98.         dec si
  99.         dec di
  100.         dec cl
  101.         dec ch
  102.         cmp cl, 0
  103.         jg sum
  104.         cmp ch, 0
  105.         jg more
  106.    
  107.     cmp dl, 1
  108.     je last
  109.    
  110.     ret3: jmp endd
  111.    
  112.     more:
  113.     mov bl, byte ptr [di]
  114.     jmp cycle
  115.    
  116.     last: mov dl, 0
  117.         add byte ptr [di], 1h
  118.     jmp ret3
  119.    
  120.     rem: mov dl, 1
  121.         sub bl, 0ah
  122.     jmp ret2
  123.        
  124.     one: inc bl
  125.         mov dl, 0
  126.     jmp ret1
  127.    
  128.     endd:
  129.     pop bp
  130.     pop bx
  131.    
  132.     push ax
  133.     push offset c ;;;;;;;;; return
  134.     push bx
  135.     ret
  136. addInt endp    
  137.  
  138. start:  mov ax, data
  139.         mov ds, ax
  140.         mov es, ax
  141.        
  142.         push offset msg1Num
  143.         call print
  144.        
  145.         push offset a
  146.         call read
  147.        
  148.         push offset tab
  149.         call print
  150.        
  151.         push offset msg2Num
  152.         call print
  153.        
  154.         push offset b
  155.         call read
  156.        
  157.         push offset tab
  158.         call print
  159.        
  160.         push offset msgRes
  161.         call print
  162.        
  163.         push offset c ; +8
  164.         push offset a ; +6
  165.         push offset b ; +4
  166.        
  167.         call addInt
  168.         pop dx
  169.         add dx, 2
  170.         push dx
  171.         call print
  172.        
  173.         mov ah, 4ch
  174.         int 21h
  175.         code ends
  176. end start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement