19.07.2019, 05:53 [+3 UTC]
в нашей команде: 3 748 чел. | участники онлайн: 1 (рекорд: 21)

:: РЕГИСТРАЦИЯ

задать вопрос

все разделы

правила

новости

участники

доска почёта

форум

блоги

поиск

статистика

наш журнал

наши встречи

наша галерея

отзывы о нас

поддержка

руководство

Версия системы:
7.77 (31.05.2019)
JS-v.1.34 | CSS-v.3.35

Общие новости:
28.04.2019, 09:13

Форум:
18.07.2019, 12:26

Последний вопрос:
19.07.2019, 04:09
Всего: 149940

Последний ответ:
18.07.2019, 12:04
Всего: 258705

Последняя рассылка:
17.07.2019, 22:15

Писем в очереди:
0

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
08.07.2010, 04:54 »
Kalina777
Спасибо за оперативный ответ! [вопрос № 179436, ответ № 262458]
27.05.2010, 15:29 »
Konstantin Shvetski
Спасибо за скорый и квалифицированный ответ [вопрос № 178693, ответ № 261713]
26.11.2011, 01:56 »
Tigresska
Сделали все просто отлично))) спасибки)) [вопрос № 184483, ответ № 268909]

РАЗДЕЛ • Assembler

Создание программ на языке Assembler.

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

Лучшие эксперты в этом разделе

Зенченко Константин Николаевич
Статус: Старший модератор
Рейтинг: 198
Коцюрбенко Алексей Владимирович
Статус: Модератор
Рейтинг: 143
Лысков Игорь Витальевич
Статус: Старший модератор
Рейтинг: 48

Перейти к консультации №:
 

Консультация онлайн # 143199
Раздел: • Assembler
Автор вопроса: Aistesis
Отправлена: 06.09.2008, 14:22
Поступило ответов: 2

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

Последнее редактирование 06.09.2008, 14:24 [неизвестный]

Состояние: Консультация закрыта

Ответ # 229006 от Евгений Иванов

Здравствуйте, Aistesis!

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

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

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


Консультировал: Евгений Иванов
Дата отправки: 11.09.2008, 10:03

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Здравствуйте, Aistesis!

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

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

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

Не все функции этого прервания возвращают ошибку ввиде установленного флага С. К примеру этим не занимаются файловые функции (0fh : 16h) введеные ещё в MSDOS 1.0, они возвращают код ошибки в регистре AL. Флаг переноса начали использовать только со второй версии, а сам код ошибки обрабатывается функцией 59h. Флаг переноса устанавливается функцией, как сигнал программе, что была ошибка и её нужно обработать(программа открывает не существующий файл, а потом из него ещё и данные считывает, как Вы думаете, результат работы программы будет корректным?). В языках высокого уровня обработкой ошибок занимается компилятор, он сам вставляет нужный код в программу. В ассемблере этим должен заниматся программист.
Удачи!


Консультировал: Зенченко Константин Николаевич (Старший модератор)
Дата отправки: 11.09.2008, 12:42

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Мини-форум консультации № 143199
Boriss

# 1

= общий = | 08.09.2008, 15:37

По поводу первого вопроса: во ВСЕХ учебниках подробно описан ответ в самом начале. Ведь без этого, никуда. ВЫ сами себя запутали. Но, возможно, что-то не поняли - уточните вопрос - попробуем объяснить по-другому
Второй вопрос: флаг - это бит в определенной области памяти, так что ЕМУ никакого условия перехода задать нельзя, но есть команды перехода по условию, чувствительные к значению флагов (определенных бит в определенной области памяти). А сути вопроса, извините smile , не понял

Евгений Иванов

# 2

= общий = | 11.09.2008, 15:00

© Цитата:
В языках высокого уровня обработкой ошибок занимается компилятор, он сам вставляет нужный код в программу. В ассемблере этим должен заниматся программист.


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

Зенченко Константин Николаевич
Старший модератор

ID: 31795

# 3

= общий = | 11.09.2008, 15:28 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

Евгений Иванов:
Любой компилятор вставляет в код программы свои обработчики RunTime Error- ошибки во время выполнения. Дизассемблируйте любую программу на писанную на ЯВУ и Вы увидете, что до начала Вашей программы ещё находится код пролога(ставит стандартные обработчики и только потом передает управление на начало), а в конце код эпилога(возвращает все в исходное состояние и завершает программу).

© Цитата: из хелпа
File not found
Path not found
Disk read error
Disk write error
File not open
File not open for input
File not open for output

Программист должен писать свои обработчики тогда, когда ему не нарятся стандартные.

=====
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.
smile

Евгений Иванов

# 4

= общий = | 11.09.2008, 15:43

я об этом и говорю.

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

стандартные же сообщения тупо выведут, что типа диск еггор и вали отсюдова с rutime error ((-:
такого никто не захочет ((-;
это приравнивается к отсутствию обработчиков в виду их бессмысленности

=====
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.
smile

Зенченко Константин Николаевич
Старший модератор

ID: 31795

# 5

= общий = | 11.09.2008, 16:01 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

Ассемблер не прощает отсутствия обработчиков ошибок, ЯВУ это допускают.
Именно это я и имел ввиду в своем ответе.

=====
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.
smile

Евгений Иванов

# 6

= общий = | 11.09.2008, 16:46

да ладно? какой смысл от пустого сообщения о том, что места на диске нет, без выбора другого диска? и программа выходит.
на ассемблере же ничего не будет показано (но это тоже можно сделать - минимальные сообщения, где именно ошибка), но программа тоже выйдет без последствий.

результат - один.

=====
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.
smile

 

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Яндекс Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.16180 сек.

© 2001-2019, Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.77 от 31.05.2019
Версия JS: 1.34 | Версия CSS: 3.35