Guest User

Untitled

a guest
Jun 17th, 2018
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.09 KB | None | 0 0
  1. CSEG SEGMENT
  2. ORG 100H
  3.  
  4. ;************************************
  5.  
  6. SAVE_INDEX_REG MACRO
  7. PUSH DI
  8. PUSH SI
  9. ENDM
  10.  
  11. LOAD_INDEX_REG MACRO
  12. POP SI
  13. POP DI
  14. ENDM
  15.  
  16. ;************************************
  17.  
  18. SKIP_SPACE MACRO
  19. MOVE_SPACE:
  20. INC SI
  21.  
  22. CMP STRING[SI], ' '
  23. JNE END_MOVE_SPACE
  24. JMP MOVE_SPACE
  25. END_MOVE_SPACE:
  26. ENDM
  27.  
  28. SKIP_SPACE_IN MACRO STR
  29. MOVE_SPACE:
  30. INC SI
  31.  
  32. CMP STR[SI], ' '
  33. JNE END_MOVE_SPACE
  34. JMP MOVE_SPACE
  35. END_MOVE_SPACE:
  36. ENDM
  37.  
  38. NEXT_WORD_IN MACRO STR
  39. MOVE:
  40. CMP STR[SI], 0DH
  41. JZ END_STR
  42.  
  43. INC SI
  44.  
  45. CMP STR[SI], ' '
  46. JZ END_MOVE
  47. JMP MOVE
  48. END_MOVE:
  49. ENDM
  50.  
  51. GET_WORD_LENGTH MACRO STR
  52. MOV AX, 0
  53. COUNT:
  54. CMP STR[SI], ' '
  55. JZ END_COUNT
  56. CMP STR[SI], 0DH
  57. JZ END_COUNT
  58. INC SI
  59. INC AX
  60. JMP COUNT
  61. END_COUNT:
  62. ENDM
  63.  
  64. ; DELETE WORD IN STRING FONT OF SUBSTRING
  65. START:
  66. CALL GET_STRING ; get initial string
  67. CALL NEW_LINE ;
  68. CALL GET_SUBSTRING ; get substring to delete
  69.  
  70. CLD
  71. MOV SI, 2 ; CURRENT
  72. MOV DI, 2 ; PREVIOUS
  73. MOV AX, 0 ; LENGTH OF CURRENT WORD
  74.  
  75. MOVE_STR: ; MAIN LOOP
  76.  
  77. MOV DI, SI ;
  78. MOV BL, STRING[1] ; BL = LENGTH OF INITIAL STRING
  79. CMP SI, BX ; IF CURRENT POINTER = LENGTH JUMP TO END
  80. JNB END_STR ;
  81.  
  82. NEXT_WORD_IN STRING
  83. SKIP_SPACE_IN STRING
  84.  
  85. SAVE_INDEX_REG
  86. GET_WORD_LENGTH STRING
  87. LOAD_INDEX_REG
  88.  
  89. SAVE_INDEX_REG
  90. MOV BL, SUBSTRING[1]
  91. CMP AL, BL
  92. JNE END_CMP
  93. LEA DI, SUBSTRING[2]
  94. LEA SI, STRING[SI]
  95. MOV CX, AX
  96. REPE CMPSB
  97. JNE END_CMP
  98. LOAD_INDEX_REG
  99.  
  100. SWAP_LOOP:
  101. CMP STRING[SI], 0DH
  102. JE END_SWAP
  103.  
  104. MOV DH, STRING[SI]
  105. MOV DL, STRING[DI]
  106. MOV STRING[SI], DL
  107. MOV STRING[DI], DH
  108.  
  109. INC SI
  110. INC DI
  111.  
  112. JMP SWAP_LOOP
  113. END_SWAP:
  114. MOV STRING[DI], '$'
  115. MOV SI, DI
  116.  
  117. JMP MOVE_STR
  118.  
  119.  
  120. END_CMP:
  121.  
  122. LOAD_INDEX_REG
  123.  
  124. JMP MOVE_STR
  125. END_STR:
  126.  
  127.  
  128. MOV AL, STRING[1]
  129. MOV SI, AX
  130. MOV STRING[SI+3], '$'
  131.  
  132.  
  133. CALL NEW_LINE
  134. CALL PRINT_STRING
  135. INT 20H
  136.  
  137. ;************************************
  138.  
  139. PRINT_STRING PROC
  140. MOV DX, OFFSET STRING + 2
  141. MOV AH, 9
  142. INT 21H
  143. RET
  144. PRINT_STRING ENDP
  145.  
  146. NEW_LINE PROC
  147. MOV DX, OFFSET LINE
  148. MOV AH, 9
  149. INT 21H
  150. RET
  151. NEW_LINE ENDP
  152.  
  153. GET_STRING PROC
  154. MOV DX, OFFSET STRING
  155. MOV AH, 10
  156. INT 21H
  157. RET
  158. GET_STRING ENDP
  159.  
  160. GET_SUBSTRING PROC
  161. MOV DX, OFFSET SUBSTRING
  162. MOV AH, 10
  163. INT 21H
  164. RET
  165. GET_SUBSTRING ENDP
  166.  
  167. ;************************************
  168.  
  169. MAX_LENGTH EQU 200
  170. LINE DB 13,10, '$'
  171.  
  172.  
  173. STRING DB MAX_LENGTH DUP('2')
  174. DB '$'
  175.  
  176. SUBSTRING DB 30 DUP('1')
  177. SUBLENGTH DW ?
  178.  
  179. STRING1 DB 'ololo lololo delete me from here',
  180.  
  181.  
  182. CSEG ENDS
  183. END START
Add Comment
Please, Sign In to add comment