Хостинг портала RFpro.ru: Московский хостер Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64 РАССЫЛКИ ПОРТАЛА RFPRO.RU Лучшие эксперты по данной тематике Номер выпуска: | 1479 | Дата выхода: | 07.10.2011, 21:30 | Администратор рассылки: | Лысков Игорь Витальевич (Старший модератор) | Подписчиков / экспертов: | 198 / 61 | Вопросов / ответов: | 2 / 2 | Консультация # 184129: Здравствуйте! У меня возникли сложности с таким вопросом: Необходимо написать программу которая будет заменять в конце слов 2 последние буквы на строчные. Кое-что у меня получается а кое-что нет) помогите пожалуйста. вот исходник. Программа написана на TASM.) Код : Консультация # 184130: Уважаемые эксперты! Помогите. Необходимо,используя TASM, модель памяти tiny , написать программу выполняющая следующие действие: Заменить в исходном файле предлоги "от" предлогами "до" и наоборот, последовательно заменяя частицы "не" союзами "но" и наоборот. переменные двойное слово (dw). ... Консультация # 184129: Здравствуйте! У меня возникли сложности с таким вопросом: Необходимо написать программу которая будет заменять в конце слов 2 последние буквы на строчные. Кое-что у меня получается а кое-что нет) помогите пожалуйста. вот исходник. Программа написана на TASM.)
Код : data segment handle dw ? path db 'primer.txt' cx_ db ? dx_ db ? i dw 0 oError db "Cant open file for read",0dh,0ah sError db "Cant to read of the end file ",0dh,0ah wError db "Cant to write to file",0dh,0ah rError db "Cant Read file",0dh,0ah text db 0 text_size = $ - offset text buf db 0 data ends sseg segment stack db 200 dup(?) sseg ends code segment assume cs:code, ds:data, ss:sseg start: mov ax,data mov ds,ax ;открываем файл для чтения и записи mov ah,3dh mov al,2 lea dx,path int 21h jc PrevError mov handle,ax ;читаем файл read: inc i mov ah,3fh mov bx,handle lea dx,buf mov cx,1 int 21h jc PrevRError cmp buf,' ' je read cmp buf,13 je ToBack ; переходим если конец, иначе читаем дальше jmp read PrevError: jmp OpenError PrevRError: jmp ReadError ToBack: mov ah,42h mov al,0 xor dx,dx xor cx,cx int 21h jc ReadError sub i,4 xor si,si wRead: inc si mov ah,3fh mov bx,handle mov cx,1 lea dx,buf int 21h jc ReadError cmp si,i jg mLit jmp wRead mLit: mov ah,3fh mov bx,handle mov cx,1 lea dx,buf int 21h jc ReadError cmp buf,41h jb mLitN cmp buf,5Ah ja mLit cmp buf,13h je close mLitN: cmp buf,5Ah ja mLit add buf,20h mov ah,40h mov bx,handle lea dx,buf mov cx,1 int 21h jc WriteError jmp mLit ReadError: lea dx,rError mov ah,9 int 21h jmp close OpenError: lea dx,oError mov ah,9 int 21h mov ah,0 int 16h jmp close WriteError: lea dx,wError mov ah,9 int 21h mov ah,0 int 16h jmp close close: mov ah,3eh int 21h exit: mov ah,0 int 16h mov ax,4ch int 21h code ends end start Дата отправки: 02.10.2011, 18:49 Вопрос задал: Посетитель - 382089 (Посетитель) Всего ответов: 1 Страница онлайн-консультации » Консультирует Лысков Игорь Витальевич (Старший модератор): Здравствуйте, Посетитель - 382089! Посмотрите, как я сделал. Предполагается, что файл не больше 32к, иначе обработается только первые 32к Особо не комментировал, думаю, разберетесь...
Код : data segment path db 'primer.txt',0 oError db "Open file error",0dh,0ah,'$' wError db "Write file error",0dh,0ah,'$' rError db "Read file error",0dh,0ah,'$' zError db "File lenght is 0",0dh,0ah,'$' sOk db "Ok",0dh,0ah,'$' sSep db ",.:;!?()" lenSep equ $-sSep buf db 8000h dup (?) data ends sseg segment stack dw 200 dup (?) sseg ends code segment assume cs:code, ds:data, ss:sseg start: mov ax, data mov ds, ax ;открываем файл для чтения и записи mov ax, 3d02h lea dx, path int 21h jc OpenError mov bx, ax mov cx, 8000h lea dx, buf mov si, dx mov ah, 3fh int 21h jc ReadError mov cx, ax jcxz ZeroError ;длина файла 0 push cx xor dx, dx main: lodsb ;Проверим на разделитель cmp al, ' ' jbe SepFound push cx lea di, sSep mov cx, lenSep repne scasb pop cx jz SepFound ;разделитель inc dx ;не разделитель считаем jmp next SepFound: call ChangeWord ;меняем слово (для первого разделителя за словом) next: loop main ;учтем последнее слово inc si ;для единообразия call ChangeWord xor cx, cx ;указатель файла в начало xor dx, dx mov ax, 4200h int 21h pop cx ;длина файла lea dx, buf mov ah, 40h int 21h lea dx, sOk Print: mov ah, 9 int 21h mov ah, 3eh int 21h WaitKey: mov ah, 0 int 16h mov ax, 4c00h int 21h ReadError: lea dx,rError jmp Print WriteError: lea dx,wError jmp Print ZeroError: lea dx,zError jmp Print OpenError: lea dx,oError mov ah,9 int 21h jmp WaitKey ChangeWord proc test dx, dx jz CW_ret cmp byte ptr [si-2], 'A' jb CW_NextLetter cmp byte ptr [si-2], 'Z' ja CW_NextLetter add byte ptr [si-2], 20h CW_NextLetter: dec dx jz CW_ret cmp byte ptr [si-3], 'A' jb CW_ret cmp byte ptr [si-3], 'Z' ja CW_ret add byte ptr [si-3], 20h CW_ret: xor dx, dx ret ChangeWord endp code ends end start Консультация # 184130: Уважаемые эксперты! Помогите. Необходимо,используя TASM, модель памяти tiny , написать программу выполняющая следующие действие: Заменить в исходном файле предлоги "от" предлогами "до" и наоборот, последовательно заменяя частицы "не" союзами "но" и наоборот. переменные двойное слово (dw).
Дата отправки: 02.10.2011, 19:37 Вопрос задал: Посетитель - 382086 (Посетитель) Всего ответов: 1 Страница онлайн-консультации » Консультирует Лысков Игорь Витальевич (Старший модератор): Здравствуйте, Посетитель - 382086! Вот такая программа:
Код : ;Заменить в исходном файле предлоги "от" предлогами "до" и наоборот, ;последовательно заменяя частицы "не" союзами "но" и наоборот. data segment path db 'primer.txt',0 oError db "Open file error",0dh,0ah,'$' wError db "Write file error",0dh,0ah,'$' rError db "Read file error",0dh,0ah,'$' zError db "File lenght is 0",0dh,0ah,'$' sOk db "Ok",0dh,0ah,'$' sSep db ",.:;!?()" ;разделители слов, <= 20h проверяются сравнением lSep equ $-sSep ;количество sWords dw 'то','од','ен','он' ;требуемые слова, в "перевернутом" виде! lWords equ ($-sWords)/2 ;количество sNew dw 'од','то','он','ен' ;на эти меняем buf db 8000h dup (?) data ends sseg segment stack dw 200 dup (?) sseg ends code segment assume cs:code, ds:data, ss:sseg start: mov ax, data mov ds, ax mov es, ax ;открываем файл для чтения и записи mov ax, 3d02h lea dx, path int 21h jc OpenError mov bx, ax ;читаем весь файл mov cx, 8000h lea dx, buf mov si, dx mov ah, 3fh int 21h jc ReadError mov cx, ax ;длина файла jcxz ZeroError ;длина файла 0? push cx ;сохраним для записи xor dx, dx ;счнтчик букв слов main: lodsb ;Проверим на разделитель cmp al, ' ' jbe SepFound ;все, которые ' ',9,0dh,0ah,... push cx lea di, sSep ;точка, запятая и другие mov cx, lSep repne scasb pop cx jz SepFound ;разделитель? inc dx ;не разделитель - считаем jmp next SepFound: call ChangeWord ;проверяем и, если надо, меняем слово next: loop main ;учтем последнее слово inc si ;для единообразия call ChangeWord xor cx, cx ;указатель файла в начало xor dx, dx mov ax, 4200h int 21h pop cx ;длина файла lea dx, buf mov ah, 40h int 21h lea dx, sOk Print: mov ah, 9 int 21h mov ah, 3eh int 21h WaitKey: mov ah, 0 int 16h mov ax, 4c00h int 21h ReadError: lea dx,rError jmp Print WriteError: lea dx,wError jmp Print ZeroError: lea dx,zError jmp Print OpenError: lea dx,oError mov ah,9 int 21h jmp WaitKey ChangeWord proc cmp dx, 2 ;проверяем только слова длины 2 jne CW_ret push cx mov ax, [si-3] ;проверяемое слово lea di, sWords ;поищем среди требуемых mov cx, lWords repne scasw pop cx jne CW_ret ;не равно - ничего не делаем sub di, offset sWords ;смещение от начала массива (на 2 дальше) mov ax, sNew[di-2] ;на это меняем mov [si-3], ax ;меняем CW_ret: xor dx, dx ;сбрасываем длину слова ret ChangeWord endp code ends end start
Оценить выпуск | Задать вопрос экспертам главная страница | стать участником | получить консультацию техническая поддержка | восстановить логин/пароль Дорогой читатель! Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно! МЫ РАБОТАЕМ ДЛЯ ВАС! |
Комментариев нет:
Отправить комментарий