Advertisement
Void-voiD

Untitled

Jan 6th, 2020
1,441
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.     MORE DW ?
  31. DATA ENDS
  32.  
  33. CODE SEGMENT USE16 PUBLIC
  34.  
  35. CLEAR1 PROC
  36.         MOV STRING1[SI], '$'
  37.         INC SI
  38.         CMP SI, 99
  39.         JNE CLEAR1
  40.         RET
  41. CLEAR1 ENDP
  42.  
  43. CLEAR2 PROC
  44.         MOV STRING2[SI], '$'
  45.         INC SI
  46.         CMP SI, 99
  47.         JNE CLEAR2
  48.         RET
  49. CLEAR2 ENDP
  50.  
  51. SCAN1 PROC
  52.         mov dx, offset string1
  53.         mov ax, 0
  54.         mov ah, 0Ah
  55.         int 21h
  56.        
  57.         mov dx, offset dummy
  58.         mov ah, 09h
  59.         int 21h
  60.        
  61.         mov dx, offset string1
  62.         RET
  63. SCAN1 ENDP
  64.  
  65. SCAN2 PROC
  66.         mov dx, offset string2
  67.         mov ax, 0
  68.         mov ah, 0Ah
  69.         int 21h
  70.        
  71.         mov dx, offset dummy
  72.         mov ah, 09h
  73.         int 21h
  74.        
  75.         mov dx, offset string2
  76.         RET
  77. SCAN2 ENDP
  78.  
  79. ADDZERO PROC
  80.     CMP C2, 0
  81.     JE AZ
  82.     MOV RESULT[BX], 0
  83.     INC BX
  84.     DEC C2
  85.     CALL ADDZERO
  86. ADDZERO ENDP
  87.  
  88. MOSN PROC
  89.     MOV BX, NUMOFSTEP
  90.     MOV C2, BX
  91.     MOV BX, 0
  92.     CALL ADDZERO
  93.     AZ:
  94.     MOV AX, 2
  95.     ADD AX, MORE
  96.     CMP DI, AX
  97.     JL EXML
  98.    
  99.     MOV SI, COUNT
  100.     MOV AL, STRING2[DI]
  101.     MOV TWO, AL
  102.     SUB TWO, 48
  103.     MOV OVERFLOW, 0
  104.     JMP STEP
  105.     STE:
  106.    
  107.     MOV BX, 0
  108.     MOV SI, 0
  109.     MOV C1, 0
  110.     MOV END1, 0
  111.     MOV END2, 0
  112.     MOV OVERFLOW, 0
  113.     CALL MULSUM
  114.     MS:
  115.     INC NUMOFSTEP
  116.     DEC DI
  117.     CALL MOSN
  118. MOSN ENDP
  119.  
  120. ADDSM PROC
  121.     CMP OVERFLOW, 0
  122.     JNE ADDDIGIT
  123.     AD:
  124.     JMP STE
  125. ADDSM ENDP
  126.  
  127. ADDDIGIT PROC
  128.     MOV AL, OVERFLOW
  129.     MOV RESULT[BX], AL
  130.     INC BX
  131.     JMP AD
  132. ADDDIGIT ENDP
  133.  
  134. STEP PROC
  135.         MOV AX, 2
  136.         ADD AX, MORE
  137.         CMP SI, AX
  138.         JL ADDSM
  139.         MOV AL, STRING1[SI]
  140.         SUB AL, 48
  141.        
  142.         MUL TWO
  143.         ADD AL, OVERFLOW
  144.         MOV OVERFLOW, 0
  145.         MOV ONE, AL
  146.         CMP ONE, 10
  147.         JAE OVERM
  148.         OVM:
  149.        
  150.         MOV AL, ONE
  151.         MOV RESULT[BX], AL
  152.         INC BX
  153.         DEC SI
  154.         CALL STEP
  155. STEP ENDP
  156.  
  157. OVERM PROC
  158.     MOV AL, ONE
  159.     XOR AH, AH
  160.     DIV TEN
  161.     MOV OVERFLOW, AL
  162.     MOV ONE, AH
  163.     JMP OVM
  164. OVERM ENDP
  165.  
  166. SET0LSM PROC
  167.     MOV AL, 0
  168.     MOV END1, 1
  169.     JMP SLSM
  170. SET0LSM ENDP
  171.  
  172. SET0HSM PROC
  173.     MOV AL, 0
  174.     MOV END2, 1
  175.     JMP SHSM
  176. SET0HSM ENDP
  177.  
  178. OVERSM PROC
  179.     MOV OVERFLOW, 1
  180.     SUB ONE, 10
  181.     JMP OVSM
  182. OVERSM ENDP
  183.  
  184. RETSM PROC
  185.     CMP OVERFLOW, 1
  186.     JE ADD1SM
  187.     A1SM:
  188.     MOV BX, 0
  189.     CALL CHANGESM
  190.     RM:
  191.     MOV BX, 0
  192.     JMP MS
  193. RETSM ENDP
  194.  
  195. ADD1SM PROC
  196.     MOV HELP[BX], 1
  197.     INC BX
  198.     JMP A1SM
  199. ADD1SM ENDP
  200.  
  201. CHANGESM PROC
  202.     MOV AL, HELP[BX]
  203.     CMP AL, '$'
  204.     JE RM
  205.     MOV SUM[BX], AL
  206.     INC BX
  207.     CALL CHANGESM
  208. CHANGESM ENDP
  209.  
  210. MULSUM PROC
  211.         MOV AL, SUM[SI]
  212.         CMP AL, '$'
  213.         JE SET0LSM
  214.         SLSM:
  215.         MOV ONE, AL
  216.        
  217.         MOV AL, RESULT[BX]
  218.         CMP AL, '$'
  219.         JE SET0HSM
  220.         SHSM:
  221.         MOV TWO, AL
  222.        
  223.         MOV AL, END1
  224.         ADD AL, END2
  225.         CMP AL, 2
  226.         JE RETSM
  227.        
  228.         MOV AL, ONE
  229.         ADD AL, TWO
  230.         ADD AL, OVERFLOW
  231.         MOV OVERFLOW, 0
  232.         MOV ONE, AL
  233.         CMP ONE, 10
  234.         JAE OVERSM
  235.         OVSM:
  236.        
  237.         MOV AL, ONE
  238.        
  239.         MOV C2, BX
  240.         MOV BX, C1
  241.         MOV HELP[BX], AL
  242.         MOV BX, C2
  243.         INC BX
  244.         INC SI
  245.         INC C1
  246.         CALL MULSUM
  247. MULSUM ENDP
  248.  
  249. ;----------------------------------------
  250.  
  251. SETMINUS PROC
  252.     MOV MINUS, 1
  253.     MOV MORE, 1
  254.     JMP SM
  255. SETMINUS ENDP
  256.  
  257. COPY PROC
  258.     CMP SI, 0
  259.     JL CP
  260.     MOV AL, STRING1[SI]
  261.     MOV STRING2[SI], AL
  262.     DEC SI
  263.     CALL COPY
  264. COPY ENDP
  265.  
  266. EOFN PROC
  267.     CMP GREAT, 0
  268.     JE PRINTEM
  269.    
  270.     MOV AL, 1
  271.     XOR CURMINUS, AL
  272.    
  273.     MOV SI, 2
  274.     ADD SI, MORE
  275.     CMP CURSTEP, 0
  276.     JE SETSICOUNT
  277.     JNE SETSI
  278.     SSC:
  279.  
  280.     MOV DI, LEN
  281.     MOV END1, 0
  282.     MOV END2, 0
  283.     MOV NUMOFSTEP, 0
  284.     CALL MOSN
  285.     EXML:
  286.    
  287.     MOV SI, 0
  288.     CALL MSTS
  289.     MSTS1:
  290.     DEC SI
  291.    
  292.     MOV DI, 2
  293.     ADD DI, MORE
  294.     CALL COPYSUM
  295.     CS1:
  296.     SUB DI, 2
  297.     MOV AX, DI
  298.     MOV SI, 1
  299.     MOV STRING1[SI], AL
  300.    
  301.     MOV SI, 0
  302.     CALL CLEARSUM
  303.     CCC:
  304.    
  305.     DEC GREAT
  306.     INC CURSTEP
  307.     CALL EOFN
  308. EOFN ENDP
  309.  
  310. CLEARSUM PROC
  311.     MOV AL, SUM[SI]
  312.     CMP AL, '$'
  313.     JE CCC
  314.     MOV AL, '$'
  315.     MOV SUM[SI], AL
  316.     INC SI
  317.    
  318.     CALL CLEARSUM
  319. CLEARSUM ENDP
  320.  
  321. COPYSUM PROC
  322.     CMP SI, 0
  323.     JL CS1
  324.     MOV AL, SUM[SI]
  325.     ADD AL, 48
  326.     MOV STRING1[DI], AL
  327.    
  328.     INC DI
  329.     DEC SI
  330.     CALL COPYSUM
  331. COPYSUM ENDP
  332.  
  333. SETSICOUNT PROC
  334.     MOV SI, LEN
  335.     MOV COUNT, SI
  336.     JMP SSC
  337. SETSICOUNT ENDP
  338.  
  339. SETSI PROC
  340.     MOV AL, STRING1[SI]
  341.     CMP AL, '$'
  342.     JE SETCOUNT
  343.     INC SI
  344.     CALL SETSI
  345. SETSI ENDP
  346.  
  347. SETCOUNT PROC
  348.     DEC SI
  349.     MOV COUNT, SI
  350.     JMP SSC
  351. SETCOUNT ENDP
  352.  
  353. MSTS PROC
  354.     MOV AL, SUM[SI]
  355.     CMP AL, '$'
  356.     JE MSTS1
  357.     INC SI
  358.     CALL MSTS
  359. MSTS ENDP
  360.  
  361. PRINTEM PROC
  362.     CMP CURMINUS, 1
  363.     JE PM
  364.     PMM:
  365.    
  366.     MOV BX, 2
  367.     ADD BX, MORE
  368.    
  369.     CALL SHOWME
  370. PRINTEM ENDP
  371.  
  372. PM PROC
  373.     CMP MINUS, 1
  374.     JNE PMM
  375.     MOV AH, 02H
  376.     MOV DL, 45
  377.     INT 21H
  378.     JMP PMM
  379. PM ENDP
  380.  
  381. SHOWME PROC
  382.     MOV AL, STRING1[BX]
  383.     CMP AL, '$'
  384.     JE RETURN6
  385.     MOV DL, AL
  386.     MOV AH, 02H
  387.     INT 21H
  388.     INC BX
  389.     CALL SHOWME
  390. SHOWME ENDP
  391.  
  392. FAST1 PROC
  393.     MOV DX, OFFSET STRING1
  394.     ADD DX, 2
  395.     MOV AH, 09H
  396.     INT 21H
  397.     JMP RETURN6
  398. FAST1 ENDP
  399.  
  400. START:
  401.       MOV AX, DATA
  402.       MOV DS, AX
  403.      
  404.       ;-------EXPONENTIATION OF SIGNED NUMBERS--------
  405.      
  406.       CALL SCAN1
  407.       CALL SCAN2
  408.      
  409.       MOV MORE, 0
  410.       MOV MINUS, 0
  411.      
  412.       MOV SI, 2
  413.       MOV AL, STRING1[SI]
  414.       CMP AL, 45
  415.       JE SETMINUS
  416.       SM:
  417.      
  418.       MOV AL, MINUS
  419.       MOV CURMINUS, AL
  420.      
  421.       MOV SI, 1
  422.       MOV BL, STRING1[SI]
  423.       XOR BH, BH
  424.       MOV SI, BX
  425.       ADD SI, 1
  426.       MOV COUNT, SI
  427.       MOV LEN, SI
  428.      
  429.       MOV DI, 2
  430.       MOV AL, STRING2[DI]
  431.       DEC AL
  432.       SUB AL, 48
  433.       MOV GREAT, AL
  434.      
  435.       CMP GREAT, 0
  436.       JE FAST1
  437.      
  438.       MOV SI, COUNT
  439.       CALL COPY
  440.       CP:
  441.      
  442.       MOV CURSTEP, 0
  443.       MOV AL, MINUS
  444.       MOV M1, AL
  445.       MOV M2, 0
  446.       CALL EOFN
  447.      
  448.       RETURN6:
  449.           MOV AH, 02H
  450.           MOV DL, 10
  451.           INT 21H
  452.           MOV AH, 02H
  453.           MOV DL, 13
  454.           INT 21H
  455.      
  456.       ;-----------------------------------------
  457.          
  458.       MOV AH, 4CH
  459.       INT 21H
  460.      
  461. CODE ENDS
  462. END START
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement