|
|
|
Chingachguk |
|
|||
Эксперт Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: 11 Всего: 18 |
Ну что ж, все верно !
А под этими "почти 100%" я и имел в виду флажок направления. Думаю, хоть вероятность и мала, но все-таки есть ЗЫ А еще кто-нибудь сможет решить ? -------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
Alex101 |
|
|||
Опытный Профиль Группа: Участник Клуба Сообщений: 891 Регистрация: 8.4.2002 Где: Москва Репутация: нет Всего: 10 |
У меня есть старые наработки на асме - графические процедуры для разных режимов... Может кинуть сюда кое-что? Там и работа с портами... -------------------- С уважением, А. Фролов. |
|||
|
||||
Melancholy |
|
|||
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 1.4.2002 Репутация: нет Всего: нет |
||||
|
||||
Chingachguk |
|
|||
Эксперт Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: 11 Всего: 18 |
>Alex101 Написано: 28.5.2002,22:34
>Цитата (Chingachguk @ 08.4.2002,176) >>ЗЫ А еще кто-нибудь сможет решить ? >У меня есть старые наработки на асме - графические процедуры >для разных режимов... >Может кинуть сюда кое-что? Там и работа с портами... Вообще я пытался уроки написать ... До портов не дошло дело Графика тут постольку поскольку - я ж не демки рисовать ... Так что кидай рядом, видимо ! Тему создавай ! Или мне на мыл тоже Может, и я в тему допишу И народ ! -------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
PoluBOG |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 24.5.2002 Репутация: нет Всего: нет |
Ето круто, а как енту прогу в чистом асме оформить?
begin {Устанавливаем графический режим монитора 13h, 320x200, 256 цветов} asm mov ax, 00013h int 010h end; asm {Кусок рисования} mov ax, 0A000h mov es, ax mov di, 320*64 mov al, 004h mov cx, 320 cld {между прочим вероятность, что флажек CF установлен очень мола!!!} rep stosb {выполняем 64000 раз команду stosb} {Кусок рисования - Закончен} end; {Ожидаем нажатия клавиши} asm mov ah,0 int 16h end; {Устанавливаем текстовый режим монитора 03h, 80x25, 16 цветов текста и фона} asm mov ax,0003h int 10h end; end. Вариант 2 begin {Устанавливаем графический режим монитора 13h, 320x200, 256 цветов} asm mov ax, 00013h int 010h end; asm {Кусок рисования} mov ax, 0A000h + 20*64 mov es, ax xor di, di mov al, 004h mov cx, 320 cld rep stosb {выполняем 64000 раз команду stosb} {Кусок рисования - Закончен} end; {Ожидаем нажатия клавиши} asm mov ah,0 int 16h end; {Устанавливаем текстовый режим монитора 03h, 80x25, 16 цветов текста и фона} asm mov ax,0003h int 10h end; end. |
|||
|
||||
Заходяга |
|
|||
Unregistered |
Искал я на поисковиках строку "Том Сван" - не находит. Может подскажешь где найти |
|||
|
||||
end1 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 30.6.2002 Репутация: нет Всего: нет |
Chingachgukу пора писать книгу.Однозначно.
|
|||
|
||||
Baa |
|
|||
Эксперт Профиль Группа: Экс. модератор Сообщений: 2639 Регистрация: 12.4.2002 Где: Москва Репутация: нет Всего: 12 |
-------------------- "Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande |
|||
|
||||
Edmond |
|
|||
Unregistered |
||||
|
||||
Baa |
|
|||
Эксперт Профиль Группа: Экс. модератор Сообщений: 2639 Регистрация: 12.4.2002 Где: Москва Репутация: нет Всего: 12 |
Wasm оно ток недавно...эт 2 сайта слили...а он давно статьи писал на дZене
-------------------- "Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande |
|||
|
||||
Jon |
|
|||
Unregistered |
напиши по подробнее для чего нужна команда int
|
|||
|
||||
Chingachguk |
|
|||
Эксперт Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: 11 Всего: 18 |
Как правило, в системе существуют одновременно кроме программы пользователя различные системные программы и обработчики прерывания.
Разумеется, это необязательно - можно писать самодостаточные программы, совершенно ни в ком не нуждающиеся. Однако как правило программа запускается ОС и часто вызывает сервисы ОС. В свою очередь ОС вызывает программы БИОС(дос-семейства) или собственные обработчики (WinNT, Unix) или и те и другие (Win98) прерываний для доступа к устройствам (дискам, звуковой карте и проч.). Как организовать вызовы таких обработчиков ? Ставим задачу: пусть выполняется программа пользователя и существуют аппаратные прерывания от таймера. При возникновении прерывания процессор (он не может выполнять одновременно несколько программ) должен "временно отложить" выполнение программы пользователя, выполнить некую "программу обработки события прерывания от таймера" и вернуться к выполнению основной программы; при этом он должен: - обеспечить "прозрачность" работы программы-обработчика относительно программы пользователя, т.е. не нарушить работу основной программы; - уметь вернуть управление пользовательской программе без разрушения оной. - Знать, где находится программа-обработчик прерывания. Начнем с конца. В процессоре 8086 для конкретизации места обработчиков прерываний в памяти в памяти начиная с адреса 0 расположена ТАБЛИЦА АДРЕСОВ обработчиков прерываний. Каждый адрес дальний (far), он состоит из сегмента обработчика и его смещения в этом сегменте. В таблице 256 элементов. Размер каждого адреса 4 байта: seg:offset. Заполняет эту таблицу адресами обработчиков кто угодно: bios - своими адресами, дос-другим, вирус - своими ;) Аппаратно прерывания имеют свои номера: те процессор в момент прерывания знает лишь: 1) Произошло прерывание; 2) Номер прерывания. Далее по номеру прерывания он вычисляет адрес обработчика по ТАБЛИЦЕ АДРЕСОВ: Номер прерывания x 4 = Адрес в памяти Адреса Обработчика; Извлекая найденный адрес, Он передает на него управление и запоминает в стеке адрес той точки основной программы, которая выполнялась на момент прерывания, чтобы вернуться к ней впоследствии, а также регистр флагов: Действия процессора по сохранению контекста прерванной программы: push Flags push segment push offset jmp dword ptr 0000:[Номер прерывания x 4] Вызванный обработчик прерывания может сразу же вернуть управление прерванной программе одной командой: iret Которая пользуясь сохраненным контекстом прерванной программы на стеке (выше) вернет управление: Действия процессора по возвращению управлению прерванной программе: Flags <- Флаги со стека Восстановить стек jmp на сохраненный адрес в стеке. Таким образом, в памяти находятся программы, выполняющиеся в момент того или иного прерывания. А теперь ответ на вопрос. Их можно вызывать программно. Те не процессор переключает задачу на них, а сам программист специальной командой int: int NN, NN - Номер прерывания, опкод 0xCD,0xNN (2 байта). После выполнения этой команды ДЕЙСТВИЯ ПРОЦЕССОРА АБСОЛЮТНО ЭКВИВАЛЕНТЫ его реакции на аппартное прерывание. Разумеется, вызвать код обработчика можно не только командой int, а и call far, jmp far, retf... и т.д. Просто так удобнее ;) Таким образом появляется возможность вызывать сервисы ОС, БИОС и всякие другие через Таблицу Адресов прерываний. Это удобно прежде всего тем, что вызов можно осуществить лишь ЗНАЯ НОМЕР ПРЕРЫВАНИЯ (иногда говорят "номер вектора") в отличии от того случая, когда вызов осуществляется по заданному адресу. Так, например в ОСь Linux осуществляется всего лишь вызовом int 80h в отличии от других Unix, где, к примеру, системную программу можно вызвать через дальний call: call 0000007 ; Вызов системы в одном из unix. ДОС может быть вызван по нескольким прерываниям: int 20h, int 21h, int 23h, int 24h, ... ,int 25h, int 26h... БИОС: int 10h, int 13h, int 15h, ... А вот в winNT можно вызвать систему также, в отличии от win98: int 2Eh ; Вызов WinNT и ее наследников из пользовательского кода. -------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
Jon |
|
|||
Unregistered |
Почему в уроке 3 вы написали что видеобуфер начинаеться с A0000h, а в программе надо записывать 0A000h?
|
|||
|
||||
Chingachguk |
|
|||
Эксперт Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: 11 Всего: 18 |
Потому, что в программе мы оперируем содержимым сегментного регистра для доступа к памяти:
mov ax,0a000h mov es,ax в то время как процессор вычисляет адрес ячейки памяти следующим образом: Адрес = Сегментный регистр(es - тот, который используется) x 16 + смещение. Собственно, об этом я и писал где-то тама ;) -------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
Jon |
|
|||
Unregistered |
Как считать значение ячейки и вывести её значения на экран.Допустим 1beh
|
|||
|
||||
Правила форума "Asm для начинающих" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Asm для начинающих | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |