Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- mReplaceString macro s, len
- push ax
- push bx
- push cx
- push dx
- push di
- push si
- push bp
- mov di, offset s ; откуда начать
- mov bp, offset s ; где закончить
- add bp, len
- mov al, 13 ; перевод строки
- mov cx, 0 ; подсчёт линий
- _search_new_line:
- cld
- scasb
- pushf
- cmp di, bp ; конец тексте
- ; считаем, что типа конец строки найден
- jge _new_line_found_end_text
- popf
- jnz _search_new_line
- jmp _new_line_found
- _new_line_found_end_text:
- inc di
- popf
- _new_line_found:
- mov dx, cx
- and dx, 1 ; проверка на нечётность
- cmp dx, 1
- pushf
- ; в нечётном числе последний бит 1
- inc cx; увеличиваем счётчик пройденйх линий
- popf
- jne _skip_line
- push ax
- push bx
- push cx
- push dx
- push di
- dec di
- xor ax, ax
- xor bx, bx
- xor cx, cx
- xor dx, dx
- ; si - начало строки
- ; di - конец строки
- mov al, ' ' ; разбмение по символу пробела
- mov ah, '!' ; заменяем символом восклицательного знака
- mov cx, si ;начало слова
- mov bx, si ;конец слова
- ;mov dx, di ;конец строки
- jmp _search_for_space
- _next_letter:
- inc bx
- _search_for_space:
- cmp al, [bx]
- je _space_found
- pushf
- cmp bx, di
- jge _space_found_end_line
- ; конец строки
- popf
- jmp _next_letter
- _space_found_end_line:
- popf
- _space_found:
- cmp bx, cx
- je _no_word
- mov dx, bx ; конец слова
- sub dx, cx ; минус начало
- push dx
- and dx, 1; нечётная длинна слова
- cmp dx, 1
- pop dx
- jne _skip_replace
- push bx
- shr dx, 1
- mov bx, cx
- add bx, dx
- mov [bx], ah
- pop bx
- _skip_replace:
- _no_word:
- cmp bx, di
- jge _end_line
- inc bx
- mov cx, bx
- jmp _search_for_space
- _end_line:
- pop di
- pop dx
- pop cx
- pop bx
- pop ax
- _skip_line:
- cmp di, bp ; конец тексте
- jge _stop
- inc di ; был на 10 стал на новой строке
- mov si, di
- jmp _search_new_line
- _stop:
- pop bp
- pop si
- pop di
- pop dx
- pop cx
- pop bx
- pop ax
- endm mReplaceString
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement