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

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


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

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

Выпуск N 035

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

Дата выхода: 2001-07-13


Вопрос №295

здравствуйте!
я начинающий, скажите пожалуйста где найти подробное описание всех прерываний(например int 21h и т.д.) в электронном виде?
заранее спасибо.

Ответ

Здравствуйте, Dmitriy Revyakin!
Напиши мне я вышлю Help33rus


Отправил эксперт: AGat
Эксперт отправил ответов (всего): 7

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

Вопрос №303

Не могу понять что происходит.
Наверное какая-то общая проблема а не частный случай. Надеюсь Вы мне поможете.

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


Если на вопрос ответить затруднительно, не могли бы Вы посоветовать ресурс, где подробно описано как правильно сохранять и восстанавливать экран после выхода из процедуры?

Ответ

Здравствуйте, Андрей!

Вероятно ты не сохраняешь указатель на старый обработчик прерывания..
Перед установкой прерывания старый указатель надо сохранить, а перед выходом из программы - восстановить...

Кстати, что там вообще за программа? привел бы...


Отправил эксперт: Dron
Эксперт отправил ответов (всего): 34

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

Вопрос №305

Здравствуйте, уважаемые эксперты!
Скажите, а можно написать программу, работающую как под DOS, так и под Windows?

Ответ

Здравствуйте, Stepan Yar!
Если писать программу под DOS, то она будет работать как под DOS, так и под Windows (в режиме эмуляции DOS. Т.е., например, как любые другие старые программы под DOS: DOS Navigator, Norton Commander и пр.).
Если же Вы напишете программу под Windows, то она будет работать ТОЛЬКО под Win. Все дело в том, что форматы разные. Например, под Windows невозможно написать программу в формате COM, только EXE.
При запуске программы (под ОС Windows) ОС считывает прежде всего заголовок EXE-файла. Если это формат PE или NE, то значит, что программа написана под Windows. Если запустить ее под DOS, то она также отработает, но выдаст пользователю сообщение типа: "Программа должна быть запущена только под Windows". Это значит, что при написании программы под Win создается заголовок EXE-файла как для DOS (который выводит это сообщение), так и под Windows.

Сумбурно, но, вроде, понятно. Может кто-нибудь из экспертов также ответит на этот вопрос.


