Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- CSEG SEGMENT
- ORG 100H
- ;************************************
- SAVE_INDEX_REG MACRO
- PUSH DI
- PUSH SI
- ENDM
- LOAD_INDEX_REG MACRO
- POP SI
- POP DI
- ENDM
- ;************************************
- SKIP_SPACE MACRO
- MOVE_SPACE:
- INC SI
- CMP STRING[SI], ' '
- JNE END_MOVE_SPACE
- JMP MOVE_SPACE
- END_MOVE_SPACE:
- ENDM
- SKIP_SPACE_IN MACRO STR
- MOVE_SPACE:
- INC SI
- CMP STR[SI], ' '
- JNE END_MOVE_SPACE
- JMP MOVE_SPACE
- END_MOVE_SPACE:
- ENDM
- NEXT_WORD_IN MACRO STR
- MOVE:
- CMP STR[SI], 0DH
- JZ END_STR
- INC SI
- CMP STR[SI], ' '
- JZ END_MOVE
- JMP MOVE
- END_MOVE:
- ENDM
- GET_WORD_LENGTH MACRO STR
- MOV AX, 0
- COUNT:
- CMP STR[SI], ' '
- JZ END_COUNT
- CMP STR[SI], 0DH
- JZ END_COUNT
- INC SI
- INC AX
- JMP COUNT
- END_COUNT:
- ENDM
- ; DELETE WORD IN STRING FONT OF SUBSTRING
- START:
- CALL GET_STRING ; get initial string
- CALL NEW_LINE ;
- CALL GET_SUBSTRING ; get substring to delete
- CLD
- MOV SI, 2 ; CURRENT
- MOV DI, 2 ; PREVIOUS
- MOV AX, 0 ; LENGTH OF CURRENT WORD
- MOVE_STR: ; MAIN LOOP
- MOV DI, SI ;
- MOV BL, STRING[1] ; BL = LENGTH OF INITIAL STRING
- CMP SI, BX ; IF CURRENT POINTER = LENGTH JUMP TO END
- JNB END_STR ;
- NEXT_WORD_IN STRING
- SKIP_SPACE_IN STRING
- SAVE_INDEX_REG
- GET_WORD_LENGTH STRING
- LOAD_INDEX_REG
- SAVE_INDEX_REG
- MOV BL, SUBSTRING[1]
- CMP AL, BL
- JNE END_CMP
- LEA DI, SUBSTRING[2]
- LEA SI, STRING[SI]
- MOV CX, AX
- REPE CMPSB
- JNE END_CMP
- LOAD_INDEX_REG
- SWAP_LOOP:
- CMP STRING[SI], 0DH
- JE END_SWAP
- MOV DH, STRING[SI]
- MOV DL, STRING[DI]
- MOV STRING[SI], DL
- MOV STRING[DI], DH
- INC SI
- INC DI
- JMP SWAP_LOOP
- END_SWAP:
- MOV STRING[DI], '$'
- MOV SI, DI
- JMP MOVE_STR
- END_CMP:
- LOAD_INDEX_REG
- JMP MOVE_STR
- END_STR:
- MOV AL, STRING[1]
- MOV SI, AX
- MOV STRING[SI+3], '$'
- CALL NEW_LINE
- CALL PRINT_STRING
- INT 20H
- ;************************************
- PRINT_STRING PROC
- MOV DX, OFFSET STRING + 2
- MOV AH, 9
- INT 21H
- RET
- PRINT_STRING ENDP
- NEW_LINE PROC
- MOV DX, OFFSET LINE
- MOV AH, 9
- INT 21H
- RET
- NEW_LINE ENDP
- GET_STRING PROC
- MOV DX, OFFSET STRING
- MOV AH, 10
- INT 21H
- RET
- GET_STRING ENDP
- GET_SUBSTRING PROC
- MOV DX, OFFSET SUBSTRING
- MOV AH, 10
- INT 21H
- RET
- GET_SUBSTRING ENDP
- ;************************************
- MAX_LENGTH EQU 200
- LINE DB 13,10, '$'
- STRING DB MAX_LENGTH DUP('2')
- DB '$'
- SUBSTRING DB 30 DUP('1')
- SUBLENGTH DW ?
- STRING1 DB 'ololo lololo delete me from here',
- CSEG ENDS
- END START
Add Comment
Please, Sign In to add comment