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

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


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

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

Выпуск N 017

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

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


Вопрос №48

Объясните пожалуйста в чём разница между SIMM, DIMM и RIMM ?

Ответ

SIMM(Single Inline Memory Module)
Бывают 30-pin, использовались в 386-х машинах, ставилось по 4 штуки. Объемы 256Кб-4Мб в модуле. И 72-pin - 486-Pentium, ставились по 2 штуки. Объемы 1Мб-128Мб. И те и другие сейчас уже устарели и используются в основном в перефирии(принтерах всяких).
DIMM(Dual Inline Memory Module). Отличаются повышенной скоростью по сравнению с SIMM от 66 МГц и выше, вместо максимум 33. Ставятся в компьютер по одному. Начало ипользования - некоторые Pentium. Дешевка - 128Мб = 20$, 256Мб = 50$ - одной палкой за 133 МГц версию.
RIMM(Rambus Inline Memory Module) - продвигаются фирмой Intel. Используются в Пентиум-4, имеют запредельные скорости передачи до 1600Мб в секунду. Дороже DIMM примерно раз в 5(128Мб=около 100$)


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

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

Вопрос №51

Здравствуйте!

Есть вопрос: возьмём простейшую программу запустим её в отладчике и видим что наша программа содержащая 15 строк в нём имеет гораздо больший объём, откуда-то берутся лишние операторы. В чём же дело, и как определить реальный конец программы (я так думаю кнопку F1(step) можно нажимать очень долго).

Заранее спасибо.

Ответ

нет, если ваша программа имеет 15 строк, то и в отладчике она будет иметь 15 строк. дело в том, что в сегменте кода до вашей программы была какая-то другая информация. и так как ваша программа явно весь сегмент не забила, то после нее осталось все то, что было до того как она была загруженна. но отладчик все, что он находит в сегменте кода, считает это кодом, и поэтому переводит весь мусор в мнемоники, на самом деле все это к программе никакого отношения не имеет. так же если это com программа, то данные размещаются в том же сегменте, что и код, и отладчик в окне сегмента кода их так же переводит в мнемоники.
если вы написали программу, то вы, я думаю, знаете где у нее конец, поэтому просмотрев ее не трудно найти конец. если это com программа, начинайте смотреть со смещения 100h.
может кнопку F1 (Help) и можно нажимать очень долго, трассировке это мало поможет, а вот F7 при такой маленькой программе совсем не долго, т.е. пока не дойдет до выхода из программы (ret или int 20h или ah=4Ch int 21h).


С наилучшеми пожеланиями,

Андрей Беженарь aka BELTSY

Отправил: BELTSY
---Вырезано ведущим---
Эксперт отправил ответов (всего): 12

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


Вопрос №52

Я сделал резидент, как описывалось в рассылке. Затем запустил NC изпод WIN, и там загрузил резидент в память. Потом закрыл NC (вышел в WIN), а потом снова запустил NC.

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



Андрей

Ответ

Не удивительно!

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

Чтобы твой резидент жил всегда, тебе надо запускать его до запуска Windows. из autoexec.bat например.


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

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

Вопрос №52

Я сделал резидент, как описывалось в рассылке. Затем запустил NC изпод WIN, и там загрузил резидент в память. Потом закрыл NC (вышел в WIN), а потом снова запустил NC.

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



Андрей

Ответ

Потому что когда ты запускаешь NC, Виндоус запускает сеанс МС-ДОС, а уже в нем запускается NC. Когда ты из NC выходишь,то Виндоус сам пытается закрыть сеанс МС-ДОС и тебя по идеи должны спросить что-то про всплывающие программы. И закрыть ты его не сможешь, пока не ответишь, что они тебе не нужны(ctrl+C). Это Виндоус так обзывает резиденты. Так что, когда ты выходишь из NC, ты добровольно(другого выбора просто нет) подтверждаешь выгрузку этого резидента. Решение тупое, но действенное. САМ запускаешь сеанс МС-ДОС, из него NC и резидент. Выход из NC не привещдет к закрытию сеанса МС-ДОС и резидент останется жить, пока ты не выйдешь из этого режима МС-ДОС командой exit


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

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

Вопрос №53

Здравствуйте господа эксперты. В прошлый раз я писал про ошибку линкования 32 битных программ которая у меня была. Ответ эксперта Евгения меня очень удовлетворил, эта ошибка не появляется, за что ему большое спасибо. Появляется другая ошибка : Turbo Link Fatal: No program entry point. По логике этот program entry point должен находится на MOV EAX,@data Каким образом я устанавливаю этот point ? Обновил версию до Turbo Assembler 5.0. Получился Turbo Link Version 7.1.30.1. Программу исправленную экспертом Евгением прилагаю без изменений.