Отправил эксперт: Олег Калашников (http://www.Kalashnikoff.ru - Информационный ресурс)
В рейтинге не участвует!

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

Вопрос №305

Скажите, а можно написать программу, работающую и из ДОСа и из Винды?

Ответ

Здравствуйте! Почти все досовские программы работают из под винды, но ты наверное имеешь ввиду, чтобы она имела в случае с дос, досовский интерфейс, а если запущена винда, то виндозный. Думаю что можно, если сделать проверку, запущен ли виндоуз, но все ровно тогда этот загрузчик придется делать полностью под Дос, еще я не знаю как такое можно реализовать под Вин2к, это личное мнение, во всяком случае я не видел таких программ.


Отправил эксперт: Vasis
Эксперт отправил ответов (всего): 1

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

Вопрос №303

Не могу понять что происходит.
Наверное какая-то общая проблема а не частный случай. Надеюсь Вы мне поможете.

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


Если на вопрос ответить затруднительно, не могли бы Вы посоветовать ресурс, где подробно описано как правильно сохранять и восстанавливать экран после выхода из процедуры?

Ответ

Здравствуйте, Андрей!
Нету примера программы, поэтому ответ общий:(- самая распространенная ошибка:
ты не разрешаешь прерывание от клавиатуры в конце обработчика
Надо
1. либо вызывать старый обработчик, или
2. писать в 20h порт константу 20h - признак окончания работы обработчика клавы


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

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

Вопрос №305

Скажите, а можно написать программу, работающую и из ДОСа и из Винды?

Ответ

Здравствуйте, Stepan Yar!
Конечно!
Сначала надо проверить, запущена ли винда с помощью прерывания
INT 2fH 1600H: Is Enh386 Windows Installed?
Returns: AX if Enhanced-Mode Windows is not running, AL=00H or AL=80H.
if Enh386 Win 3.x+ is installed: AL = major version number
AH = minor version number
if Win/386 2.x is installed AL=01H or ffH
А потом соответственно решать, какой кусок кода должен выполняться


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

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

Вопрос №308

Привет.
Я уже задавал этот вопрос но не получил не одного внятного ответа почему программа не работает так как надо.

Описание:
Звездное Небо

Как задумывалось:
На экране мерцают NUMBER_OF_STAR звезд. Как только
звезда достигает состояния WHITE_COLOR (максимальной степени "загара"), она тушиться. Затем тыкаеться еще одна звезда в случайном загаре. Таким образом на экране постоянно находяться NUMBER_OF_STAR звезд с разной загарелостью.

Что происходит на деле:
На деле на экран высыпаются NUMBER_OF_STAR звезд в случайной фазе и ВСЕ! То есть, почему-то не происходит мерцания, хотя в исходнике это предусмотрено. В этом вся загвоздка. В исходнике есть, а не работает!!!

Поэтому я прошу Вас посмотреть и сказать - что и где я не так сделал. ПОЧЕМУ НЕ ПРОИСХОДИТ МЕРЦАНИЕ?
Я уже почти неделю в этой проге ковыряюсь, но так и не понял, в чем причина.

Исходник прилагаеться.
Спасибо.

З.Ы. Я специально для Вас выложил исходник на http://asm.lgg.ru/stars.zip на тот случай, если кому лень все это переносить в .asm-файл и компилить.

Ответ

Здравствуйте, Stepan Yar!

Ошибка №1

FindStar:
mov ah, 1
int 16h
jnz exit ; Если NZ!!!

А вот с этим scasb я разобраться так и не смог... глюки какие-то...
Красит почему-то весь экран...
поставил cmp es:[di], al
Все нормально...
Соответственно еще инкременты не забыть...
Чудеса какие-то.


Отправил эксперт: Dron
Эксперт отправил ответов (всего): 35

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

Вопрос №309

У меня стоит
Пень 166MMX/64Mb/32Mb RIVA TNT2/HDD 41Gb IBM

Я хочу сделать апгрейд мамки и камня. Коллеблюсь, что именно брать.
Чем отличается Athlon от Thunderbird (1 Гигагерц)? (Кроме цены)
И вообще стоит ли брать AMD? Они вроде дешевле Интела...
Какую материнку лучше брать?
Да, и еще. Какой процессор идет под Socket 370?

Ответ

Здравствуйте, Stepan Yar!
Бывают Атлоны на SlotA
Атлоны Сандерберд на SocketA

У просто Атлонов кеш работает на меньшей частоте, чем проц, а у сандеров - на той же
Мама по моему мнению Soltek-лучшая!
Наилучшее соотношение цена\качество - у Duron 750 на Солтеке
Socket 370 - Celeron


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

Экспертная группа: Модели, виды и типы компьютеров (hard)

Вопрос №308

Привет.
Я уже задавал этот вопрос но не получил не одного внятного ответа почему программа не работает так как надо.

Описание:
Звездное Небо

Как задумывалось:
На экране мерцают NUMBER_OF_STAR звезд. Как только
звезда достигает состояния WHITE_COLOR (максимальной степени "загара"), она тушиться. Затем тыкаеться еще одна звезда в случайном загаре. Таким образом на экране постоянно находяться NUMBER_OF_STAR звезд с разной загарелостью.

Что происходит на деле:
На деле на экран высыпаются NUMBER_OF_STAR звезд в случайной фазе и ВСЕ! То есть, почему-то не происходит мерцания, хотя в исходнике это предусмотрено. В этом вся загвоздка. В исходнике есть, а не работает!!!

Поэтому я прошу Вас посмотреть и сказать - что и где я не так сделал. ПОЧЕМУ НЕ ПРОИСХОДИТ МЕРЦАНИЕ?
Я уже почти неделю в этой проге ковыряюсь, но так и не понял, в чем причина.

Исходник прилагаеться.
Спасибо.

З.Ы. Я специально для Вас выложил исходник на http://asm.lgg.ru/stars.zip на тот случай, если кому лень все это переносить в .asm-файл и компилить.

Ответ

Здравствуйте, Stepan Yar!
В общем - там до чертиков переделок-разбирайся!
Основное jnz exit
repe scasb-и di указ на след символ
Некоторое изменение генератора

Приложение:


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

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

Вопрос №310

Здравствуйте уважаемыеэксперты!
У меня такой вопрос:
В009выпускерассылкипри открытиифайлакомандойmovcx,offsetFinish-100h
мы загружаемв cxразмер нашей программыв байтах,
длячего это делается?Ведьпризагрузкепрограммыв памятьврегистрcxавтоматическизагружаетсяразмервыполняемойпрограммы(япользуюсьAFDpro)
Суважением,
Вадим...

Ответ

Здравствуйте, Вадим!
Если при загрузке программы в cx всегда(в чём я не уверен)помещается размер программы,то эту строку в программе из (009)можно убрать(не большая оптимизация).


Отправил эксперт: snaker
Эксперт отправил ответов (всего): 1

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

Вопрос №316

Здравствуйте.
Как реализовать генератор случайных чисел с помощью команд ассемблера.

Ответ

Здравствуйте, Павел!
Реализовать генератор случайных чисел можно с помощью микросхемы таймера.Подробную информацию об этом можно найти в книге Роберта Журдена, электронный вариант которой, можно скачать на сайте Калашникова Олега.


Отправил эксперт: Oleg G
Эксперт отправил ответов (всего): 1

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

Вопрос №317

Я сейчас изучаю видео память. Из сего вопрос к вам.
Кто знает, как можно перезаписать палитру в 13h'м режиме? Т.е допустим раньше при записи байта WHITE_COLOR был белый цвет, а теперь зеленый или какой другой.

Ответ

Здравствуйте, Stepan Yar!
-------------------------
Режим 13h является палитровым, поэтому при записи байта в область видеопамяти Вы записываете номер ячейки палитры (таблицы цветов). Палитра содержит 256 цветов, каждый из которых может быть легко перепрограммирован, либо через прерывание 10h (BIOS), либо через регистры видеоадаптера (ВА) или, точнее, контроллера ЭЛТ.
1) Через регистры
Выбираем i-тую ячейку палитры:
|| mov dx, 3C8h | mov al, i | out dx, al
Пишем туда код цвета в формате RGB, поочереди - R, затем G, затем B
|| mov dx, 3C9h;
|| для C=R,G,B делаем mov al, C | out dx, al
Если цвета пишутся из массива (например, заменяются сразу все 256 цветов палитры), то не имеет смысла каждый раз выбирать следующий цвет, достаточно последовательно писать в 3C9h R,G и B из этого массива, предварительно выбрав первый заменяемый цвет через 3C8h.
2) BIOS (сразу для массива)
mov ax, 1012h
mov cx, 100h ; Количество цветов (256)
mov bx, 0 ; Первый цвет
mov es, segment ; Сегмент и смещение массива в памяти
mov dx, offset
int 10h
---------------------------
Для первого метода следует предусмотреть ожидание обратного вертикального хода луча ЭЛТ (рекомендуется). Особенно если пишется сразу много цветов.

