Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.66/76: Рейтинг темы: голосов - 76, средняя оценка - 4.66
Mustang_GT

Считывание текста из файла

20.02.2012, 22:55. Показов 15841. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, уважаемые форумчане. С ассемблером познакомился буквально на днях и тут же столкнулся с проблемой. Требуется просто считать текст (одна строчка) из существующего файла. Код накропал, компилируется без ошибок, но выполняться не хочет, ошибка говорит, либо ничего не делает вовсе. Программирую на MASM. Пожплуйста, объясните, где не прав
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
d_seq segment para public
    filename db 'D:\file.txt', 0 ; имя считываемого файла
    buf db ? ; под считываемую строку
    handle dw 0 ; под дескриптор
d_seq ends
 
s_seq segment para stack
db 256 dup (?)
s_seq ends
c_seq segment para public
assume cs:c_seq, ss:s_seq, ds:d_seq
start:  mov ax, d_seq
        mov ds, ax
    mov ax, ss
    mov ss, ax
 
    mov AH, 3dh ; функция открытия файла
    mov AL, 0
    mov DX, offset filename
    int 21h
    mov handle, AX ; забираем дескриптор файла
 
    mov AX, 3fh ; функция чтения из файла
    mov BX, handle
    mov DX, offset buf ; адрес буфера для чтения
    mov CX, 5 ; считываем всего 5 символов
    int 21h
 
    mov AH, 9 ;Выводим строку, считанную из файла, на экран
    mov DX, offset buf
    int 21h
    
 
    mov ah, 4ch
    int 21h
c_seq ends
end start
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.02.2012, 22:55
Ответы с готовыми решениями:

Считывание файла
Растолкуйте люди добрые такую ситуёвину. Страсть как охота считать содержимое текстового файла в буфер при помощи API функции ReadFile для ...

Считывание файла посимвольно
Помогите модифицировать код... .model tiny .code org 100h ;начало Begin: mov ax,3D00h mov dx,offset File_name int 21h ...

Считывание текста с файла masm32
Всем привет, мне надо написать программу, которая бы считывала текст с тхт-файла. В тхт-файле находятся подстрока и строка разделенные...

5
273 / 268 / 11
Регистрация: 24.12.2010
Сообщений: 328
21.02.2012, 00:18
Есть несколько ошибок:
1. В строке 3 под считываемую строку отведен лишь 1 байт, тогда как считывать Вы собираетесь 5.
2. В 23 строке вместо ax должно быть ah, иначе 3fh будет записан в al.
3. Прежде, чем выводить строку 9 функцией, хорошо бы записать после нее ограничитель '$', иначе на экран полезет всякий мусор.
И еще, непонятно, зачем нужны строки 14 и 15 ? Вроде все, исправите - должно заработать.
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
21.02.2012, 04:24
Mustang_GT,
4. После работы с файлом его нужно закрыть
5. mov ax, ss нужно заменить на mov ax, s_seq
0
273 / 268 / 11
Регистрация: 24.12.2010
Сообщений: 328
21.02.2012, 11:15
Цитата Сообщение от Mikl___ Посмотреть сообщение
mov ax, ss нужно заменить на mov ax, s_seq
Mikl___, а зачем вообще нужны эти 2 строчки(14 и 15), разве не достаточно настроить сегмент данных?
И еще, разве функция завершения 4ch не закрывает все открытые файлы?
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
21.02.2012, 11:43
Ant1971on,
1) если не использовать упрощенные директивы (.stack 100h) тогда придется все настраивать "ручками"
2а) нет не закрывает, только RESET,
2б) в ДОСе не может быть более 255 одновременно открытых файлов
2в) возможно, что следующее обращение к файлу открытому другой программой приведет к ошибке доступа
2г) у программиста должен быть выработан автоматизм открыл файл/объект -- закрой его
2
Mustang_GT
21.02.2012, 14:14
Спасибо за ценные советы! Со всем разобрался вроде. На счет замены mov ax, ss на mov ax, s_seq ничего не знаю. Когда препод давал исходник пустого процесса - сказал ничего там не трогать, только добавлять. Но вроде как в 11 строчке ss:s_seq делает то, что надо, хотя я пока что не в чем не уверен. В общем вот получился рабочий код (считывает 5 символов):
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
d_seq segment para public
    filename db 'D:\file.txt', 0
    buf db 6 dup (?)
    handle dw 0 ; под дескриптор
d_seq ends
 
s_seq segment para stack
db 256 dup (?)
s_seq ends
c_seq segment para public
assume cs:c_seq, ss:s_seq, ds:d_seq
start:  mov ax, d_seq
        mov ds, ax
    mov ax, ss
    mov ss, ax
 
    mov AH, 3dh ; функция открытия файла
    mov AL, 0
    mov DX, offset filename
    int 21h
    mov handle, AX
 
    mov AH, 3fh ; функция чтения из файла
    mov BX, handle
    mov DX, offset buf ; прочитанное в buf
    mov CX, 5
    int 21h
 
    mov DI, offset buf ; адрес буфера с прочитанными данными
    mov BX, 5 ; BX = количеству символов в строке
    mov byte ptr [DI+BX], '$' ; добавляем $ в конец строки
 
    mov AH, 9 ; выводим строку, считанную из файла
    mov DX, offset buf
    int 21h
 
    mov AH, 3eh ; закрытие файла
    mov BX, handle
    int 21h 
 
    mov ah, 4ch
    int 21h
c_seq ends
end start
Только вот одного не понимаю, как считывать русские буковки? Латинницу и цифры читает нормально, а русские - иероглифы. Когда изучал СИ, то была такая же проблема, но она решалась простой заменой компилятора на "русский". Как тут быть?
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.02.2012, 14:14
Помогаю со студенческими работами здесь

Считывание чисел из файла
Я знаю как считать число из файла, но не знаю как считать несколько чисел. Может кто обьяснить как это сделать?

Считывание текста из файла
Написать программу, которая считывает текст (.txt) из файла и выводит на экран только цитаты, то есть предложения заключённые в кавычки.

Считывание текста из файла
Имеется такая функция: int out(char* filename, Queue* Q) // функция считывания данных { ifstream fin(filename); if(!fin) {...

Считывание текста из файла
Программа считывания текста из файла.

Считывание текста из файла
Собственно, задача такая: есть файл info.txt в ней строки такого формата $параметр_1$параметр_2$параметр_3$...$параметр_n есть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru