|
0 / 0 / 0
Регистрация: 22.10.2017
Сообщений: 29
|
|
Поменять в исходном файле буквы слов местами22.10.2017, 00:19. Показов 3051. Ответов 16
Метки нет (Все метки)
Программа должна быть на писана на языке Assembler. С комментариями.
Программа должна обрабатывать исходный текстовый файл с использованием функций DOS и формировать новый файл с результатами обработки исходного файла. Имя исходного и обработанного файлов задать в программе в виде ASCIIZ-строк. При обработке файла использовать следующую последовательность вызова функций DOS: 1. открытие исходного файла (функция 3DH); 2. создание нового файла, куда будут помещаться результаты обработки исходного файла (функция 3CH); 3. чтение исходного файла (функция 3FH); 4. обработка прочитанных данных; 5. запись обработанных данных в созданный файл (функция 40H); 6. закрытие файла с результатами обработки (функция 3EH); 7. закрытие исходного файла (функция 3EH). Для чтения данных из исходного файла может быть использован буфер, определенный в программе как массив байт или слов. Рекомендуемый размер буфера – 512 байт (256 слов). На шаге 4 обрабатываются данные, находящиеся в буфере, а на шаге 5 обработанные данные из буфера записываются в файл. Размер исходного файла для обработки выбрать меньшим или равным размеру буфера. Задание (для 4 пункта): Поменять в исходном файле буквы слов местами. Пример: windows -> swodniw.
0
|
|
| 22.10.2017, 00:19 | |
|
Ответы с готовыми решениями:
16
Поменять в исходном файле строки местами Заменить в исходном файле четные буквы слов на прописные
|
|
Модератор
|
|
| 22.10.2017, 15:55 | |
|
kristinka_15, само задание - несложное, но при реализации на ассемблере выльется в несколько сот строк. Там вся соль в том, что слово может оказаться частью в одном буфере, частью в следующем. Решение - буферизация ввода и вывода, т.е. реализация аналога сишных fread и fwrite.
Т.е. без вашего личного участия - не обойтись. Нужно будет организовать 2 буфера - один для чтения, другой для записи - иначе разделённое слово невозможно будет корректно записывать. Добавлено через 10 минут Я когда-то начинал, но не закончил запись в файл - она осталась неправильной, хотя с той задачей справлялась В текстовом файле переписать символы каждой строки в обратном порядке Чтение из файла, перевод строки в число Добавлено через 13 часов 17 минут kristinka_15, что-то сообщения потёрлись, поэтому ещё раз повторю. Соберите программку на простом C, которая будет решать задачу. И эту программу можно будет транслировать в асм. Я прикинул, она будет очень похожа на приведённую по первой ссылке.
0
|
|
|
780 / 412 / 75
Регистрация: 29.03.2013
Сообщений: 853
|
|
| 22.10.2017, 16:15 | |
|
1
|
|
|
Модератор
|
|||||||||||
| 22.10.2017, 18:28 | |||||||||||
|
Argogo, спасибо. Невнимательно прочёл условие, как-то сразу начал мысленно тестировать его на слабые места. Просто, доводилось парсить log на unicode, а для ускорения делать самостоятельную буферизацию (правда, на ЯВУ). И теперь всех подталкиваю на этот пагубный путь.
А раз так, то получается ерунда, в одно действие считывается один единственный буфер, обрабатывается и тут же сохраняется.- Добавлено через 54 минуты Так, без обработки строк файла - т.е. исходный файл просто копируется в результирующий. Осталось создать обработчик строк (строки)
Осталось обработать строки в буфере. Предположим (т.к. об этом нет в задании), что исходный (а следовательно и итоговый) файл содержит одну строку, в которой слова разделены пробелами и нет даже переводов строк - т.е. файл представляет из себя длинную строку. Тогда, можете воспользоваться алгоритмом выделения по ссылкам В строке в словах с четным номером изменить порядок букв на обратный Количество слов, содержащих более 3-х символов Добавлено через 17 минут Обработка
1
|
|||||||||||
|
0 / 0 / 0
Регистрация: 22.10.2017
Сообщений: 29
|
|
| 23.10.2017, 19:53 [ТС] | |
|
ФедосеевПавел, ничего не понятно... особенно что такое @@...
0
|
|
|
Модератор
|
|
| 23.10.2017, 21:13 | |
|
Сначала я набрал каркас программы - открытие файлов, чтение буфера, запись буфера, закрытие файлов - никакой обработки.
Зато компилируется а при выполнении копирует содержимое файла. Потом посидел, подумал и набрал 4-й пункт - обработку файла. Но не стал публиковать весь текст, а только сам 4-й пункт. Попробуйте запустить шаблонную программу, а потом скопируйте и вставьте в неё дополнение. Это будет ваше готовое задание. Символы @@ я добавляю для локальных меток - которые не должны быть видны за пределами данной процедуры. Но такое действует только в TASM и при добавлении специальной директивы. А добавляю - скорее, по инерции - можете удалить их во всём тексте.
1
|
|
|
0 / 0 / 0
Регистрация: 22.10.2017
Сообщений: 29
|
|
| 23.10.2017, 21:59 [ТС] | |
|
ФедосеевПавел, DelimChar есть в обработке... но его задания я не нашла..
и можете пожалуйста либо кратко объяснить как что вы делаете в обработке...либо комментарии по дописать, пожалуйста если не сложно а то до конца не доходит просто...Добавлено через 22 минуты ФедосеевПавел, проще говоря DelimChar не определён...
0
|
|
|
Модератор
|
|||||||||||
| 23.10.2017, 22:09 | |||||||||||
|
DelimChar
Общий принцип
1
|
|||||||||||
|
0 / 0 / 0
Регистрация: 22.10.2017
Сообщений: 29
|
|
| 23.10.2017, 22:18 [ТС] | |
|
ФедосеевПавел, сначала гонит по строке, пропуская разделители, потом берет начало слова...и пока начало слова (или i) <> разделителя ...увеличивает i на один. В итоге у него появляется индекс начала слова и конца слова. Далее зная их он меняет символы , делая их задом на перёд, до того момента пока в буфере не закончатся все символы, так? я правильно поняла?оО
0
|
|
|
Модератор
|
|
| 23.10.2017, 22:27 | |
|
Да, поняли вы правильно. В псевдокоде не всё учтено в целях упрощения понимания, но в реальном коде проверок несколько больше - всё время проверяется ситуация "конец строки (буфера)".
И терминология "гонит по строке" - нечто. В ссылках, которые привёл ранее я делал пояснения по выделению слов в строке (буфере) - можете и там почитать.
1
|
|
|
0 / 0 / 0
Регистрация: 22.10.2017
Сообщений: 29
|
|
| 23.10.2017, 22:42 [ТС] | |
|
ФедосеевПавел, спасибо огромнейшее
0
|
|
|
Модератор
|
|
| 23.10.2017, 22:50 | |
|
Вы, таки, разобрались и сможете выделять слова не только в асме, но и на С/Pascal/BASIC ?
Ну всё, вы - хакер!
1
|
|
|
0 / 0 / 0
Регистрация: 22.10.2017
Сообщений: 29
|
|
| 23.10.2017, 23:23 [ТС] | |
|
ФедосеевПавел, я еще завтра до разбираю))
кстати я правильно поняла, что это ведь использование директив: _TEXT segment word public 'CODE' assume cs:_TEXT, ds:_TEXT, ss:_TEXT ?
0
|
|
|
Модератор
|
|
| 24.10.2017, 06:58 | |
|
Да.
Можете упрощённо _TEXT segmentТо мне на глаза попалась какая-то статья
1
|
|
|
0 / 0 / 0
Регистрация: 22.10.2017
Сообщений: 29
|
|
| 24.10.2017, 21:20 [ТС] | |
|
ФедосеевПавел, а можно еще уточнить, зачем вот эта строчка: SizeBuffer equ $-FileBuffer ?
0
|
|
|
Модератор
|
||||||
| 24.10.2017, 22:55 | ||||||
|
Символ
$ это текущий адрес. Кстати FileBuffer это не просто символы, это адрес переменной.Тогда, $-FileBuffer начинает напоминать разницу индексов (Ifinish+1)-Istart что соответствует длине (размеру в байтах) переменной FileBuffer - т.е. буфера.Иногда новички переделывают программы с форума и перемещают выражение $-FileBuffer в другое место и программы перестают работать. Потому, что $ - это текущий адрес. Кроме того, символ $ можно использовать многократно в программе.
Вобще-то это есть в учебнике по синтаксису tasm. Добавлено через 4 минуты Конкретно в программе константа FileBuffer нужна один раз при чтении из файла. Можно было бы сразу указать 512, но при изменении размера буфера пришлось бы искать и заменять 512 на новое значение. А так - всё в символах.
0
|
||||||
|
3410 / 1829 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
|
||
| 25.10.2017, 12:03 | ||
|
1
|
||
| 25.10.2017, 12:03 | |
|
Помогаю со студенческими работами здесь
17
Заменить в исходном файле буквы слов-палиндромов на прописные
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|