Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

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


Новое направление Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг

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

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler (Ассемблер)

Выпуск № 1057
от 11.09.2008, 14:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 306, Экспертов: 16
В номере:Вопросов: 1, Ответов: 2

Нам важно Ваше мнение об этой рассылке.
Оценить этот выпуск рассылки >>


Вопрос № 143199: Здравствуйте, уважаемые экперты. Объясните мне, пожалуйста, 2 вопроса: 1. Почему смещение пишется в <b> ЧЕТЫРЁХ </b> цифро-буквенных обозначениях (2 байта), ведь все регистры 16-ти битные (2 байта), а память 20-ти битная (2,5 байта). Смещение (т.е...

Вопрос № 143.199
Здравствуйте, уважаемые экперты. Объясните мне, пожалуйста, 2 вопроса:
1. Почему смещение пишется в ЧЕТЫРЁХ цифро-буквенных обозначениях (2 байта), ведь все регистры 16-ти битные (2 байта), а память 20-ти битная (2,5 байта). Смещение (т.е. разница 20h-16h) при этом составляет 4 бита. Но эти 4 бита можно записать и одним числом от 0h до 0Fh.
Где я неправ в своих рассуждениях?
2. По поводу флага jc Калашников в 8-ой главе пишет: "Все функции прерывания 21h устанавливают в единицу флаг переноса, если произошла ошибка, и сбрасывают его, если ошибки не было". Возможно, это написано в контексте неудачного открытия файла функцией 3Dh прерывания 21h. Но всё равно, почему ошибка-то? Мы задали флагу определённое условие: перейти туда-то, если будет неравенство (в данном случае - не найден файл), что флаг и сделал. Вот, если бы было равенство (файл найден), то флаг бы не выполнил свою задачу, т.е. не было бы переноса.
Отправлен: 06.09.2008, 14:22
Вопрос задал: Aistesis (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Евгений Иванов
Здравствуйте, Aistesis!

1. Скажу вам по секрету: смещение пишется не в 4-х цифро-буквенных обозначениях. Оно пишется так, как угодно программисту. Так, как ему будет удобно.

Например, смещение 0F457h занимает 5 символов (6, если считать символ h на конце) и не может занимать 4. Также оно может быть записано так: 62551. Это в десятичном виде. Или так 172127o, если вы отлично владеете 8-ричной системой счисления. Или даже так 1111010001010111b, если вы маньяк двоичной.

2. Флаг C используется в данных функциях как признак того, что произошла ошибка. Состояние флага C можно установить или сбросить вручную с помощью команд STC, CLC, поэтому от того, было "равенство" или не было, неважно.

---------
Знания - сила
Ответ отправил: Евгений Иванов (статус: Профессор)
Россия, Нижний Новгород
Тел.: +79519145721
WWW: Eugene Ivanov
ICQ: 214889076
----
Ответ отправлен: 11.09.2008, 10:03

Отвечает: Зенченко Константин Николаевич
Здравствуйте, Aistesis!

Память не может быть 20-ти битной при всех 16-ти битных регистрах.
В данном случае речь идет о 20-ти битной адресации памяти.

На рисунке показано как получается физический адрес при сегментной адресации реального режима.
Значение сегментного регистра уможенное на 16-ть складывается со значение регистра общего назначения. Механизм получения физического адреса реализован на аппаратном уровне и для программиста практически прозрачен.
С помощью такого метода можно работать с 1мб памяти.

Да ещё Смещение (т.е. разница 20h-16h) при этом составляет 4 бита. , тут Вы тоже ошиблись т.к. 20h-16h=0Аh или 10 в десятичной системе.

Не все функции этого прервания возвращают ошибку ввиде установленного флага С. К примеру этим не занимаются файловые функции (0f h : 16h) введеные ещё в MSDOS 1.0, они возвращают код ошибки в регистре AL. Флаг переноса начали использовать только со второй версии, а сам код ошибки обрабатывается функцией 59h. Флаг переноса устанавливается функцией, как сигнал программе, что была ошибка и её нужно обработать(программа открывает не существующий файл, а потом из него ещё и данные считывает, как Вы думаете, результат работы программы будет корректным?). В языках высокого уровня обработкой ошибок занимается компилятор, он сам вставляет нужный код в программу. В ассемблере этим должен заниматся программист.
Удачи!
---------
Итерация от человека, рекурсия — от Бога (Питер Дойч)
Ответ отправил: Зенченко Константин Николаевич (статус: Профессор)
Украина, Киев
Тел.: +380979536619
Адрес: Украина г.Киев
----
Ответ отправлен: 11.09.2008, 12:42


Вы имеете возможность оценить этот выпуск рассылки.
Нам очень важно Ваше мнение!
Оценить этот выпуск рассылки >>

Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2008, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале

∙ Версия системы: 5.3 RC 2 от 09.09.2008

Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное