Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Ассемблер? Это просто! Учимся программировать (FAQ)


Служба Рассылок Subscribe.Ru проекта Citycat.Ru

Ассемблер? Это просто! Учимся программировать (FAQ)
______________________________________

Выпуск N 023

Вопросы, которые поступили от подписчиков рассылки
"Ассемблер? Это просто! Учимся программировать"

Дата выхода: 2001-06-15


Вопрос №145

Надо ли обязательн знать для чего какие

регистры предназначены ?

Ответ

Смотря, где программите, товарищ!!

Если в 32bit защищённом режиме или MustDie (что, в принципе, почти
одно и тоже), то надо только знать, что все API-функции сохраняют
значения регистров EBX,ESI,EDI и EBP, что оконные функции должны
сохранять значения этих регистров, что ESP указывает на стек и,
наконец, что в регистре EAX всегда возвращается значение (API).

Если в 16bit защищённом режиме или в реальном режиме, то, я думаю,
что обязательно!!!


Отправил: Nik
Эксперт отправил ответов (всего): 12

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №146

Уважаемые эксперты, помогите кто чем может!



Я программирую на Паскале с использованием встроенного ассемблера.

1)При включении графического режима 640х480х256

( mov ax,02eh; int 10h )

У меня возникают сложности с выводом пикселя на экран.

Вся проблема в том, что я знаю только как это сделать в режиме 13h (320x200x256).

В режиме 640х480 у меня почему то изображение дублируется в 2-х экземплярах.

Помогите мне написать процедуру вывода пикселя на экран.

И пожалуйста с комментариями, а то я ничего не пойму.



2) И ешще я бы хотел узнать, как работать с видео страницами в режиме 640х480х256

( здесь та же проблема)



Если не сложно то помогите примерами.



Заранее благодарен.

Ответ

Уважаемый, ты влип! Во-первых, ты представляешь сколько видеопамяти надо под 640х480х256 - 330Кб. А окно для для видеопамяти - в адресном пространстве 64Кб. Если умеещь в паскале в защищенном режиме программировать - флаг тебе в руки, там все просто и этого ограничения нет(если карта поддерживает VBE 2.0). А в реальном режиме это полный изврат, с вышеупомянутыми отягчающими обстоятельствами.
Во-вторых ты как в этот режим переходишь? Я чегой-то недопонял. Это не VGA уже, а SVGA режим. Тут надо пльзоваться другой функцией.
mov AX, 4F02h ; номер функции установки SVGA режима
mov BX, 0101h ; номер нужного тебе режима
int 10h
Пускай - x, y, color - переменные с информацией о нашем пикселе.
Тогда для вывода нужного пикселя тебе нужно проделать следующие магические пассы. Тьфу, забыл. Тебе еще желательно сразу вычмслить следующие выражения:
WinPos=(y*640+x)/65536. WinPos - номер 64Кб блока в котором находится пиксель.
PixPos=(y*640+x) mod 65536 - смещение пикселя от начала 64Кб блока.
Уф - предварительная часть закончена. Теперь Ассемблер.
mov AX, 0A000h ;Загоняем в регистр
mov ES, AX ; ES - адрес начала видеопамяти.
mov AX, 4F05h ; номер функции для работы с окном доступа к видеопамяти.
mov BH, 0 ; Установка позиции окна видеопамяти.
mov BL, 0 ; Установка 0-го окна(окна "A").
mov DX, WinPos
int 10h
;Теперь собственно вывод самого пикселя.
mov BX, PixPos
mov AX, color
mov ES:[BX], AX


Отправил: Александр
Эксперт отправил ответов (всего): 34

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №149



Что такое реальный и защищённый режим ?

Поясните хотябы в краце .

Ответ

Реальный режим это режим процессора. В нём можно адресовать объём памяти 1024 кб (максимум). Реальный режим используется в дос и существует на современных компьютерах для обеспечения совместимости.
Защищенный режим, режим процессора в котором можно адресовать до 4 гб в памяти. Используется в ОС Виндоус(и др. ОС). Естесственно что у защищённого режима гараздо больше возможностей нежели у реального режима. (Реальный режим умирает)


Отправил: sasha
Эксперт отправил ответов (всего): 16

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №152

Команда org значит "с какого места отсчитывать смещение "

то есть получается что она указывает просто на сегмент ?

Ответ

значит так! команда org делает смещение в сегменте, с которого программа будет выполняться! например для .com файла это всегда
org 100h т.е. смещение 256 байт от начала сегмента! в этих байтах находится PSP.


Отправил: sasha
Эксперт отправил ответов (всего): 17

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №150

Т.е получается что если в разнае регистры

загружать одно и тоже число , оно может значить

разные вещи: если в один регистр ,то это адрес сегмента

если в другой то просто число , так или нет ?

Ответ

Понимаешь, есть разные регистры. Например общие регистры необходимы в основном для арифмитический, логических и др. операций... а сегментые регистры и спользуются для операции с сегментами! Могу дать ,Совет! УЧИ регистры... их значение!


