Ассемблер? Это просто! Учимся программировать (FAQ)
______________________________________
Выпуск N 005
Вопросы, которые поступили от подписчиков рассылки "Ассемблер? Это просто! Учимся программировать"
Дата выхода: 2001-05-20
Вопрос
Тема такая - поиск, открытие файла и чтение из него...
Нашел, открыл и прочитал, вывожу на экран - наряду с текстом файла на экран вываливается разная ерунда - разные символы и псевдографика, словно в конце выводимой строки, объявленной через db символ $ не поставил... Увеличиваю размер буфера считывания - ерунда пропадает, чисто все, но ясно что вся эта чистота - результат заполнения пробелами т.к файл маленький а буфер гораздо больше его, а если размер буфера уменьшить, то "левых" символов на экране становится уж совсем много...
Пробовал выводить потом через функцию 40H (вроде сама определяет конец файла и до конца лишь выводит), все одно - ботва разная лезет..
db 500 dup (' ') - так вот буфер объявляю...
так mov dx, offset buffer, либо вот так lea dx,buffer перед выводом адрес его в dx загоняю... Ну и вывожу потом...
Вопрос: Так откуда же эта чушь берется и как с ней бороться?
Ответ
Уважаемый Андрей!
Причин здесь может быть несколько. Я, правда, не совсем понял, что именно происходит и как такое вообще может быть.
Существует несколько способов вывода на экран содержимого файла. Рассмотрим два основных:
1. ПЕРВАЯ ПРОГРАММА (см. приложение).
Читаем файл в буфер, сохраняя кол-во прочитанных байт. Выводим при помощи функции 40h, указав в CX количество выводимых байт (символов).
2. ВТОРАЯ ПРОГРАММА (см. приложение).
Также читаем файл в буфер, который изначально содержит символы '$'. Выводим же все функцией 09h прерывания 21h. Данный способ имеет существенный недостаток: прочитать и вывести на экран можно только один файл (или больше, если каждый последующий будет большего размера, чем предыдущий). Либо после каждого вывода файла инициализировать буфер (т.е. "забивать" его символами '$').
Также обращаю Ваше внимание на такой момент: будьте внимательны и следите за размером читаемого файла, т.к. может произойти переполнение буфера (т.е. файл окажется большего размера, чем сам буфер). В нашем примере (см. приложение) буфер имеет размер 500 байт. Т.е. прочитать можно файл размером до 500 байт.
После инсталляции пакета MASM (предположим в директорию по умолчанию), я хочу попасть в редактор, чтобы там можно было компилировать код. Но я не могу понять как это сделать(а именно: как создать проект, как его откомпилировать и запустить). Вы сказали, что все необходимые программы (файлы) находятся в папке BIN , но там я нашел только единственный запускающийся файл Cref.exe. Не могли бы вы ответить на этот вопрос!!!
Ответ
Уважаемый Александр!
Как уже отмечалось, основные файлы (для ассемблирования) находятся в каталоге BIN. Обратите внимание, что в нем должены быть в обязательном порядке следующие файлы: 1. MASM.EXE
2. ML.EXE
и др.
Если у Вас нет этих файлов, то придется переустановить MASM, т.к., скорее всего, они "потерялись".
Теперь, допустим, Вы хотите написать программу и получить com-файл.
Для этого запустите любой текстовый редактор (например, NC), наберите в нем программу, затем сохраните в каталог BIN, скажем, с именем prog.asm и запустите MASM с такими параметрами:
ml.exe prog.asm /AT
Если ошибок не будет, то Вы получите prog.com. Это и есть программа.
Увожаемый эксперт, я понимаю что уже достал вас своим вопросом, но не могли бы вы сжав зубы ответить на еше один вопрос (может быть и глупый)!!!!!!!!!!!!!
1) Предположим я хочу написать программу- для этого в любом текстовом файле пишу программу, затем перевожу из текстового файла (который я написал) в обьектный- посрецтвом (...Bin\Masm.exe) MASM.EXE (который по каким то причинам у меня не загружается, наверное я чето не так делаю?), после того как я создал (который я так и не создал) из к примеру primer.asm-->primer.obg(опять же вопрос я не могу в (предположим) блакноте создать файл с расшерением .asm чтобы перевести его в .obg, значит мне нужно воспользоваться программой которая есть в пакете MASM pwb-ну а как там создать такой файл?)мне нужно зайти в коталог Binr где находится файл link.exe который из primer.obg зделает primer.exe или primer.com (по моему желанию).
2) Другой вариант, что я зайду в (...Bin\Masm.exe) Masm.exe напечатав такую команду (в якобы загрузившемся файле Masm.exe, а не выходившем сразу после того как я в него вошол!!!)ml.exe primer.asm/AT
P.S. Буду ждать ответа (с нетерпением)!!!!!!!!!!!!!!!!!!!!!!!!!!
Ответ
ЭХ!
Я не пойму одного! зачем вам для таких программ , тем более для доса использовать МАСМ... берити качайте тасм и пишите без проблем!! у меня с ним никогда проблем не было , да и не будет.
(C) Москва, 2001. Авторское право принадлежит Калашникову О.А.
Публичное размещение материала из рассылки, а также его использование
полностью или частично в коммерческих или иных подобных целях без письменного
согласия автора влечет ответственность за нарушение авторских прав.