Ответ

Ответ: ставишь метку (begin например)перед нужной инструкцией и завершаешь файл надписью
end метка
Когда у тебя программа состоит из нескольких подпрограмм вместо имени метки ставишь имя подпрограммы с которой должна начинаться программа.


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

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

Вопрос №53

Здравствуйте господа эксперты. В прошлый раз я писал про ошибку линкования 32 битных программ которая у меня была. Ответ эксперта Евгения меня очень удовлетворил, эта ошибка не появляется, за что ему большое спасибо. Появляется другая ошибка : Turbo Link Fatal: No program entry point. По логике этот program entry point должен находится на MOV EAX,@data Каким образом я устанавливаю этот point ? Обновил версию до Turbo Assembler 5.0. Получился Turbo Link Version 7.1.30.1. Программу исправленную экспертом Евгением прилагаю без изменений.

Ответ

Приветствую!

Entry point указывается следующим образом:
.code
Start:
mov ax,@data
...
mov ah, 4ch
int 21h
end Start

В данном случае слово Start является точкой входа.

Good luck. Slava V.


Отправил: Slava V.
Эксперт отправил ответов (всего): 4

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

Вопрос №52

Я сделал резидент, как описывалось в рассылке. Затем запустил NC изпод WIN, и там загрузил резидент в память. Потом закрыл NC (вышел в WIN), а потом снова запустил NC.

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



Андрей

Ответ

Приветствую!
Все дело в том что под Windows, открывая NC вам создается виртуальная машина (VM86) в которой создается копия первого мегабайта памяти(т.е. копия таблицы векторов прерываний, дос-а, драйверов типа Himem, Display и.т.п). После закрытия NC, VM86 закрывается. И следовательно память выделенная этой виртуальной машине освобождается, а с ней уходит в небытие и резидент :-))
Good luck. Slava V.


Отправил: Slava V.
Эксперт отправил ответов (всего): 5

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

Вопрос №53

Здравствуйте господа эксперты. В прошлый раз я писал про ошибку линкования 32 битных программ которая у меня была. Ответ эксперта Евгения меня очень удовлетворил, эта ошибка не появляется, за что ему большое спасибо. Появляется другая ошибка : Turbo Link Fatal: No program entry point. По логике этот program entry point должен находится на MOV EAX,@data Каким образом я устанавливаю этот point ? Обновил версию до Turbo Assembler 5.0. Получился Turbo Link Version 7.1.30.1. Программу исправленную экспертом Евгением прилагаю без изменений.

Ответ

Попробуй вот это. У меня стоит Tasm 2.0 Компилируй без параметров.

Приложение:


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

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

Вопрос №55

Чем отличаются комманды LEA STR от offset STR ?

Ответ

Hi vk!
Опрератор OFFSET - Возвращает смещение пременной относительно сегметна.
Команда LEA - вычисляет исполнительный адрес (часть его определяющую
смещение) и записывает в данный регистр. Адрес вычесляется в соответствии
с установленным режимом адресации (16 или 32), короче
lea si,[STR+bp] - тут загрузится адрес
mov si,offset [STR+bp] а тут значение по этому адресу.


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

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

Вопрос №57

Привет!

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

На спектруме экран прорисовывается 50 раз в секунду. Начинает прорисовываться сразу после прихода маскируемого прерывания.Т.о. можно синхронизировать изображение

относительно прерываний.Следовательно можно написать программу,которая будет выводить на экран какой-нибудь объект (например бегущую строку), который будет плавно перемещаться и не моргать.

Как на PC синхронизировать изображение?Возможно ли это?

Ответ

Простейшим способом избавления от "моргания" объекта рисовать его поочередно на разных видеостраницах, с поочередной же сменой отображаемых и отрисовываемых страниц. Но это возможно только для режимов с низким разрешением. Как говорят умные книжки - есть еще синхронизатор. Порт выбора регистра синхронизатора 3C4h, а порт данных - 3C5h.
Для установки монопольной записи в видеопамять необходимо сбросить бит 1 в регистре №0, а затем установить бит №5 в регистре №1. После проделанных действий прекращается выдача из видеопамяти на экран, зато процессор получает монопольный доступ к ней. После вывода нужных данных в видеопамять необходимо восстановить выдачу данных на экран. Сбросим бит 5 в регистре №1 и установим бит 1 в регистр №0. Этот метод можно использовать только для видеоадапиеров VGA и SVGA.
P.S. Если напишешь программу, которая это ипользует пожалуйста пришли. Интересно, книжка конечно хорошая, но ничто не заменит живого примера.


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

Экспертная группа: Общие вопросы по программированию на Ассемблере под 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

В избранное