Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.9.170] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
:-/ Ээээ...
Доброе время суток! Вот хотел спросить, что такое прерывания и с чем их едят? |
Сообщ.
#2
,
|
|
|
Коротко…
Во время работы программы если происходит какое-либо событие (например сгенерированное пользователем нажатие клавиши, движение мыши и т.д.; программой: деление на ноль, обращение к дисководу и т.д.; устройством: таймер и т.д.) прекращается выполнение работающих программ и запускается подпрограмма — обработчик прерываний которая выполняет необходимые действия. Обработчик прерываний можно вызывать программным путем, а можно подменить обработчик своим кодом если заменить адрес в таблице векторов прерываний |
Сообщ.
#3
,
|
|
|
Вот отрывочек из одной статейки
Цитата А едят прерывания обычно с ассемблером, хотя можно и без негоПрерывания по сути являются требованиями к вам обратить на них внимание. Аналогично периферийные устройства вычислительной системы могут потребовать, чтобы процессор "обратил на них внимание". Поэтому событие, которое заставляет процессор приостановить выполнение своей программы для выполнения некоторой затребованной деятельности, называется прерыванием. Прерывания существенно увеличивают эффективность вычислительной системы, поскольку они позволяют внешним устройствам "обращать на себя внимание" процессора только по мере надобности. Если бы в системе не было прерываний, то процессору пришлось бы периодически проверять, не требует ли обслуживания какое-нибудь устройство системы. Это похоже на телефон без звонка: пользуясь им, вам приходилось бы очень часто снимать трубку и проверять, не пытается ли кто-нибудь с вами соединиться? но с ним вкуснее ;D Например следующий кусок кода установит новый цвет бордера экрана asm mov ah, 10h{номер функции} mov al, 01h{номер подфункции} mov bh,2{2-новый цвет бордера} int 10h {номер прерывания (Видеосервис)} end; Вообще когда работаешь с прерываниями под рукой лучше иметь справочник. Сам я хороший справочник по прерываниям посоветовать немогу, но надеюсь народ тебе счас поможет. |
Сообщ.
#4
,
|
|
|
Так, что получается, если я долблю в клаву и дергаю грызуна постояно происходят прерывания? Я правильно понял?
|
Сообщ.
#5
,
|
|
|
Кстати я еще читал, что для динамической переменной любого типа выделяется по 8 байт! А как же тогда для extended? Этот тип же 10 байт занимает... ???
|
Сообщ.
#6
,
|
|
|
как я знаю то вся инфа кодируется .... вот ... текст точнее буква представлена в виде уникального двоичного кода от 00000000 до 11111111 ..... тобишь одЫн сивол 1 байт .... цифры в зависимости от размера занимает от бита до 32 .... вроде так ... да и с extended ... тут дело в том какой диапазон у них .... так у extended (от 3,4*10^-4951 до 1,1*10^4932) - 10 байт а у real (от 5*10^-324 до 1,7*10^308 )- 8 байт - разницу очучаешь?? ........... вроде так
|
Сообщ.
#7
,
|
|
|
Цитата Unknown_Error, 24.06.03, 23:59:34 Кстати я еще читал, что для динамической переменной любого типа выделяется по 8 байт! А как же тогда для extended? Этот тип же 10 байт занимает... ??? ??? Первый раз слышу. Под указатель (адресс переменной в оперативной памяти) выделяется 4 байта. А размер памяти, на который он указывает (собственно динамическая переменная) может быть любой длины. |
Сообщ.
#8
,
|
|
|
2 Unknown_Error
Может ты читал что минимально адресуемой еденицей памяти являеться 1 байт а 1 байт - 8 бит Потом бит перепутался с байтом а остальное - работа воображения;D И вообще раз так много вопросов появилось то лучше зарегится. А то как бы, Vot эту тему не закрыл за офтопики. 2 Zenia Цитата А размер памяти, на который он указывает (собственно динамическая переменная) может быть любой длины. А может всеже < 64kb ? ЗЫ А на какой вопрос отвечал lamachok до меня так и не дошло. |
Сообщ.
#9
,
|
|
|
Цитата А может всеже < 64kb ? А это в каком Паскале Сколько я знаю, в ТМТ хоть 4 гига адресуй через 1 вшивый пойнтер А в ВР/ТР да, до 65520 байт. (почему-то все 65536 не дает, пробовал) |
Сообщ.
#10
,
|
|
|
64k-$8. $8 - для собственных нужд, наверное, администратора кучи.
|
Сообщ.
#11
,
|
|
|
Цитата vesper1, 25.06.03, 15:25:51 А это в каком Паскале Сколько я знаю, в ТМТ хоть 4 гига адресуй через 1 вшивый пойнтер Спасибо, товарищ, за поддержку с фланга И не только в ТМТ, но и в VP, FP, наверно, и в других 32 битных … Уж такой при модели памяти flat сегмент большой |
Сообщ.
#12
,
|
|
|
Динамическая переменная, собсно любой пойнтер, это просто ДВА числа размещённых в памяти последовательно, т.е. один за другим. Первое определяет СЕГМЕНТ данных на которые указывает указатель(!), а второе-СМЕЩЕНИЕ относительно сегмента. Если компилер 32-битный то оба числа Longint (dword) т.е. 4*2=8 байта размер пойнтера, если же компилер 16-битный , то оба числа Word т.е. 2*2=4 байта размер пойнтера.
А теперь про прерывния... Цитата Живёт и работает у тебя в компе процессор. Работает, работает, и вдруг... Ты (т.е. пользователь) в это время например долбанул по клаве и наступило прерывание. Процер смотрит, а его за 56 ножку электрончик дёргает. Он приостанавливает работу, и идёт выяснять-чё блин там случилось. Пришёл, посмотрел, и вызывает специальную программу-контроллер прерываний: -Эй ты, контроллер прерываний, ты что отдыхаешь, бездельник блин? Меня кто-то за 56-ю ножку дёргает . Иди выясняй, чтобы я от работы не отвлекался. Контроллер прётся выяснять. Посмотрел, что там с 56-ой ножкой, и понял! - надо прерывание обработать. И вызывает своего помощника – обработчика прерывания (у него их 255, а вызывает он одного, который отвечает за это прерывание) . Тот идёт разбираться – он читает состояние флагов, регистров, участков памяти и.т.д… и в зависимости от этого выполняет определённую функцию прерывания. Когда прерывание закончилось, электрончику с 56-й ножки контроллер и обработчик прерывания делают харакири и работа ЦПУ благополучно продолжается. |
Сообщ.
#13
,
|
|
|
То Tosha
для 32 битного тоже 4 байта (используется только смещение) |
Сообщ.
#14
,
|
|
|
Точно, точно... Но не всегда. Есть версии компиляторов (32бит) которые используют сегментированный 32 битный защищённый режим.
|
Сообщ.
#15
,
|
|
|
vot чо я вам скажу нащёт динамической переменной. указатель 4 байта - что в реале, что в 32 бите, только они обозначают разные вещи. в 16бит сегмент-смещение, а в 32бит только смещение.
при выделении динамической переменной происходит помимо записи адреса в указатель также отмечание её в каких-то системных закромах, занимающее по одной из теорий 48 байт. 65520 байт вот по какой причине. сегменты, как известно, адресуют память только с точностью до 16 байт. соответственно ежели твоя переменная следует в памяти за другой переменной и начинается с адреса, не кратного 16, обращение v[65535] будет ссылаться не на 64к-1 байт вперёд, а на несколько байт до начала переменной, т е на предыдущую переменную. |