mov dx,es:[463h]
; DX = 3BAh (Ч/Б) / 3DAh (Цветной) = Индексный Регистр
add dx,6
; DX = Первый Регистр Состояния Контроллера ЭЛТ
in al,dx ; !
test al,08h ; ловим 3-й бит
; ZF=0 => обратный вертикальный ход луча
jz vert_hod
scr_draw:
in al,dx ; !
test al,08h
jnz scr_draw
vert_hod:
in al,dx ; !
test al,08h
jz wait_on

; ПИШЕМ ТАБЛИЦУ ЦВЕТОВ

; ! - после ввода/вывода в регистр, как правило, следует немного подождать, например nop | nop.

Первый метод гораздо быстрее, настолько, что палитру можно менять (не всю, правда) при каждом горизонтальном обратном ходе луча, т.е. один и тот-же цвет (по номеру в палитре) на экране может меняться в зависимости от номера строки развёртки.


Отправил эксперт: AVC
Эксперт отправил ответов (всего): 1

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

Вопрос №316

Здравствуйте.
Как реализовать генератор случайных чисел с помощью команд ассемблера.

Ответ

Здравствуйте, Павел!

Если ассемблер для IBM PC, то можно так:
; ИНИЦИАЛИЗАЦИЯ: AX - диапазон
; Можно сделать красивей (на более старших архитектурах)
mov dx, 43h
out dx, 0B6h
dec dx
out dx, al
out dx, ah
mov dx, 61h
in al, dx
or al, 1
out dx, al
; ПОЛУЧКА: AX - число
mov dx, 43h
out dx, 86h
in al, dx
mov ah, al
in al, dx
...


Отправил эксперт: AVC
Эксперт отправил ответов (всего): 2

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

Вопрос №309

У меня стоит
Пень 166MMX/64Mb/32Mb RIVA TNT2/HDD 41Gb IBM

Я хочу сделать апгрейд мамки и камня. Коллеблюсь, что именно брать.
Чем отличается Athlon от Thunderbird (1 Гигагерц)? (Кроме цены)
И вообще стоит ли брать AMD? Они вроде дешевле Интела...
Какую материнку лучше брать?
Да, и еще. Какой процессор идет под Socket 370?

Ответ

Здравствуйте, Stepan Yar!
Athlon отличается от Thunderbird тем, что у T-Bird интегрированный в ядро процессора 256 килобайтный кеш второго уровня,работающий на одной частоте с процом.Отсюда и большее быстродействие T-Bird.
Intel или AMD?
Процессоры фирмы AMD, в частности T-Bird, имеют некоторые существенные
преимущества по сравнению с Intel'овскими, например, как я уже писал выше - процессор и L2 кэш на одном кристалле работают на одной и той же частоте, что гарантирует получение процессором данных из кэша с минимальными задержками.
Насчёт цены:
Процы от AMD дешевле, но матки для них дороже чем для Intel'овских.
В целом же покупка проца AMD и матки к нему, по моему, обойдется дешевле чем покупка такого же набора для Intel'а. Но тут есть один косячок - не все матки под AMD работают стабильно.Если будешь покупать
T-Bird, то бери матку на чипсете AMD750, но только не на KX133 от VIA.
Под Socket370 работают все Celeron'ы.


Отправил эксперт: Oleg G
Эксперт отправил ответов (всего): 2

Экспертная группа: Модели, виды и типы компьютеров (hard)

Вопрос №317

Я сейчас изучаю видео память. Из сего вопрос к вам.
Кто знает, как можно перезаписать палитру в 13h'м режиме? Т.е допустим раньше при записи байта WHITE_COLOR был белый цвет, а теперь зеленый или какой другой.

Ответ

Здравствуйте, Stepan Yar!

Для установки цветовых регистров палитры используется функция 1010h 10h прерывания. В BX - номер регистра (0-255, регистры 0-15 совпадают со стандартными 16 цветами). В DH, CH, CL - соответственно содержание красного, зеленого и синего цветов в новом цвете.

Если надо установить сразу блок регистров, то используется функция 1012h. В BX - номер первого регистра, CX - их кол-во, а ES:DX указывает на блок, состоящий из троек байтов: красный, зеленый, синий для каждого регистра, как в 1010h.



С уважением, Basfer.

Приложение:


Отправил эксперт: Basfer
Эксперт отправил ответов (всего): 1

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

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

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

Форма подачи вопроса

ВНИМАНИЕ!!! Пожалуйста, НЕ высылайте один вопрос сразу нескольким подгруппам! Если Вы сомневаетесь, какой подгруппе следует отправить вопрос, то направляйте его в обычном текстовом виде по адресу Experts@Kalashnikoff.ru. Вопрос будет выслан соответствующей подгруппе.

Нажимайте кнопку "Отправить" только ОДИН раз и дождитесь полной загрузки страницы, иначе вопрос будет продублирован!


Ваше имя *:

Ваш e-mail *:

Подгруппы:

Вопрос *:

Прилагаемая программа (если необходимо):


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

Архив выпусков


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

Калашников Олег: 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

В избранное