Отправил: sasha
Эксперт отправил ответов (всего): 18

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №151

Что такое функция прерывания ?

Ответ

Прерывание это, если по простому - системная подпрограмма, которую ты вызываешь для облегчения ввода-вывода, например. А функция прерывания - это когда прерывание сложное, то каждое действие которое оно делает выбирается тем, что в регистре(обычно AX) устанавливают номер этого самого действия. Т.е., например, если какое-то гипотетическое прерывание отвечает за ввод-вывод, то 0-ая функция ввод, 1-ая вывод.


Отправил: Александр
Эксперт отправил ответов (всего): 35

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №152

Команда org значит "с какого места отсчитывать смещение "

то есть получается что она указывает просто на сегмент ?

Ответ

Читать надо так: "команда org означает, что указанное количество байтов резервируются программой, т.е. инструкция следующая за org отстоит от предшествующей org инструкции на указанное число байтов".
Это не из книжки, но это правильно.


Отправил: Александр
Эксперт отправил ответов (всего): 36

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №151

Что такое функция прерывания ?

Ответ

Ну, в общем, в некоторых обработчиках прерываний идёт сравнение числа
из определённого регистра (обычно AX) с разными числами и вызов соот-
ветствующих функций. Например, пусть есть прерывание 0FFh, при запус-
ке которого в регистре AX передаётся число 1 или 2, так что 1-перезаг-
рузиться, а 2-выключить комп, тогда в AX передаётся функция прерывания

mov ax,1 ; функция 1 прерывания 0FFh - перезагрузиться
int 0FFh ; do it!!

PS: Не пробуй делать это где-либо: прерывание 0FFh - просто пример,
и на самом деле функций он не выполняет (там обычно один IRET).


Отправил: Nik
Эксперт отправил ответов (всего): 13

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №147

Я запускаю Нортон , ищу файл

masm.exe жму ентер и ничего не запускется

то же самое с ml.exe

Единственное что при запуске masm . exe

слева на экране появляется надпись вроде :

usage : MASM [option...] source (.asm ) , итд

Что делать ?

И как его под Виндами запустить , его запускаю

и ничего не происходит , но когда нажимаю ctrl alt del

то он в списке задач есть ...

Ничего не понимаю что делать ?

Ответ

С параметрами надо запускать, дурак!!!

Например: ml /? - Вывод справки
ml myfile.asm - откомпилить и скомпоновать файл "myfile.asm"

PS: ПЕРЕВОД:

usage : MASM [option...] source (.asm )
использование : MASM [параметр...] исходник_на_асме (.asm)
В квадратных скобках указаны необязательные части командной строки.


Отправил: Nik
Эксперт отправил ответов (всего): 14

Экспертная группа: Работа с MASM/TASM

Вопрос №148

Эксперты! Ответьте, пожалуйста, в чем тут дело?



.model tiny

.code

org 100h

.386



start:

mov ax,03h

int 10h ; текстовый режим



mov ax,0

int 33h ; инициализация мыши



mov ax,0Ch ; установить обработчик

mov cx,2h ; условие: левая кнопка мыши нажата

mov dx,offset obrab ; адрес обработчика

int 33h



mov ah,0

int 16h ; нажмите же кнопку!



mov ax,0Ch

mov cx,0

int 33h ; удалить обработчик



ret ; выход из ком проги





obrab:



mov ah,9h

mov dx,offset mes

int 21h

retf



mes db 'test'



end start



Как вы уже догадались, программа выводит строку "Тест" при нажатии левой кнопки мыши. Т.е. она должна ее выводить, но комп просто виснет намертво (один раз даже почему то сбросилась часть настрек CMOS...)

В умной книжке прочитал, что "... при вызове обработчиков прерываний лучше не использовать в них никаких прерываний дос, особенно 21h. Также не рекомендуется использовать прерывания BIOS...". Что делать? (пробовал ВСЕ прерывания и доса и биоса вывода на экран, в лучшем случае выводится какаято х..ня.

P.S. Если переделать ее в EXE, то она вообще почему то при нажатии на лев. кнопку выдает какоето тупое сообщение об ошибке (мне кажется, это тоже както связано с 21h).

Пожалуйста, помогите!

Ответ

mes db 'test$'
^ Ну, во-первых, надо внимательнее быть!
Строка должна заканчиваться знаком доллара ($)
Во-вторых, при запуске обработчика DS указывает на сегмент данных
драйвера мыши, а не на сегмент вашей программы!!! Надо добавить
две строчки сразу после метки obrab
для com:
push cs
pop ds

для exe:
push seg DGROUP
pop ds


Отправил: Nik
Эксперт отправил ответов (всего): 15

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №144

Работает ли MASM под виндами

И как его запустить ?

Извините , может глупо , но я чайник

и тока начинаю ещё .

Ответ

Ассемблировать при помощи MASM нужно из командной строки:
1) Пуск - Программы - Сеанс MSDOS.
2)Потом лучше перейти в тот каталог в котором у вас MASM:
cd c:\masm611\bin\
3) c:\masm611 - Туда установлен МАСМ. Файл-asm должен быть в этой директории (так удобнее), затем компилируете:
1. ml.exe prog.asm /AT --------------- COM - файл.
2. ml.exe prog.asm --------------- ASM - файл.
Если что, пиши evgo1@email.kht.ru


