Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- sg segment 'code'
- assume cs:sg, ds:sg, es:sg
- org 256
- start proc
- ;######################
- ; МАКРОСЫ ИЗ МЕТОДИЧКИ
- ;------------------------------макрос ввода значений
- mReadAX MACRO buf, sz
- local input, startOfConvert, endofConvert
- push bx
- push cx
- push dx
- input:
- mov [buf], sz
- mov dx, offset [buf]
- mov ah, 0ah
- int 21h
- mov ah, 02h
- mov dl, 0Dh
- int 21h
- mov ah, 02h
- mov dl, 0Ah
- int 21h
- xor ah, ah
- cmp ah, [buf][1]
- jz input
- xor cx, cx
- mov cl, [buf][1]
- xor ax, ax
- xor bx, bx
- xor dx, dx
- mov bx, offset [buf][2]
- cmp [buf][2], "-"
- jne startOfConvert
- inc bx
- dec cl
- startOfConvert:
- mov dx, 10
- mul dx
- cmp ax, 8000h
- jae input
- mov dl, [bx]
- sub dl, "0"
- add ax, dx
- cmp ax, 8000h
- jae input
- inc bx
- loop startOfConvert
- cmp [buf][2], "-"
- jne endofConvert
- neg ax
- endofConvert:
- pop dx
- pop cx
- pop bx
- endm mReadAX
- ;------------------------------макрос вывода сообщений на экран
- Print MACRO str
- push ax
- push dx
- mov ah, 09h
- mov dx, offset str
- int 21h
- pop dx
- pop ax
- ENDM Print
- ;------------------------------макрос вывода результата
- mWriteAx macro
- local convert, write
- push ax
- push bx
- push cx
- push dx
- push di
- mov cx, 10
- xor di, di
- or ax, ax
- jns convert
- push ax
- mov dx, "-"
- mov ah, 02h
- int 21h
- pop ax
- neg ax
- convert:
- xor dx, dx
- div cx
- add dl, "0"
- inc di
- push dx
- or ax, ax
- jnz convert
- write:
- pop dx
- mov ah, 02h
- int 21h
- dec di
- jnz write
- pop di
- pop dx
- pop cx
- pop bx
- pop ax
- endm mWriteAx
- ; МАКРОСЫ ИЗ МЕТОДИЧКИ
- ;######################
- start:
- xor ax, ax
- xor bx, bx
- xor cx, cx
- xor dx, dx
- xor si, si
- xor di, di
- xor bp, bp
- ; открытие файла
- mov ah, 3Dh
- mov al, 0 ; для чтения
- mov dx, offset file1
- int 21h
- mov bp, ax ; ax -> bp
- ; чтение из файла
- mov si, 0
- mov dx, offset s
- _read_byte:
- mov bx, bp
- mov ah, 3Fh
- mov cx, 1
- int 21h
- inc dx ;следующий символ
- inc si ;количество считанных символов
- cmp ax, 0
- jne _read_byte
- dec si
- mov len, si
- ;закрытие файла
- mov bx, bp
- mov ah, 3Eh
- int 21h
- xor ax, ax
- xor bx, bx
- xor cx, cx
- xor dx, dx
- xor si, si
- xor di, di
- xor bp, bp
- mov si, offset s ; откуда начать
- mov bp, offset s ; где закончить
- add bp, len
- mov al, 13 ; перевод строки
- ;mov cx, 0 ; подсчёт линий
- _read_offset:
- ; читаем сдвиг
- Print in_text
- mReadAX inbuf, 5
- mov dx, ax
- _cmp_char:
- cmp si, bp
- je _end_of_text
- mov al, '.'
- cmp [si], al
- je _sign
- mov al, ','
- cmp [si], al
- je _sign
- mov al, '!'
- cmp [si], al
- je _sign
- mov al, '?'
- cmp [si], al
- je _sign
- nop
- inc si
- jmp _cmp_char
- _sign:
- mov di, si
- lodsb ; строковая к комманда
- add al, dl
- stosb
- inc cx
- jmp _cmp_char
- _end_of_text:
- Print out_text
- mov ax, cx
- mWriteAx
- mov ah, 3Dh
- mov al, 1; для записи
- mov dx, offset file2
- int 21h
- mov bp, ax ; ax -> bp
- ; запись в файл
- mov si, len
- mov di, 0
- mov dx, offset s
- _write_byte:
- mov bx, bp
- mov ah, 40h
- mov cx, 1
- int 21h
- inc dx ;следующий символ
- inc di
- cmp di, si
- jne _write_byte
- ;закрытие файла
- mov bx, bp
- mov ah, 3Eh
- int 21h
- mov ax, 4c00h
- int 21h
- s db 800 dup(0)
- len dw 0
- file1 db "IN.TXT", 0
- file2 db "OUT.TXT", 0
- in_text db 'Select offset: ','$'
- inbuf db 10 dup (0)
- out_text db 'Replace count: ','$'
- start endp
- sg ends
- end start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement