Advertisement
tzanany

Count Common String On String

May 4th, 2012
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. SSTACK SEGMENT STACK 'STACK'
  2.     DW 50H DUP  (?)
  3. SSTACK ENDS
  4. SDATA SEGMENT
  5.     ARR1 DB 10 DUP (?)
  6.     ARR2 DB 10 DUP (?)
  7.     ARR2_LENGTH DB 0H
  8.     COUNT DB 30H,'$' ; 30 Is The ASCII Code For 0
  9.     MES1 DB 'ENTER FIRST STRING:$'
  10.     MES2 DB 'ENTER SEARCH STRING:$'
  11.     MES3 DB 'STRING2 ON STRING1 COUNT:$'
  12. SDATA ENDS
  13. SCODE SEGMENT
  14.     ASSUME CS:SCODE, DS:SDATA, SS:SSTACK
  15.     START:
  16.         MOV AX,SDATA
  17.         MOV DS,AX
  18.        
  19.         ; Print MES1 From Memory
  20.         MOV AH, 9
  21.         LEA DX, MES1   
  22.         INT 21H
  23.        
  24.         XOR SI,SI
  25.         ; Get Chars From Keyboard
  26.         GETS_1:
  27.             MOV AH, 1
  28.             INT 21H
  29.             MOV ARR1[SI],AL
  30.             INC SI
  31.             CMP SI,10
  32.             JE GETS_END_1
  33.             CMP AL,'$'
  34.         JNE GETS_1
  35.         GETS_END_1:
  36.         MOV BYTE PTR ARR1[SI],'$'
  37.        
  38.         ; Focus The Next Line (Move Cursor)
  39.         MOV DL, 10
  40.         MOV AH, 2      
  41.         INT 21H
  42.         ; Focus Start Of The Line
  43.         MOV DL, 13
  44.         MOV AH, 2  
  45.         INT 21H
  46.        
  47.         ; Print MES2 From Memory
  48.         MOV AH, 9
  49.         LEA DX, MES2   
  50.         INT 21H
  51.        
  52.         XOR SI,SI
  53.         ; Get Chars From Keyboard
  54.         MOV CX,9
  55.         GETS_2:
  56.             MOV AH,1
  57.             INT 21H
  58.             MOV ARR2[SI],AL
  59.             INC SI
  60.             CMP AL,'$'
  61.             JE GETS_END_2
  62.             LOOP GETS_2
  63.         GETS_END_2:
  64.             MOV AL,'$'
  65.             MOV ARR2[SI],AL
  66.        
  67.         ; Count Size Of String2
  68.         XOR SI,SI
  69.         COUNTER:
  70.             MOV AL,ARR2[SI]
  71.             INC SI
  72.             INC ARR2_LENGTH
  73.             CMP AL,'$'
  74.         JNE COUNTER
  75.        
  76.         XOR SI,SI      
  77.         ;First Loop - String1
  78.         FOR1:
  79.             XOR BX,BX
  80.             MOV AL,ARR1[SI]
  81.             INC SI
  82.             ; Second Loop - String2 on String1
  83.             FOR2:
  84.                 MOV AH,ARR2[BX]
  85.                 ADD BX,1
  86.                 ; Check If Char(From String2) Is Not Exist on String1
  87.                 CMP AH, AL
  88.                 JNE END_FOR2
  89.                 MOV AL,ARR1[BX + SI-1]
  90.                 ; Check If Its The End Of The String2
  91.                 CMP AH,'$'
  92.             JNE FOR2
  93.             END_FOR2:
  94.             ; Check If The Equals Counter Is Same As String2 Length
  95.             CMP ARR2_LENGTH,BL
  96.             JE IF_CL_EQUALS        
  97.             ; Check If Its The End Of The String1
  98.             CMP AL,'$'
  99.             JE END_FOR
  100.         JNE FOR1
  101.         IF_CL_EQUALS:
  102.             INC COUNT
  103.             JMP FOR1
  104.         END_FOR:
  105.  
  106.         ; Focus The Next Line (Move Cursor)
  107.         MOV DL, 10
  108.         MOV AH, 2      
  109.         INT 21H
  110.         ; Focus Start Of The Line
  111.         MOV DL, 13
  112.         MOV AH, 2  
  113.         INT 21H
  114.        
  115.         ; Print MES3 From Memory
  116.         MOV AH, 9
  117.         LEA DX, MES3   
  118.         INT 21H
  119.        
  120.         ; Print COUNT From Memory
  121.         MOV AH, 9
  122.         LEA DX, COUNT  
  123.         INT 21H
  124.        
  125.         ;End Program Back To Dos
  126.         MOV AH,4CH
  127.         INT 21H
  128. SCODE ENDS
  129.     END START
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement