WMmail.ru - сервис почтовых рассылок

пятница, 20 июля 2012 г.

RFpro.ru: Ассемблер? Это просто! Учимся программировать

 
Если выпуск не отображается, вы можете прочесть его на сайте Отказаться от рекламы
  
  
  

  Мои подписки      Мои группы      Мои новости     
        Автор 
Калашников О.А.
      
  
Компьютеры и интернет   →   Софт   →   Программирование   →   RFpro.ru: Ассемблер? Это просто! Учимся программировать
  
RFpro.ru: Ассемблер? Это просто! Учимся программировать
 
 

Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты по данной тематике

Асмик Гаряка
Статус: Советник
Рейтинг: 10943
• повысить рейтинг »
Коцюрбенко Алексей aka Жерар
Статус: Советник
Рейтинг: 4312
• повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 2209
• повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / Assembler (Ассемблер)

Номер выпуска:1529
Дата выхода:20.07.2012, 11:00
Администратор рассылки:Лысков Игорь Витальевич (Старший модератор)
Подписчиков / экспертов:84 / 31
Вопросов / ответов:1 / 1

Консультация # 186450: 1. Чем отличаются первая редакция книги Калашникова от 2006 и вторая от 2011(2) ?? 2. У меня при изучении ассемблера по книге Калашникова возникли мысли и хотелось бы понять насколько они верные. Почему в этой программе избыточный код http://www.kalashnikoff.ru/Assembler/issues/encl/009/PROG09.asm.htm ??? а именно Процеду...


Консультация # 186450:

1. Чем отличаются первая редакция книги Калашникова от 2006 и вторая от 2011(2) ??

2. У меня при изучении ассемблера по книге Калашникова возникли мысли и хотелось бы понять насколько они верные.

Почему в этой программе избыточный код
http://www.kalashnikoff.ru/Assembler/issues/encl/009/PROG09.asm.htm
???
а именно
Процедура

Open_file proc
cmp Handle,0FFFFh ; Вот эта проверка будет всегда пройдена поскольку мы сами ниже определяем значение Handle а второй раз этот код отрабатывать не будет и в итоге вообще непонятна целесообразность Handle
jne Quit_open
mov ax,3D00h
int 21h
mov Handle,ax <------ Здесь идентификатор переносится в переменную, хотя еще не была произведена проверка флага переноса. иначе вхолостую можно потерять время если файл не открыт.
ret
Quit_open:
stc
ret
Handle dw 0FFFFh
Open_file endp

то есть мы могли бы написать....
m ov dx,offset File_name
mov ax,3D00h
int 21h
jc Error_file

Но Олег усложнил код по какой то причине мне непонятной.... Очень любопытно !!!

Чисто теоретически файл мог бы быть открыт второй раз.... но!!!
если бы мы спрашивали ОС открыт ли файл, то это было бы верно, но там с потолка (???) идёт присвоение переменной идентификатора значения FFFFh

Допустим запустили раз эту программу и второй раз (что для DOSа нереально ибо он однозадачен), но даже если запустили под win98 то в каждой программе будет своё адресное пространство и своя переменная Handle и даже если файл уже открыт, другая копия программы об этом не узнает. Возможно более лучший выход файлы семафоры.

Дата отправки: 17.07.2012, 10:40
Вопрос задал: Роман И. (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Лысков Игорь Витальевич (Старший модератор):

Здравствуйте, Роман И.!
Давайте по-порядку...
1) cmp Handle,0FFFFh ; Вот эта проверка будет всегда пройдена поскольку мы сами ниже определяем значение Handle а второй раз этот код отрабатывать не будет и в итоге вообще непонятна целесообразность Handle
Да, Вы правы, проверка будет пройдена. И можно было ее не делать.
Но то, что сделано, ничего страшного. Дело в том, описатель файла надо было сохранить, чтобы потом файл закрыть.
Хотя опять же, можно было обойтись и регистром bx.
То, что, некая переменная, в нашем случае, handle изначально равна 0ffffh, часто используется, к примеру, в проверке, надо ли
закрывать файл. Здесь этого нет, но идея такая.

2)mov Handle,ax <------ Здесь идентификатор переносится в переменную, хотя еще не была произведена проверка флага переноса. иначе вхолостую можно потерять время если файл не открыт.
Вы опять правы. Сохранять описатель следует после проверки корректности открытия...

3) то есть мы могли бы написать....
mov dx,offset File_name
mov ax,3D00h
int 21h
jc Error_file
Можно было... Но handle желательно сохранять, можно, конечно, хранить и в bx...

4) Но Олег усложнил код по какой то причине мне непонятной.... Очень любопытно !!!
Я уже объяснил, что при чтении, записи, закрытии надо проверять корректность операций, что можно сделать проверкой handle на равенство 0ffffh. В простейших случаях, можно этого не делать. Но в более сложных программах без этого не обойтись. В данной программе просто заложен, но не реализован, механизм проверки.

5) с потолка (???) идёт присвоение переменной идентификатора значения FFFFh
Сделано присвоение заранее определенным значением, чтобы иметь возможность проверки на корректность

6) Допустим запустили раз эту программу и второй раз (что для DOSа нереально ибо он однозадачен), но даже если запустили под win98 то в каждой программе будет своё адресное пространство и своя переменная Handle и даже если файл уже открыт, другая копия программы об этом не узнает. Возможно более лучший выход файлы семафоры.
Под ДОС-ом программы не знают о существовании друг друга... А семафоры - это уже из программирования под другие ОС

После внимательного анализа программы, после замечания Зенченко Константина Николаевича,
выяснилась любопытная деталь, связанная с работой данной программы:
1) После открытия файла описатель файла сохраняется в переменной handle
2) После чтения файла, а это наша же программа на ее же место, переменная handle опять станет равной 0ffffh!
3) Последующее закрытие будет уже оперировать с handle = 0ffffh, что является ошибкой!
Выходов, как минимум два:
1) Хранить handle в другом месте (в bx, стеке, в другой памяти)
2) Читать не весь файл, например только сегмент кода (переделав слегка код)

Консультировал: Лысков Игорь Витальевич (Старший модератор)
Дата отправки: 17.07.2012, 11:46
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка  |  восстановить логин/пароль

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!


 
 
Комментировать выпуск
     В избранное

Прошлые выпуски
RFpro.ru: Ассемблер? Это просто! Учимся программировать    26 июня 2012, 16:03
RFpro.ru: Ассемблер? Это просто! Учимся программировать    24 июня 2012, 19:33
RFpro.ru: Ассемблер? Это просто! Учимся программировать    23 июня 2012, 15:32

Все выпуски рассылки

20 июля 2012 отмечают:
Международный день шахмат
День Национальной гвардии Кыргызстана
Перунов день
Ильин-день в&nbsp;Болгарии
Фестиваль авторской песни &laquo;Гринландия&raquo;
Рамадан&nbsp;&mdash; начало поста у&nbsp;мусульман

Именины: Герман, Евдокия, Сергей
 
 

Subscribe рекомендует
 
Компьютеры и интернет  →   рассылки   и   группы
  
Бодибилдинг, Пауэрлифтинг! Группа посвящена полной информации по правильной и быстрой накачке мышц!
Группа посвящена полной информации по правильной и быстрой накачке мышц!!Упражнения для мышц написаны на простом человеческом языке без лишней информаци...
Темы: 1663   Участники: 2725
  Уникальные новости от Свободного Журналиста
Я - свободный журналист. Моя работа - дать Вам пищу для ума. Испытываете инфо-голод? Вкусности здесь! Цель создания группы: публикация качественной, инт...
Темы: 64   Участники: 936
  Литература от А до Я
Группа для всех интересующихся литературой. Всеми её вопросами и нюансами: от теории до практики. Для графоманов и профессионалов. Правила добавления книг для скачивания
Темы: 686   Участники: 1759
 
 
 
Подписан адрес: admin10383.deep@blogger.com
Код этой рассылки: comp.prog.assembler
Архив рассылки
Отписаться:  На сайте  Почтой
Поддержка подписчиков
Убрать рекламу
Другие рассылки этой тематики
Другие рассылки этого автора
 
Рассылка производится: Subscribe.Ru / ЗАО «Интернет-Проекты» / О компании / Политика конфиденциальности

Комментариев нет:

Отправить комментарий