Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.04.2012, 23:51   #1
Streer
 
Регистрация: 28.04.2012
Сообщений: 5
По умолчанию открытие файла и вывод на экран

Суть программы в том, что на экран должны выводиться тексты из файла, в зависимости от введенной строки...Начало работает, но не совсем так как надо, помимо вывода нужного текста, выводятся имена файлов где хранится текст плюс та строка которую ввели, выглядит некрасиво, если можно как-то исправить — подскажите, пожалуйста, чтобы выводило только текст файла. Заранее благодарен!
Вот код, что есть:
Код:
section .data
       vivod1: db'Доброго времение суток, пользователь!Вас приветствует демонстрационная программапо набору данных mmx-инструкций. Для продолжения работы введите Enter',10
       vivodLen1 equ $-vivod1
       vivod2: db 'Для продолжения работы программы введите Next', 10
       vivodLen2 equ $-vivod2   
       
       error: db'Error',10
       errorLen equ $-error
       filename: db'abc.txt',0
       filename2: db'cba.txt',0
section .bss
       buf: resb 100
       string: resb 1000
section .text
global _start
       %macro print 2
       mov eax,4
       mov ebx,1
       mov ecx,%1
       mov edx,%2
       int 80h
       %endmacro
       
       %macro scan 2
       mov eax,3
       mov ebx,0
       mov ecx,%1
       mov edx,%2
       int 80h
       %endmacro
 
       %macro open 1
       print %1,100
       
       dec eax
       mov esi,%1
       add esi,eax
       mov byte[esi],0
       
       mov eax,5
       mov ebx,%1
       mov ecx,0
       int 80h
       
       cmp eax,0
       jl err
       mov esi,eax
       
       mov esi,eax
       mov eax,3
       mov ebx,esi
       mov ecx,string
       mov edx,1000
       int 80h
       
       mov eax,4
       mov ebx,1
       mov ecx,string
       mov edx,1000
       int 80h
       
       mov eax,6
       mov ebx,esi
       int 80h
       %endmacro  
       
_start:
       print vivod1,vivodLen1
       
       
       scan buf,100
              
       cmp byte[buf],'Enter'
       jne err
       open filename
       print vivod2, vivodLen2
       scan buf,100
       cmp byte[buf],'Next'
       jne err
       open filename2 
       
err:
       print error,errorLen
       jmp exit
       
exit:
       mov eax,1
       mov ebx,0
       int 80h


________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 29.04.2012 в 00:28.
Streer вне форума Ответить с цитированием
Старый 29.04.2012, 10:42   #2
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Начало работает, но не совсем так как надо, помимо вывода нужного текста, выводятся имена файлов где хранится текст плюс та строка которую ввели
внимательно подумайте, что вы делаете здесь:
Цитата:
Код:
%macro open 1
print %1,100
и отсчитайте 100 символов от начала имени файла...
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 29.04.2012, 16:22   #3
Streer
 
Регистрация: 28.04.2012
Сообщений: 5
По умолчанию

открываю файл и вывожу на экран название, все правильно, но мне нужно вывести его чтобы записать в eax чтобы потом сделать dec, чтобы не учитывать конец строки, иначе не откроет файл...
Streer вне форума Ответить с цитированием
Старый 29.04.2012, 17:13   #4
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
открываю файл и вывожу на экран название, все правильно
судя по алгоритму работы макроса вывода на экран - не всё правильно.

в вашем макросе второй параметр передаёт длину выводимой строки. У вас длина имени файла равна 100 символам?

Цитата:
Код:
filename: db'abc.txt',0
filename2: db'cba.txt',0
я здесь всего по 8 символов в каждом насчитал, т.е. он на вывод пойдут эти 16 + всё что за ними...
Правильно поставленная задача - три четверти решения.

Последний раз редактировалось DiemonStar; 29.04.2012 в 17:15.
DiemonStar вне форума Ответить с цитированием
Старый 29.04.2012, 18:54   #5
Streer
 
Регистрация: 28.04.2012
Сообщений: 5
По умолчанию

а как мне сделать, чтобы не выводило имя файла, а сам файл?
100, насколько я понимаю про запас, т.е. не обязательно длина имени файла 100 символов...
не очень я хорошо знаю ассемблер, в любом случае спасибо за внимание
Streer вне форума Ответить с цитированием
Старый 02.05.2012, 09:18   #6
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Как я понимаю, данный код вы где-то нарыли? тогда может стоит почитать описание работы функций прерывания?
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вывод на экран однофамильцев из файла (си++) Kolyan11 Помощь студентам 15 01.06.2011 09:44
Вывод XML-файла на экран Sparky Java для Web (EE, Servlet, JSP, Tomcat, Spring MVC) 6 28.01.2011 11:28
Вывод содержимого файла на экран! Nostalgy Общие вопросы C/C++ 5 16.01.2011 19:33
Вывод на экран текста из файла Snegovic Помощь студентам 4 16.09.2010 08:08
вывод файла на экран! Шушелла Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 9 29.10.2007 09:34