Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ASM - с чего начать? 
:(
    Опции темы
Chingachguk
Дата 8.4.2002, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: 11
Всего: 18



Ну что ж, все верно ! ;)

А под этими "почти 100%" я и имел в виду флажок направления.
Думаю, хоть вероятность и мала, но все-таки есть ;)


ЗЫ А еще кто-нибудь сможет решить ?


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
Alex101
Дата 28.5.2002, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 891
Регистрация: 8.4.2002
Где: Москва

Репутация: нет
Всего: 10



Цитата(Chingachguk @ 08.4.2002, 17:06)
ЗЫ А еще кто-нибудь сможет решить ?

У меня есть старые наработки на асме - графические процедуры
для разных режимов...
Может кинуть сюда кое-что? Там и работа с портами...


--------------------
С уважением, А. Фролов.
PM MAIL ICQ   Вверх
Melancholy
Дата 29.5.2002, 00:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 1.4.2002

Репутация: нет
Всего: нет



Можешь кинуть и мне на мыло! ;)
мой мыл
PM MAIL ICQ   Вверх
Chingachguk
Дата 29.5.2002, 02:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: 11
Всего: 18



>Alex101  Написано: 28.5.2002,22:34    
>Цитата (Chingachguk @ 08.4.2002,17:06)
>>ЗЫ А еще кто-нибудь сможет решить ?
>У меня есть старые наработки на асме - графические процедуры
>для разных режимов...
>Может кинуть сюда кое-что? Там и работа с портами...

Вообще я пытался уроки написать ... До портов не дошло дело ;)
Графика тут постольку поскольку - я ж не демки рисовать ...

Так что кидай рядом, видимо ! Тему создавай ! Или мне на мыл тоже ;)
Может, и я в тему допишу ;) И народ !


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
PoluBOG
  Дата 29.5.2002, 22:28 (ссылка)   | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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.
PM MAIL   Вверх
Заходяга
  Дата 4.6.2002, 14:07 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(neutrino @ 25.3.2002, 12:48)
Est takaia bolshaia kniga Toma Svana (Tom Swan) nazivaetsia "programmirovanie v Turbo Assembler". Ochen podrobnoe opisanie. Kucha primerov i poniatno napisannaia.
Rekomenduiu. :)

Искал я на поисковиках строку "Том Сван" - не находит.  ??? Может подскажешь где найти  :huh
  Вверх
end1
Дата 30.6.2002, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 30.6.2002

Репутация: нет
Всего: нет



Chingachgukу пора писать книгу.Однозначно.
PM MAIL   Вверх
Baa
Дата 1.7.2002, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: нет
Всего: 12





--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
Edmond
Дата 15.8.2002, 21:33 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Вы и
WASM.RU
Незабывайте...

P.S
Чинганчук. Ах, незнал, незнал!!!
Чтож ты так скромничаешь?
  Вверх
Baa
Дата 22.8.2002, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: нет
Всего: 12



Wasm оно ток недавно...эт 2 сайта слили...а он давно статьи писал на дZене


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
Jon
  Дата 6.11.2002, 09:09 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











напиши по подробнее для чего нужна команда int
  Вверх
Chingachguk
Дата 6.11.2002, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 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 0000:0007 ; Вызов системы в одном из 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.
PM MAIL ICQ   Вверх
Jon
  Дата 7.11.2002, 01:54 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Почему в уроке 3 вы написали что видеобуфер начинаеться с A0000h, а в программе надо записывать 0A000h?
  Вверх
Chingachguk
Дата 8.11.2002, 06:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 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.
PM MAIL ICQ   Вверх
Jon
Дата 9.11.2002, 01:06 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Как  считать значение ячейки и вывести её значения на экран.Допустим 1beh  :sneaky2
  Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.1575 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.