Отправил: Evgos (http://ospelnikov.narod.ru - Личная страничка)
Эксперт отправил ответов (всего): 11

Экспертная группа: Пользовательская работа с Windows

Вопрос №147

Я запускаю Нортон , ищу файл

masm.exe жму ентер и ничего не запускется

то же самое с ml.exe

Единственное что при запуске masm . exe

слева на экране появляется надпись вроде :

usage : MASM [option...] source (.asm ) , итд

Что делать ?

И как его под Виндами запустить , его запускаю

и ничего не происходит , но когда нажимаю ctrl alt del

то он в списке задач есть ...

Ничего не понимаю что делать ?

Ответ

Использовать Его надо из командной строки Cеанса MSDOS.


Отправил: Evgos (http://ospelnikov.narod.ru - Личная страничка)
Эксперт отправил ответов (всего): 13

Экспертная группа: Работа с MASM/TASM

Вопрос №152

Команда org значит "с какого места отсчитывать смещение "

то есть получается что она указывает просто на сегмент ?

Ответ

org - это НЕ команда, а директива ассемблера, разница есть! директива не выполняет никакой операции (в отличии от команды), ее в конечном коде программы не будет. директивы указывает ассемблеру как формировать код и все. директива org показывает какое смещение в месте программы, где она находится. она может быть не только в начале, как в .com программах org 100h, но и где угодно. если ассемблер где-то в программе встречает org N, то все последующие адреса он будет отсчитывать от N, т.е адрес = N + <соответствующее смещение>. и ни на какой сегмент она не указывает, она вообще никуда не указывает.


Отправил: BELTSY
Эксперт отправил ответов (всего): 19

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №150

Т.е получается что если в разнае регистры

загружать одно и тоже число , оно может значить

разные вещи: если в один регистр ,то это адрес сегмента

если в другой то просто число , так или нет ?

Ответ

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


Отправил: BELTSY
Эксперт отправил ответов (всего): 20

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №149



Что такое реальный и защищённый режим ?

Поясните хотябы в краце .

Ответ

у процессоров семейства 80х86 до 80286 был только реальный режим. начиная с 80286 появился и защищенный. в реальном режиме адресация производится с помощью сегментых регистров (селекторов) и смещения (физический адрес высчитывается так: seg shl 4 + offset), любая программа может обращаться к любому участку памяти (размещать свои данные, модифицировать другие и т.д.), используется 20-ти разрядная шина (отображаемая память не превышает 1 Мб, хотя потом и появился расширитель EMS, который позволял испльзовать до 32 Мб памяти). этот режим не предназначен для многозадачности, т.к. одна программа может "мешать" другой (хотя многозадачность и можно реализовать программно). в защищенном режиме хотя также используются сегментые регистры, но значение селектора уже не просто верхние 16 бит 20-ти битного линейного адреса, а указатель в таблицу дескрипторов (сегмент уже ограничен не 64 Кб, а 4 Мб, кроме 286-х, они еще не 32-х, а ! 24-х битные), задачи имеют 4 (0..3) уровня привелегий, и одна задача не может лезьть в область данных другой не имея соответсвующих привилегий, переключение между задачами поддерживается процессором, система прерываний тоже изменена по сравнению с 8086, ну и еще куча новшеств, но основные вроде назвал.


Отправил: BELTSY
Эксперт отправил ответов (всего): 21

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Подписаться на рассылки

Рассылки Subscribe.Ru
Ассемблер? Это просто! Учимся программировать
Ассемблер? Это просто! Учимся программировать (FAQ)

Задать вопрос экспертам

Регистрация в качестве эксперта


Ведущий рассылки,

Калашников Олег: Assembler@Kalashnikoff.ru
ICQ No.:
68951340
URL сайта подписчиков: http://www.Kalashnikoff.ru

______________

По вопросам сотрудничества, рекламы и спонсорства обращайтесь:

  1. Публичное размещение материала из рассылки: Cooperation@Kalashnikoff.ru
  2. Реклама на сайте, в книге и рассылках: http://www.Kalashnikoff.ru/Reklama.html, Reklama@Kalashnikoff.ru
  3. Издание книги (спонсорство): Sponsor@Kalashnikoff.ru

Рассылка 'Ассемблер? Это просто! Учимся программировать (FAQ)' Рассылка 'Ассемблер? Это просто! Учимся программировать'


(C) Москва, 2001. Авторское право принадлежит Калашникову О.А. Публичное размещение материала из рассылки, а также его использование полностью или частично в коммерческих или иных подобных целях без письменного согласия автора влечет ответственность за нарушение авторских прав.


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться Рейтингуется SpyLog

В избранное