Advertisement
Void-voiD

Untitled

Dec 6th, 2019
1,346
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .386
  2.  
  3. ASSUME CS: CODE, DS: DATA
  4.  
  5. DATA SEGMENT USE16 PUBLIC
  6.     STRING1 DB 100, 99 DUP ('$')
  7.     STRING2 DB 100, 99 DUP ('$')
  8.     HELP DB 100, 99 DUP ('$')
  9.     DUMMY DB 0AH, '$'
  10.     RESULT DB 100 DUP ('$')
  11.     SUM DB 100 DUP ('$')
  12.     OVERFLOW DB ?
  13.     END1 DB ?
  14.     END2 DB ?
  15.     ONE DB ?
  16.     TWO DB ?
  17.     IS DB ?
  18.     GREAT DB ?
  19.     MINUS DB ?
  20.     COUNT DW ?
  21.     TEN DB 10
  22.     NUMOFSTEP DW ?
  23.     C1 DW ?
  24.     C2 DW ?
  25.     M1 DB ?
  26.     M2 DB ?
  27.     CURMINUS DB ?
  28.     CURSTEP DB ?
  29.     LEN DW ?
  30. DATA ENDS
  31.  
  32. CODE SEGMENT USE16 PUBLIC
  33.  
  34. CLEAR1 PROC
  35.         MOV STRING1[SI], '$'
  36.         INC SI
  37.         CMP SI, 99
  38.         JNE CLEAR1
  39.         RET
  40. CLEAR1 ENDP
  41.  
  42. CLEAR2 PROC
  43.         MOV STRING2[SI], '$'
  44.         INC SI
  45.         CMP SI, 99
  46.         JNE CLEAR2
  47.         RET
  48. CLEAR2 ENDP
  49.  
  50. SCAN1 PROC
  51.         mov dx, offset string1
  52.         mov ax, 0
  53.         mov ah, 0Ah
  54.         int 21h
  55.        
  56.         mov dx, offset dummy
  57.         mov ah, 09h
  58.         int 21h
  59.        
  60.         mov dx, offset string1
  61.         RET
  62. SCAN1 ENDP
  63.  
  64. SCAN2 PROC
  65.         mov dx, offset string2
  66.         mov ax, 0
  67.         mov ah, 0Ah
  68.         int 21h
  69.        
  70.         mov dx, offset dummy
  71.         mov ah, 09h
  72.         int 21h
  73.        
  74.         mov dx, offset string2
  75.         RET
  76. SCAN2 ENDP
  77.  
  78. SET0L PROC
  79.     MOV ONE, 48
  80.     MOV END2, 1
  81.     JMP SL
  82. SET0L ENDP
  83.  
  84. SET0H PROC
  85.     MOV TWO, 48
  86.     MOV END1, 1
  87.     JMP SH
  88. SET0H ENDP
  89.  
  90. OVER PROC
  91.     MOV OVERFLOW, 1
  92.     SUB ONE, 10
  93.     JMP OV
  94. OVER ENDP
  95.  
  96. RET1 PROC
  97.     CMP OVERFLOW, 1
  98.     JE ADD1
  99.     A1:
  100.     CMP IS, 1
  101.     JE IS1
  102.     CALL REVERSE
  103. RET1 ENDP
  104.  
  105. ADD1 PROC
  106.     MOV RESULT[BX], 49
  107.     INC BX
  108.     JMP A1
  109. ADD1 ENDP
  110.  
  111. REVERSE PROC
  112.     DEC BX
  113.     CMP BX, 0
  114.     JL RETURN1
  115.     MOV DL, RESULT[BX]
  116.     MOV AH, 02H
  117.     INT 21H
  118.     CALL REVERSE
  119. REVERSE ENDP
  120.  
  121. IS1 PROC
  122.     DEC BX
  123.     CMP RESULT[BX], 48
  124.     JNE ADDBX
  125.     ABX:
  126.     MOV RESULT[BX], 45
  127.     INC BX
  128.     JMP REVERSE
  129. IS1 ENDP
  130.  
  131. ADDBX PROC
  132.     INC BX
  133.     JMP ABX
  134. ADDBX ENDP
  135.  
  136. AOUND PROC
  137.         DEC SI
  138.         DEC DI
  139.        
  140.         MOV AL, STRING1[SI]
  141.         MOV ONE, AL
  142.         CMP SI, 1
  143.         JLE SET0L
  144.         SL:
  145.         MOV AL, ONE
  146.         SUB AL, 48
  147.         MOV ONE, AL
  148.        
  149.         MOV AL, STRING2[DI]
  150.         MOV TWO, AL
  151.         CMP DI, 1
  152.         JLE SET0H
  153.         SH:
  154.         MOV AL, TWO
  155.         SUB AL, 48
  156.         MOV TWO, AL
  157.        
  158.         MOV AL, END1
  159.         ADD AL, END2
  160.         CMP AL, 2
  161.         JE RET1
  162.        
  163.         MOV AL, ONE
  164.         ADD AL, TWO
  165.         ADD AL, OVERFLOW
  166.         MOV OVERFLOW, 0
  167.         MOV ONE, AL
  168.         CMP ONE, 10
  169.         JAE OVER
  170.         OV:
  171.        
  172.         MOV AL, ONE
  173.         ADD AL, 48
  174.         MOV RESULT[BX], AL
  175.         INC BX
  176.         CALL AOUND
  177. AOUND ENDP
  178.  
  179. SET0LH PROC
  180.     MOV ONE, 48
  181.     MOV END2, 1
  182.     JMP SLH
  183. SET0LH ENDP
  184.  
  185. SET0HH PROC
  186.     MOV TWO, 48
  187.     MOV END1, 1
  188.     JMP SHH
  189. SET0HH ENDP
  190.  
  191. SUB71 PROC
  192.     SUB AL, 7
  193.     JMP S71
  194. SUB71 ENDP
  195.  
  196. SUB72 PROC
  197.     SUB AL, 7
  198.     JMP S72
  199. SUB72 ENDP
  200.  
  201. ADD1H PROC
  202.     MOV RESULT[BX], 49
  203.     INC BX
  204.     JMP ADH
  205. ADD1H ENDP
  206.  
  207. RET2 PROC
  208.     CMP OVERFLOW, 1
  209.     JE ADD1H
  210.     ADH:
  211.     CALL REVERSEH
  212. RET2 ENDP
  213.  
  214. REVERSEH PROC
  215.     DEC BX
  216.     CMP BX, 0
  217.     JL RETURN2
  218.     MOV DL, RESULT[BX]
  219.     CMP DL, 57
  220.     JA ADD7
  221.     A7:
  222.     MOV AH, 02H
  223.     INT 21H
  224.     CALL REVERSEH
  225. REVERSEH ENDP
  226.  
  227. ADD7 PROC
  228.     ADD DL, 7
  229.     JMP A7
  230. ADD7 ENDP
  231.  
  232. OVERH PROC
  233.     MOV OVERFLOW, 1
  234.     SUB ONE, 16
  235.     JMP OVH
  236. OVERH ENDP
  237.  
  238. AOUNH PROC
  239.         DEC SI
  240.         DEC DI
  241.        
  242.         MOV AL, STRING1[SI]
  243.         MOV ONE, AL
  244.         CMP SI, 1
  245.         JLE SET0LH
  246.         SLH:
  247.         MOV AL, ONE
  248.         SUB AL, 48
  249.         CMP AL, 17
  250.         JAE SUB71
  251.         S71:
  252.         MOV ONE, AL
  253.        
  254.         MOV AL, STRING2[DI]
  255.         MOV TWO, AL
  256.         CMP DI, 1
  257.         JLE SET0HH
  258.         SHH:
  259.         MOV AL, TWO
  260.         SUB AL, 48
  261.         CMP AL, 17
  262.         JAE SUB72
  263.         S72:    
  264.         MOV TWO, AL
  265.        
  266.         MOV AL, END1
  267.         ADD AL, END2
  268.         CMP AL, 2
  269.         JE RET2
  270.        
  271.         MOV AL, ONE
  272.         ADD AL, TWO
  273.         ADD AL, OVERFLOW
  274.         MOV OVERFLOW, 0
  275.         MOV ONE, AL
  276.         CMP ONE, 16
  277.         JAE OVERH
  278.         OVH:
  279.        
  280.         MOV AL, ONE
  281.         ADD AL, 48
  282.         MOV RESULT[BX], AL
  283.         INC BX
  284.         CALL AOUNH
  285. AOUNH ENDP
  286.  
  287. SET0L1 PROC
  288.     MOV ONE, 48
  289.     MOV END2, 1
  290.     CMP IS, 2
  291.     JE SL1R
  292.     JMP SL1
  293. SET0L1 ENDP
  294.  
  295. SET0H1 PROC
  296.     MOV TWO, 48
  297.     MOV END1, 1
  298.     CMP IS, 2
  299.     JE SH1R
  300.     JMP SH1
  301. SET0H1 ENDP
  302.  
  303. OVER1 PROC
  304.     MOV OVERFLOW, 1
  305.     ADD ONE, 10
  306.     JMP OV1
  307. OVER1 ENDP
  308.  
  309. REVERSE3 PROC
  310.     DEC BX
  311.     CMP BX, 0
  312.     JL RET3
  313.     JE DRAWMINUS
  314.     DM:
  315.     MOV DL, RESULT[BX]
  316.     MOV AH, 02H
  317.     INT 21H
  318.     CALL REVERSE
  319. REVERSE3 ENDP
  320.  
  321. DRAW PROC
  322.     CMP MINUS, 1
  323.     JE DRAWMINUS
  324.     JMP REVERSE3
  325. DRAW ENDP
  326.  
  327. DRAWMINUS PROC
  328.     DEC BX
  329.     MOV RESULT[BX], 45
  330.     INC BX
  331.     JMP REVERSE3
  332. DRAWMINUS ENDP
  333.  
  334. RET3 PROC
  335.     CMP IS, 0
  336.     JA RETURN4
  337.     JMP RETURN3
  338. RET3 ENDP
  339.  
  340. SOUN PROC
  341.         DEC SI
  342.         DEC DI
  343.        
  344.         MOV AL, STRING1[SI]
  345.         MOV ONE, AL
  346.         CMP SI, 1
  347.         JLE SET0L1
  348.         SL1:
  349.         MOV AL, ONE
  350.         SUB AL, 48
  351.         MOV ONE, AL
  352.        
  353.         MOV AL, STRING2[DI]
  354.         MOV TWO, AL
  355.         CMP DI, 1
  356.         JLE SET0H1
  357.         SH1:
  358.         MOV AL, TWO
  359.         SUB AL, 48
  360.         MOV TWO, AL
  361.        
  362.         MOV AL, END1
  363.         ADD AL, END2
  364.         CMP AL, 2
  365.         JE DRAW
  366.        
  367.         MOV AL, ONE
  368.         SUB AL, TWO
  369.         SUB AL, OVERFLOW
  370.         MOV OVERFLOW, 0
  371.         MOV ONE, AL
  372.         CMP ONE, 0
  373.         JL OVER1
  374.         OV1:
  375.        
  376.         MOV AL, ONE
  377.         ADD AL, 48
  378.         MOV RESULT[BX], AL
  379.         INC BX
  380.         CALL SOUN
  381. SOUN ENDP
  382.  
  383. OVER1R PROC
  384.     MOV OVERFLOW, 1
  385.     ADD TWO, 10
  386.     JMP OV1R
  387. OVER1R ENDP
  388.  
  389. SOUNREVERSE PROC
  390.         DEC SI
  391.         DEC DI
  392.        
  393.         MOV AL, STRING1[SI]
  394.         MOV ONE, AL
  395.         CMP SI, 1
  396.         JLE SET0L1
  397.         SL1R:
  398.         MOV AL, ONE
  399.         SUB AL, 48
  400.         MOV ONE, AL
  401.        
  402.         MOV AL, STRING2[DI]
  403.         MOV TWO, AL
  404.         CMP DI, 1
  405.         JLE SET0H1
  406.         SH1R:
  407.         MOV AL, TWO
  408.         SUB AL, 48
  409.         MOV TWO, AL
  410.        
  411.         MOV AL, END1
  412.         ADD AL, END2
  413.         CMP AL, 2
  414.         JE DRAW
  415.        
  416.         MOV AL, TWO
  417.         SUB AL, ONE
  418.         SUB AL, OVERFLOW
  419.         MOV OVERFLOW, 0
  420.         MOV TWO, AL
  421.         CMP TWO, 0
  422.         JL OVER1R
  423.         OV1R:
  424.        
  425.         MOV AL, TWO
  426.         ADD AL, 48
  427.         MOV RESULT[BX], AL
  428.         INC BX
  429.         CALL SOUNREVERSE
  430. SOUNREVERSE ENDP
  431.  
  432. ADDMINUS1 PROC
  433.     MOV END1, 1
  434.     MOV SI, 2
  435.     MOV BL, STRING2[SI]
  436.     CMP BL, 45
  437.     JE ADDMINUS2
  438.     JMP C4
  439. ADDMINUS1 ENDP
  440.  
  441. ADDMINUS2 PROC
  442.     MOV END2, 1
  443.     JMP C4
  444. ADDMINUS2 ENDP
  445.  
  446. COMPARE1 PROC
  447.     CMP END2, 1
  448.     JE COMPARE11
  449.     CMP END2, 0
  450.     JE COMPARE10
  451. COMPARE1 ENDP
  452.  
  453. COMPARE11 PROC
  454.     MOV SI, 2
  455.     MOV STRING1[SI], 48
  456.     MOV STRING2[SI], 48
  457.    
  458.     MOV SI, 1
  459.     MOV BL, STRING1[SI]
  460.     XOR BH, BH
  461.     MOV SI, BX
  462.     ADD SI, 2
  463.      
  464.     MOV DI, 1
  465.     MOV BL, STRING2[DI]
  466.     XOR BH, BH
  467.     MOV DI, BX
  468.     ADD DI, 2
  469.      
  470.     MOV BX, 0
  471.     MOV OVERFLOW, 0
  472.     MOV END1, 0
  473.     MOV END2, 0
  474.    
  475.     MOV IS, 1
  476.     CALL AOUND
  477.      
  478. COMPARE11 ENDP
  479.  
  480. SUB101 PROC
  481.     MOV SI, 2
  482.     MOV STRING1[SI], 48
  483.     MOV IS, 1
  484.     MOV MINUS, 1
  485.    
  486.     MOV SI, 1
  487.     MOV BL, STRING1[SI]
  488.     XOR BH, BH
  489.     MOV SI, BX
  490.     ADD SI, 2
  491.      
  492.     MOV DI, 1
  493.     MOV BL, STRING2[DI]
  494.     XOR BH, BH
  495.     MOV DI, BX
  496.     ADD DI, 2
  497.      
  498.     MOV BX, 0
  499.     MOV OVERFLOW, 0
  500.     MOV END1, 0
  501.     MOV END2, 0
  502.    
  503.     CALL SOUN
  504. SUB101 ENDP
  505.  
  506. SUB102 PROC
  507.     MOV SI, 2
  508.     MOV STRING1[SI], 48
  509.     MOV IS, 2
  510.     MOV MINUS, 0
  511.    
  512.     MOV SI, 1
  513.     MOV BL, STRING1[SI]
  514.     XOR BH, BH
  515.     MOV SI, BX
  516.     ADD SI, 2
  517.      
  518.     MOV DI, 1
  519.     MOV BL, STRING2[DI]
  520.     XOR BH, BH
  521.     MOV DI, BX
  522.     ADD DI, 2
  523.      
  524.     MOV BX, 0
  525.     MOV OVERFLOW, 0
  526.     MOV END1, 0
  527.     MOV END2, 0
  528.    
  529.     CALL SOUNREVERSE
  530. SUB102 ENDP
  531.  
  532. COMPARE10 PROC
  533.     MOV SI, 1
  534.     MOV DL, STRING1[SI]
  535.     MOV DH, STRING2[SI]
  536.     DEC DL
  537.     CMP DL, DH
  538.     JA SUB101
  539.     JB SUB102
  540.     MOV SI, 2
  541.     MOV DI, 1
  542.    
  543.     CALL COMPARE
  544.     C10:
  545.     CMP GREAT, 1
  546.     JE SUB101
  547.     CMP GREAT, 2
  548.     JE SUB102
  549. COMPARE10 ENDP
  550.  
  551. COMPARE0 PROC
  552.     CMP END2, 1
  553.     JE COMPARE01
  554.     CMP END2, 0
  555.     JE COMPARE00
  556. COMPARE0 ENDP
  557.  
  558. COMPARE00 PROC
  559.     MOV SI, 1
  560.     MOV BL, STRING1[SI]
  561.     XOR BH, BH
  562.     MOV SI, BX
  563.     ADD SI, 2
  564.      
  565.     MOV DI, 1
  566.     MOV BL, STRING2[DI]
  567.     XOR BH, BH
  568.     MOV DI, BX
  569.     ADD DI, 2
  570.      
  571.     MOV BX, 0
  572.     MOV OVERFLOW, 0
  573.     MOV END1, 0
  574.     MOV END2, 0
  575.  
  576.     MOV IS, 2
  577.     CALL AOUND
  578. COMPARE00 ENDP
  579.  
  580. COMPARE01 PROC
  581.     MOV SI, 1
  582.     MOV DL, STRING1[SI]
  583.     MOV DH, STRING2[SI]
  584.     DEC DL
  585.     CMP DL, DH
  586.     JA SUB011
  587.     JB SUB012
  588.     MOV SI, 1
  589.     MOV DI, 2
  590.    
  591.     CALL COMPARE
  592.     C01:
  593.     CMP GREAT, 1
  594.     JE SUB011
  595.     CMP GREAT, 2
  596.     JE SUB012
  597. COMPARE01 ENDP
  598.  
  599. SUB011 PROC
  600.     MOV SI, 2
  601.     MOV STRING2[SI], 48
  602.     MOV IS, 1
  603.     MOV MINUS, 0
  604.    
  605.     MOV SI, 1
  606.     MOV BL, STRING1[SI]
  607.     XOR BH, BH
  608.     MOV SI, BX
  609.     ADD SI, 2
  610.      
  611.     MOV DI, 1
  612.     MOV BL, STRING2[DI]
  613.     XOR BH, BH
  614.     MOV DI, BX
  615.     ADD DI, 2
  616.      
  617.     MOV BX, 0
  618.     MOV OVERFLOW, 0
  619.     MOV END1, 0
  620.     MOV END2, 0
  621.    
  622.     CALL SOUN
  623. SUB011 ENDP
  624.  
  625. SUB012 PROC
  626.     MOV SI, 2
  627.     MOV STRING2[SI], 48
  628.     MOV IS, 2
  629.     MOV MINUS, 1
  630.    
  631.     MOV SI, 1
  632.     MOV BL, STRING1[SI]
  633.     XOR BH, BH
  634.     MOV SI, BX
  635.     ADD SI, 2
  636.      
  637.     MOV DI, 1
  638.     MOV BL, STRING2[DI]
  639.     XOR BH, BH
  640.     MOV DI, BX
  641.     ADD DI, 2
  642.      
  643.     MOV BX, 0
  644.     MOV OVERFLOW, 0
  645.     MOV END1, 0
  646.     MOV END2, 0
  647.    
  648.     CALL SOUNREVERSE
  649. SUB012 ENDP
  650.  
  651. EQUAL PROC
  652.     CMP BL, '$'
  653.     JE PRINT0
  654.     JMP COMPARE
  655. EQUAL ENDP
  656.  
  657. PRINT0 PROC
  658.     MOV AH, 02H
  659.     MOV DL, 48
  660.     INT 21H
  661.     JMP RETURN4
  662. PRINT0 ENDP
  663.  
  664. COMPARE PROC
  665.     INC SI
  666.     INC DI
  667.     MOV BL, STRING1[SI]
  668.     MOV BH, STRING2[DI]
  669.     CMP BL, BH
  670.     JE EQUAL
  671.     JA SET1
  672.     JB SET2
  673. COMPARE ENDP
  674.  
  675. SET2 PROC
  676.     MOV GREAT, 2
  677.     CMP END1, 1
  678.     JE C10
  679.     JMP C01
  680. SET2 ENDP
  681.  
  682. SET1 PROC
  683.     MOV GREAT, 1
  684.     CMP END1, 0
  685.     JE C01
  686.     JMP C10
  687. SET1 ENDP
  688.  
  689. MINUS2 PROC
  690.     MOV SI, 2
  691.     MOV BL, STRING2[SI]
  692.     CMP BL, 45
  693.     JE ADDMINUS2
  694.     JMP C4
  695. MINUS2 ENDP
  696.  
  697. SETEND11 PROC
  698.     MOV END1, 1
  699.     JMP E1
  700. SETEND11 ENDP
  701.    
  702. SETEND10 PROC
  703.     MOV END1, 0
  704.     JMP E1
  705. SETEND10 ENDP
  706.  
  707. SETEND21 PROC
  708.     MOV END2, 1
  709.     JMP E2
  710. SETEND21 ENDP
  711.  
  712. SETEND20 PROC
  713.     MOV END2, 0
  714.     JMP E2
  715. SETEND20 ENDP
  716.  
  717. ADDZERO PROC
  718.     CMP C2, 0
  719.     JE AZ
  720.     MOV RESULT[BX], 0
  721.     INC BX
  722.     DEC C2
  723.     CALL ADDZERO
  724. ADDZERO ENDP
  725.  
  726. CHECKLAST PROC
  727.     MOV AL, SUM[BX]
  728.     CMP AL, '$'
  729.     JE CHL
  730.     INC BX
  731.     CALL CHECKLAST
  732. CHECKLAST ENDP
  733.  
  734. PRINTM PROC
  735.     CMP IS, 1
  736.     JE EXML
  737.  
  738.     CMP MINUS, 1
  739.     JE MMS
  740.     MMM:
  741.    
  742.     MOV BX, 0
  743.     CALL CHECKLAST
  744.     CHL:
  745.     CALL SHOWM
  746. PRINTM ENDP
  747.  
  748. MMS PROC
  749.     MOV DL, 45
  750.     MOV AH, 02H
  751.     INT 21H
  752.     JMP MMM
  753. MMS ENDP
  754.  
  755. SHOWM PROC
  756.     DEC BX
  757.     CMP BX, 0
  758.     JL RETURN5
  759.     MOV AH, 02H
  760.     MOV DL, SUM[BX]
  761.     ADD DL, 48
  762.     INT 21H
  763.     CALL SHOWM
  764. SHOWM ENDP
  765.  
  766. MOSN PROC
  767.     MOV BX, NUMOFSTEP
  768.     MOV C2, BX
  769.     MOV BX, 0
  770.     CALL ADDZERO
  771.     AZ:
  772.     MOV AX, 1
  773.     ADD AL, M2
  774.     CMP DI, AX
  775.     JE PRINTM
  776.    
  777.     MOV SI, COUNT
  778.     MOV AL, STRING2[DI]
  779.     MOV TWO, AL
  780.     SUB TWO, 48
  781.     MOV OVERFLOW, 0
  782.     JMP STEP
  783.     STE:
  784.    
  785.     MOV BX, 0
  786.     MOV SI, 0
  787.     MOV C1, 0
  788.     MOV END1, 0
  789.     MOV END2, 0
  790.     MOV OVERFLOW, 0
  791.     CALL MULSUM
  792.     MS:
  793.     INC NUMOFSTEP
  794.     DEC DI
  795.     CALL MOSN
  796. MOSN ENDP
  797.  
  798. ADDSM PROC
  799.     CMP OVERFLOW, 0
  800.     JNE ADDDIGIT
  801.     AD:
  802.     JMP STE
  803. ADDSM ENDP
  804.  
  805. ADDDIGIT PROC
  806.     MOV AL, OVERFLOW
  807.     MOV RESULT[BX], AL
  808.     INC BX
  809.     JMP AD
  810. ADDDIGIT ENDP
  811.  
  812. STEP PROC
  813.         MOV AX, 1
  814.         ADD AL, M1
  815.         CMP SI, AX
  816.         JE ADDSM
  817.         MOV AL, STRING1[SI]
  818.         SUB AL, 48
  819.        
  820.         MUL TWO
  821.         ADD AL, OVERFLOW
  822.         MOV OVERFLOW, 0
  823.         MOV ONE, AL
  824.         CMP ONE, 10
  825.         JAE OVERM
  826.         OVM:
  827.        
  828.         MOV AL, ONE
  829.         MOV RESULT[BX], AL
  830.         INC BX
  831.         DEC SI
  832.         CALL STEP
  833. STEP ENDP
  834.  
  835. OVERM PROC
  836.     MOV AL, ONE
  837.     XOR AH, AH
  838.     DIV TEN
  839.     MOV OVERFLOW, AL
  840.     MOV ONE, AH
  841.     JMP OVM
  842. OVERM ENDP
  843.  
  844. SET0LSM PROC
  845.     MOV AL, 0
  846.     MOV END1, 1
  847.     JMP SLSM
  848. SET0LSM ENDP
  849.  
  850. SET0HSM PROC
  851.     MOV AL, 0
  852.     MOV END2, 1
  853.     JMP SHSM
  854. SET0HSM ENDP
  855.  
  856. OVERSM PROC
  857.     MOV OVERFLOW, 1
  858.     SUB ONE, 10
  859.     JMP OVSM
  860. OVERSM ENDP
  861.  
  862. RETSM PROC
  863.     CMP OVERFLOW, 1
  864.     JE ADD1SM
  865.     A1SM:
  866.     MOV BX, 0
  867.     CALL CHANGESM
  868.     RM:
  869.     MOV BX, 0
  870.     JMP MS
  871. RETSM ENDP
  872.  
  873. ADD1SM PROC
  874.     MOV HELP[BX], 49
  875.     INC BX
  876.     JMP A1SM
  877. ADD1SM ENDP
  878.  
  879. CHANGESM PROC
  880.     MOV AL, HELP[BX]
  881.     CMP AL, '$'
  882.     JE RM
  883.     MOV SUM[BX], AL
  884.     INC BX
  885.     CALL CHANGESM
  886. CHANGESM ENDP
  887.  
  888. MULSUM PROC
  889.         MOV AL, SUM[SI]
  890.         CMP AL, '$'
  891.         JE SET0LSM
  892.         SLSM:
  893.         MOV ONE, AL
  894.        
  895.         MOV AL, RESULT[BX]
  896.         CMP AL, '$'
  897.         JE SET0HSM
  898.         SHSM:
  899.         MOV TWO, AL
  900.        
  901.         MOV AL, END1
  902.         ADD AL, END2
  903.         CMP AL, 2
  904.         JE RETSM
  905.        
  906.         MOV AL, ONE
  907.         ADD AL, TWO
  908.         ADD AL, OVERFLOW
  909.         MOV OVERFLOW, 0
  910.         MOV ONE, AL
  911.         CMP ONE, 10
  912.         JAE OVERSM
  913.         OVSM:
  914.        
  915.         MOV AL, ONE
  916.        
  917.         MOV C2, BX
  918.         MOV BX, C1
  919.         MOV HELP[BX], AL
  920.         MOV BX, C2
  921.         INC BX
  922.         INC SI
  923.         INC C1
  924.         CALL MULSUM
  925. MULSUM ENDP
  926.  
  927. ;----------------------------------------
  928.  
  929. SETMINUS PROC
  930.     MOV MINUS, 1
  931.     JMP SM
  932. SETMINUS ENDP
  933.  
  934. COPY PROC
  935.     CMP SI, 1
  936.     JE CP
  937.     MOV AL, STRING1[SI]
  938.     MOV STRING2[SI], AL
  939.     DEC SI
  940.     CALL COPY
  941. COPY ENDP
  942.  
  943. EOFN PROC
  944.     CMP GREAT, 0
  945.     JE PRINTEM
  946.    
  947.     CMP MINUS, 1
  948.     JE SM0
  949.     EOFNM:
  950.    
  951.     MOV SI, 2
  952.     CALL TESTP
  953.     T:
  954.    
  955.     MOV SI, 0
  956.     CMP CURSTEP, 0
  957.     JE SETSICOUNT
  958.     JNE SETSI
  959.     SSC:
  960.     ;MOV SI, COUNT
  961.     MOV DI, LEN
  962.     MOV END1, 0
  963.     MOV END2, 0
  964.     ;MOV COUNT, SI
  965.     MOV NUMOFSTEP, 0
  966.     CALL MOSN
  967.     EXML:
  968.    
  969.     MOV SI, 0
  970.     CALL MSTS
  971.     MSTS1:
  972.    
  973.     DEC SI
  974.     MOV DI, 2
  975.     CALL COPYSUM
  976.     CS1:
  977.    
  978.     DEC GREAT
  979.     CALL EOFN
  980. EOFN ENDP
  981.  
  982. TESTP PROC
  983.     MOV AL, STRING1[SI]
  984.     CMP AL, '$'
  985.     JE T
  986.     MOV AH, 02H
  987.     MOV DL, AL
  988.     INT 21H
  989.     INC SI
  990.     CALL TESTP
  991. TESTP ENDP
  992.  
  993. COPYSUM PROC
  994.     CMP SI, 0
  995.     JL CS1
  996.     MOV AL, SUM[SI]
  997.     ADD AL, 48
  998.     MOV STRING1[DI], AL
  999.     INC DI
  1000.     DEC SI
  1001.     CALL COPYSUM
  1002. COPYSUM ENDP
  1003.  
  1004. SETSICOUNT PROC
  1005.     MOV SI, LEN
  1006.     MOV COUNT, SI
  1007.     JMP SSC
  1008. SETSICOUNT ENDP
  1009.  
  1010. SETSI PROC
  1011.     MOV AL, STRING1[SI]
  1012.    
  1013.     CMP AL, '$'
  1014.     JE SETCOUNT
  1015.     INC SI
  1016.     CALL SETSI
  1017. SETSI ENDP
  1018.  
  1019. SETCOUNT PROC
  1020.     DEC SI
  1021.     MOV COUNT, SI
  1022.     JMP SSC
  1023. SETCOUNT ENDP
  1024.  
  1025. MSTS PROC
  1026.     MOV AL, SUM[SI]
  1027.     CMP AL, '$'
  1028.     JMP MSTS1
  1029.     INC SI
  1030.     CALL MSTS
  1031. MSTS ENDP
  1032.  
  1033. SETCURMINUS PROC
  1034.     MOV CURMINUS, 1
  1035.     JMP SCM
  1036. SETCURMINUS ENDP
  1037.  
  1038. SM0 PROC
  1039.     MOV AL, 1
  1040.     XOR AL, CURMINUS
  1041.     JMP EOFNM
  1042. SM0 ENDP
  1043.  
  1044. PRINTEM PROC
  1045.     CMP MINUS, 1
  1046.     JE PM
  1047.     PMM:
  1048.    
  1049.     MOV BX, 0
  1050.     CALL CHECKLASTE
  1051.     CHLE:
  1052.    
  1053.     CALL SHOWME
  1054. PRINTEM ENDP
  1055.  
  1056. CHECKLASTE PROC
  1057.     MOV AL, SUM[BX]
  1058.     CMP AL, '$'
  1059.     JE CHLE
  1060.     INC BX
  1061.     CALL CHECKLASTE
  1062. CHECKLASTE ENDP
  1063.  
  1064. PM PROC
  1065.     MOV AH, 02H
  1066.     MOV DL, 45
  1067.     INT 21H
  1068.     JMP PMM
  1069. PM ENDP
  1070.  
  1071. SHOWME PROC
  1072.     DEC BX
  1073.     CMP BX, 0
  1074.     JL RETURN6
  1075.     MOV DL, SUM[BX]
  1076.     ADD DL, 48
  1077.     MOV AH, 02H
  1078.     INT 21H
  1079.     CALL SHOWME
  1080. SHOWME ENDP
  1081.  
  1082. FAST1 PROC
  1083.     MOV DX, OFFSET STRING1
  1084.     ADD DX, 2
  1085.     MOV AH, 09H
  1086.     INT 21H
  1087.     JMP RETURN6
  1088. FAST1 ENDP
  1089.  
  1090. START:
  1091.       MOV AX, DATA
  1092.       MOV DS, AX
  1093.      
  1094.      
  1095.       ;-------ADDING OF UNSIGNED NUMBERS (DECIMAL)--------
  1096.      
  1097.       ;CALL SCAN1
  1098.       ;CALL SCAN2
  1099.      
  1100.       ;MOV SI, 1
  1101.       ;MOV BL, STRING1[SI]
  1102.       ;XOR BH, BH
  1103.       ;MOV SI, BX
  1104.       ;ADD SI, 2
  1105.      
  1106.       ;MOV DI, 1
  1107.       ;MOV BL, STRING2[DI]
  1108.       ;XOR BH, BH
  1109.       ;MOV DI, BX
  1110.       ;ADD DI, 2
  1111.      
  1112.       ;MOV BX, 0
  1113.       ;MOV OVERFLOW, 0
  1114.       ;MOV END1, 0
  1115.       ;MOV END2, 0
  1116.       ;CALL AOUND
  1117.      
  1118.       RETURN1:
  1119.           CMP IS, 0
  1120.           JA RETURN4
  1121.           MOV AH, 02H
  1122.           MOV DL, 10
  1123.           INT 21H
  1124.           MOV AH, 02H
  1125.           MOV DL, 13
  1126.           INT 21H
  1127.      
  1128.      
  1129.       ;MOV SI, 1
  1130.       ;CALL CLEAR1
  1131.       ;MOV SI, 1
  1132.       ;CALL CLEAR2
  1133.      
  1134.       ;-----------------------------------------
  1135.      
  1136.      
  1137.       ;-------ADDING OF UNSIGNED NUMBERS (HEX)--------
  1138.      
  1139.       ;CALL SCAN1
  1140.       ;CALL SCAN2
  1141.      
  1142.       ;MOV SI, 1
  1143.       ;MOV BL, STRING1[SI]
  1144.       ;XOR BH, BH
  1145.       ;MOV SI, BX
  1146.       ;ADD SI, 2
  1147.      
  1148.       ;MOV DI, 1
  1149.       ;MOV BL, STRING2[DI]
  1150.       ;XOR BH, BH
  1151.       ;MOV DI, BX
  1152.       ;ADD DI, 2
  1153.      
  1154.       ;MOV BX, 0
  1155.       ;MOV OVERFLOW, 0
  1156.       ;MOV END1, 0
  1157.       ;MOV END2, 0
  1158.       ;CALL AOUNH
  1159.      
  1160.       RETURN2:
  1161.           MOV AH, 02H
  1162.           MOV DL, 10
  1163.           INT 21H
  1164.           MOV AH, 02H
  1165.           MOV DL, 13
  1166.           INT 21H
  1167.      
  1168.       ;MOV SI, 1
  1169.       ;CALL CLEAR1
  1170.       ;MOV SI, 1
  1171.       ;CALL CLEAR2
  1172.      
  1173.       ;----------------------------------------
  1174.          
  1175.          
  1176.       ;-------SUBTRACT OF UNSIGNED NUMBERS--------
  1177.      
  1178.       ;CALL SCAN1
  1179.       ;CALL SCAN2
  1180.      
  1181.       ;MOV SI, 1
  1182.       ;MOV BL, STRING1[SI]
  1183.       ;XOR BH, BH
  1184.       ;MOV SI, BX
  1185.       ;ADD SI, 2
  1186.      
  1187.       ;MOV DI, 1
  1188.       ;MOV BL, STRING2[DI]
  1189.       ;XOR BH, BH
  1190.       ;MOV DI, BX
  1191.       ;ADD DI, 2
  1192.      
  1193.       ;MOV BX, 0
  1194.       ;MOV OVERFLOW, 0
  1195.       ;MOV END1, 0
  1196.       ;MOV END2, 0
  1197.       ;MOV IS, 0
  1198.       ;MOV MINUS, 0
  1199.       ;CALL SOUN
  1200.      
  1201.       RETURN3:
  1202.           MOV AH, 02H
  1203.           MOV DL, 10
  1204.           INT 21H
  1205.           MOV AH, 02H
  1206.           MOV DL, 13
  1207.           INT 21H
  1208.      
  1209.       ;MOV SI, 1
  1210.       ;CALL CLEAR1
  1211.       ;MOV SI, 1
  1212.       ;CALL CLEAR2
  1213.      
  1214.       ;----------------------------------------
  1215.      
  1216.      
  1217.       ;-------ADDING OF SIGNED NUMBERS--------
  1218.      
  1219.       ;CALL SCAN1
  1220.       ;CALL SCAN2
  1221.      
  1222.       ;MOV SI, 2
  1223.       ;MOV BL, STRING1[SI]
  1224.       ;CMP BL, 45
  1225.       ;JE ADDMINUS1
  1226.       ;JNE MINUS2
  1227.       C4:
  1228.      
  1229.       ;CMP END1, 1
  1230.       ;JE COMPARE1
  1231.       ;CMP END1, 0
  1232.       ;JE COMPARE0
  1233.      
  1234.       RETURN4:
  1235.           MOV AH, 02H
  1236.           MOV DL, 10
  1237.           INT 21H
  1238.           MOV AH, 02H
  1239.           MOV DL, 13
  1240.           INT 21H
  1241.      
  1242.       ;MOV SI, 1
  1243.       ;CALL CLEAR1
  1244.       ;MOV SI, 1
  1245.       ;CALL CLEAR2
  1246.      
  1247.       ;-----------------------------------------
  1248.      
  1249.      
  1250.       ;-------MULTIPLY OF SIGNED NUMBERS--------
  1251.      
  1252.       ;CALL SCAN1
  1253.       ;CALL SCAN2
  1254.      
  1255.       ;MOV SI, 2
  1256.       ;MOV BL, STRING1[SI]
  1257.       ;MOV BH, STRING2[SI]
  1258.      
  1259.       ;MOV END1, 0
  1260.       ;MOV END2, 0
  1261.      
  1262.       ;CMP BL, 45
  1263.       ;JE SETEND11
  1264.       ;JNE SETEND10
  1265.       E1:
  1266.      
  1267.       ;CMP BH, 45
  1268.       ;JE SETEND21
  1269.       ;JNE SETEND20
  1270.       E2:
  1271.      
  1272.       ;MOV AL, END1
  1273.       ;ADD AL, END2
  1274.       ;MOV IS, AL
  1275.      
  1276.       ;MOV AL, END1
  1277.       ;MOV M1, AL
  1278.       ;MOV AL, END2
  1279.       ;MOV M2, AL
  1280.      
  1281.       ;MOV AH, END1
  1282.       ;XOR AH, END2
  1283.       ;MOV MINUS, AH
  1284.      
  1285.       ;MOV SI, 1
  1286.       ;MOV BL, STRING1[SI]
  1287.       ;XOR BH, BH
  1288.       ;MOV SI, BX
  1289.       ;ADD SI, 2
  1290.      
  1291.       ;MOV DI, 1
  1292.       ;MOV BL, STRING2[DI]
  1293.       ;XOR BH, BH
  1294.       ;MOV DI, BX
  1295.       ;ADD DI, 2
  1296.      
  1297.       ;DEC DI
  1298.       ;DEC SI
  1299.       ;MOV END1, 0
  1300.       ;MOV END2, 0
  1301.       ;MOV COUNT, SI
  1302.       ;MOV NUMOFSTEP, 0
  1303.       ;MOV IS, 0
  1304.       ;CALL MOSN
  1305.      
  1306.       RETURN5:
  1307.           MOV AH, 02H
  1308.           MOV DL, 10
  1309.           INT 21H
  1310.           MOV AH, 02H
  1311.           MOV DL, 13
  1312.           INT 21H
  1313.      
  1314.       ;MOV SI, 1
  1315.       ;CALL CLEAR1
  1316.       ;MOV SI, 1
  1317.       ;CALL CLEAR2
  1318.      
  1319.       ;-----------------------------------------
  1320.      
  1321.      
  1322.       ;-------EXPONENTIATION OF SIGNED NUMBERS--------
  1323.      
  1324.       CALL SCAN1
  1325.       CALL SCAN2
  1326.      
  1327.       MOV AH, 02H
  1328.       MOV DL, 55
  1329.       INT 21H
  1330.      
  1331.       MOV MINUS, 0
  1332.       MOV IS, 1
  1333.      
  1334.       MOV SI, 2
  1335.       MOV AL, STRING1[SI]
  1336.       CMP AL, 45
  1337.       JE SETMINUS
  1338.       SM:
  1339.    
  1340.    
  1341.          
  1342.       MOV CURMINUS, 0
  1343.       CMP MINUS, 1
  1344.       JE SETCURMINUS
  1345.       SCM:
  1346.      
  1347.       MOV SI, 1
  1348.       MOV BL, STRING1[SI]
  1349.       XOR BH, BH
  1350.       MOV SI, BX
  1351.       ADD SI, 1
  1352.       MOV COUNT, SI
  1353.       MOV LEN, SI
  1354.      
  1355.       MOV DI, 2
  1356.       MOV AL, STRING2[DI]
  1357.       MOV GREAT, AL
  1358.       DEC GREAT
  1359.       MOV AL, GREAT
  1360.       SUB AL, 48
  1361.       MOV GREAT, AL
  1362.      
  1363.       CMP GREAT, 0
  1364.       JE FAST1
  1365.      
  1366.    
  1367.      
  1368.       MOV SI, COUNT
  1369.       CALL COPY
  1370.       CP:
  1371.      
  1372.       MOV CURSTEP, 0
  1373.       CALL EOFN
  1374.      
  1375.       RETURN6:
  1376.           MOV AH, 02H
  1377.           MOV DL, 10
  1378.           INT 21H
  1379.           MOV AH, 02H
  1380.           MOV DL, 13
  1381.           INT 21H
  1382.      
  1383.       ;-----------------------------------------
  1384.          
  1385.       MOV AH, 4CH
  1386.       INT 21H
  1387.      
  1388. CODE ENDS
  1389. END START
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement