Студопедия
МОТОСАФАРИ и МОТОТУРЫ АФРИКА !!!


Авиадвигателестроения Административное право Административное право Беларусии Алгебра Архитектура Безопасность жизнедеятельности Введение в профессию «психолог» Введение в экономику культуры Высшая математика Геология Геоморфология Гидрология и гидрометрии Гидросистемы и гидромашины История Украины Культурология Культурология Логика Маркетинг Машиностроение Медицинская психология Менеджмент Металлы и сварка Методы и средства измерений электрических величин Мировая экономика Начертательная геометрия Основы экономической теории Охрана труда Пожарная тактика Процессы и структуры мышления Профессиональная психология Психология Психология менеджмента Современные фундаментальные и прикладные исследования в приборостроении Социальная психология Социально-философская проблематика Социология Статистика Теоретические основы информатики Теория автоматического регулирования Теория вероятности Транспортное право Туроператор Уголовное право Уголовный процесс Управление современным производством Физика Физические явления Философия Холодильные установки Экология Экономика История экономики Основы экономики Экономика предприятия Экономическая история Экономическая теория Экономический анализ Развитие экономики ЕС Чрезвычайные ситуации ВКонтакте Одноклассники Мой Мир Фейсбук LiveJournal Instagram

Mov DI,offset AddressString




mov [byte ptr DS:DI],0

; Очистить позицию ввода (забить пробелами)

Mov SI,offset SpaceString

Call ShowString

; Установить курсор в позицию ввода

mov [ScreenColumn],47

mov AL,[CharacterCounter]

add [byte ptr ScreenColumn],AL

Call SetCursorPosition

; Ввести цифру или команду

Call GetChar

; Адрес или команда?

Cmp AL,0

jz @@Command

; Введена первая цифра числа

; ВВОД АДРЕСА В ШЕСТНАДЦАТЕРИЧНОМ КОДЕ

@@Address:

; Проверка на диапазон '0'-'9'

cmp AL,'0'

jb @@AddressError

cmp AL,'9'

jbe @@WriteChar

; Проверка на диапазон 'A'-'F'

cmp AL,'A'

jb @@AddressError

cmp AL,'F'

jbe @@WriteChar

; Проверка на диапазон 'a'-'f'

cmp AL,'a'

jb @@AddressError

cmp AL,'f'

ja @@AddressError

@@WriteChar:

; Проверяем количество цифр

cmp [CharacterCounter],8

jae @@AddressError

inc [CharacterCounter]

; Записываем цифру в число

mov [DS:DI],AL

Inc DI

; Передвинуть признак конца строки

; в следующий разряд

mov [byte ptr DS:DI],0

; Отобразить число на экране

Mov SI,offset SpaceString

Call ShowString

Mov SI,offset OutAddress

Call ShowString

@@GetNextChar:

; Отобразить курсор в новой позиции ввода

mov [ScreenColumn],47

mov AL,[CharacterCounter]

add [byte ptr ScreenColumn],AL

Call SetCursorPosition

; Ожидать ввода следующего символа

Call GetChar

Cmp AL,0

jne @@Address

; Проанализировать код нажатой клавиши

Cmp AH,B_Esc ;отмена ввода адреса

je @@GetAddressOrCommand

@@TestF10:

cmp AH,F10 ;"Выход"

jne @@TestRubout

mov [CommandByte],AH

jmp @@End

@@TestRubout:

cmp AH,B_RUBOUT ;"Забой"

jne @@TestEnter

cmp [CharacterCounter],0

je @@AddressError

; Передвинуть признак конца строки

; на разряд влево

Dec DI

dec [CharacterCounter]

mov [byte ptr DS:DI],0

; Отобразить число на экране

Mov SI,offset SpaceString

Call ShowString

Mov SI,offset OutAddress

Call ShowString

jmp @@GetNextChar

@@TestEnter:

Cmp AH,B_Enter ;завершение ввода числа

jne @@AddressError

mov [CommandByte],AH

Mov SI,offset AddressString

Call HexToBin32

mov [StartAddress],EAX

jmp short @@End

@@AddressError:

Call Beep

jmp @@GetNextChar

; ОБРАБОТКА "КОМАНД"

@@Command:

cmp AH,F10 ;"Выход"

jne @@TestDn

mov [CommandByte],AH

jmp short @@End

@@TestDn:

cmp AH,B_DN ;"Стрелка вниз"

jne @@TestUp

mov [CommandByte],AH




add [StartAddress],256

jmp short @@End

@@TestUp:

cmp AH,B_UP ;"Стрелка вверх"

jne @@CommandError

mov [CommandByte],AH

sub [StartAddress],256

jmp short @@End

@@CommandError:

Call Beep

jmp @@GetAddressOrCommand

@@End: popad

Ret

ENDP GetAddressOrCommand

ENDS

; Подключить подпрограмму, переводящую сегментный

; регистр GS в режим линейной адресации

include "lst_3_01.inc"

; Подключить набор процедур вывода/вывода данных

include "lst_2_02.inc"

END

Метод Родена проверен не только на процессорах Intel, но и на клонах, изго­товленных AMD, Cyrix, IBM, TI [1]. На всех протестированных компьютерах пере­ход в режим линейной адресации данных проходил нормально, то есть метод не только работоспособен, но и универсален. Метод Родена в свое время не был оценен по достоинству, поскольку обычный объем памяти персональных компь­ютеров составлял тогда 1-2 Мбайт, и преимущества линейной адресации не были очевидными. Резкое увеличение объема памяти в устройствах массового приме­нения произошло гораздо позже — начиная с 1995 года. В это же время был вне­дрен новый стандарт на видеоконтроллеры (VESA 2.0) и появилась возможность линейной адресации видеопамяти, однако о методе Родена программисты уже успели забыть. Между тем, совместное использование линейной адреса­ции данных в оперативной памяти и линейного пространства видеопамяти дает наибольший выигрыш по скорости выполнения программ и позволяет сильно упростить алгоритмы построения изображений.

Таким образом, метод Томаса Родена обладает следующими основными преиму­ществами [1]:



- имеется свободный доступ ко всем аппаратным ресурсам компьютера;

- возможна линейная адресация всей оперативной памяти и памяти видеокон­троллера;

- логические и физические адреса отображенной на шину процессора памяти периферийных устройств совпадают;

- метод совместим с клонами процессоров Intel;

- сохраняется возможность использования всех функций DOS и BIOS, как в обычном реальном режиме работы процессора.

Последнее свойство особенно важно: не нужно разрабатывать собственные про­граммы для работы с периферийными устройствами на уровне регистров, следо­вательно, не проявляются и не создают лишних проблем нестандартные особен­ности оборудования.

Основной недостаток метода Родена — существенное ослабление защиты памя­ти. Поскольку отменен контроль границы сегмента данных, работающая с линейным пространством подпрограмма в случае ошибки адресации или зацик­ливания может не только разрушить смежные данные, но и вообще стереть все содержимое оперативной памяти, в том числе все программы и резидентную часть операционной системы. Чаще всего стирается таблица векторов прерываний, раз­мещенная в начале адресного пространства. Следовательно, необходимо ограни­чивать число подпрограмм, работающих с линейной адресацией, и очень тщатель­но их отлаживать.

Второй недостаток прямо вытекает из первого — работа в реальном режиме DOS и ослабление защиты не позволяют реализовать многозадачность. Однако для решения прикладных задач часто вполне достаточно фоново-оперативного режима работы, когда всеми ресурсами системы распоряжается один программный мо­дуль, а остальные предназначены для узкоспециальных целей и вызываются на короткие промежутки времени через механизм прерываний. Иными словами, доступ к видеопамяти и всей оперативной памяти должен быть только у основ­ной программы, а вспомогательные процедуры и драйверы периферийных уст­ройств могут хранить свои данные только в основной области памяти DOS (то есть, в пределах первого мегабайта адресного пространства). Линейная адресация, сама по себе, не накладывает слишком жестких ограничений на работу системы, поскольку персональные компьютеры вообще функционируют в основном в однозадачном режиме: аппаратные средства для реализации многозадачности име­ются уже давно, но сильные ограничения создают физиологические и психоло­гические особенности человека, который сидит за компьютером. Любая серьез­ная работа требует от оператора полной концентрации внимания на одном процессе. То же самое относится к компьютерным играм — невозможно одновре­менно играть в Quake и редактировать текст.

Третий недостаток: строковые команды процессора х86 в реальном режиме не пригодны для работы с сегментом, настроенным на линейной адресацию памяти. Это не очень существенный недостаток, поскольку внутренняя RISC-архитекту­ра современных процессоров позволяет выполнять группу из нескольких простых команд с той же скоростью, что и одну сложную составную команду, выполняю­щую аналогичную операцию. Кроме того, процессор выполняет внутренние опе­рации быстрее, чем операции обращения к оперативной памяти, и гораздо быст­рее, чем операции чтения/записи в видеопамять.

В целом можно сказать, что предложенный Роденом режим — это в первую оче­редь режим учебно-отладочный. Его очень удобно применять в процессе освое­ния методов непосредственной работы с периферийными устройствами. Во-пер­вых, линейная адресация абсолютно прозрачна — область памяти устройства можно просматривать прямо по физическому адресу. Во-вторых, исследуемое устройство можно рассматривать изолированно, исключив опасность возникно­вения паразитных взаимодействий с другими аппаратными компонентами и по­сторонним программным обеспечением.

Ниже приведены файлы, включаемые в программу, приведенную в листинге 2.4 [1].

Листинг 2.3 – Мнемонические обозначения кодов управляющих клавиш

; Для клавиш, традиционно выполняющих определенные

; функции, приведены краткие комментарии справа.

; Для "текстовых" управляющих клавиш вместо скан-кодов

; используются ASCII-коды:





Дата добавления: 2015-04-01; просмотров: 390; Опубликованный материал нарушает авторские права? | Защита персональных данных | ЗАКАЗАТЬ РАБОТУ


Не нашли то, что искали? Воспользуйтесь поиском:

Лучшие изречения: На стипендию можно купить что-нибудь, но не больше... 8997 - | 7241 - или читать все...

Читайте также:

 

3.81.29.226 © studopedia.ru Не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования. Есть нарушение авторского права? Напишите нам | Обратная связь.


Генерация страницы за: 0.006 сек.