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

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


Хостинг Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг на Windows 2008

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler (Ассемблер)

Выпуск № 1075
от 30.09.2008, 18:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 297, Экспертов: 19
В номере:Вопросов: 4, Ответов: 4

Нам важно Ваше мнение об этой рассылке.
Оценить этот выпуск рассылки >>


Вопрос № 144909: В книге Калашникова в главе 3 есть программа для практики, которая должна отображать символ (01 - рожица в ASCII кодах) ярко-белым цветом на синем фоне. К сожалению у меня она не отразилась, хотя com-файл был создан. Я добавил (по наитию) очистку эк...
Вопрос № 144965: Здравствуйте уважаемые эксперты! Подскажите как можно вывести содержимое какого либо регистра: например сложить какие либо числа, а результат вывести <img src="http://rusfaq.ru/images/Forum/75.gif" border="0"> ...
Вопрос № 144969: Уважаемые эксперты помогите решить следующую задачу. Нужно сделать резидент который бы перехватывал бы ДОС прерывание «вывод строки на экран» и копировал эту строку в файл. Я тут начал это делать но столкнулся с проблемой я не могу использовать прер...
Вопрос № 145023: нужно сделать 3 легких задачки, в ассемблере ни алё <img src="http://rusfaq.ru/images/Forum/7.gif" border="0"> помогите пожалуйста! 1 - Если введены символы с 0-9 вывести соощение "ето цифра!" 2 - Ввести символ, занулить в его код...

Вопрос № 144.909
В книге Калашникова в главе 3 есть программа для практики, которая должна отображать символ (01 - рожица в ASCII кодах) ярко-белым цветом на синем фоне. К сожалению у меня она не отразилась, хотя com-файл был создан. Я добавил (по наитию) очистку экрана. Рожица отразилась, но грязно белая на черном экране. Хотелось бы получить обещанное. На всякий случай в приложение помещаю код программы.
Помогите разобраться. Изучаю Ассемблер не больше месяца, использую MASM 6.11. Поэтому, прошу побольше комментарий.
С уважением, Швецов

Приложение:

Отправлен: 24.09.2008, 17:59
Вопрос задал: Швецов Анатолий Прокофьевич (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Зенченко Константин Николаевич
Здравствуйте, Швецов Анатолий Прокофьевич!

До этого момента Вы работали только в одном сегменте памяти размером 64кб. Все сегментные регистры имели одинаковое значение. Данный пример демонстрирует работу с сегментами, а именно прямую запись в видеобуфер с помощью индексного регистра DI.
В реальном режиме работы процессора доступны 16-ть сегментов по 64кб, т.е. 1 мб. Любой физический адрес вычисляется как сумма сегментного регистра(CS,DS,ES,SS) и регистра общего назначения (AX,BX,CX,DX,DI,SI,BP,SP). У каждого регистра общего назначения есть дополнительная функция возложенная на него разработчиками.
К примеру:
AX - аккумулятор, в нем производятся основные арифметические вычисления, команды использующие этот регистр имеют более которкий код и выполняются быстрее;
BX - базовый регистр, очень полезен при работе с массивами, может применятся с регистрами DI и SI([ BX + DI ]);
CX - счетчик, используется в оператора цикла и некотороых строковых командах;
DX - регистр данных, в некоторых командах используется как разширитель аккумулятора, если результат работы превышает размер 16-ть бит;
DI - индекс приемника;
SI - индекс источника;
Два последних регистра используются в строковых командах.
Все выше перечисленные регистры по умолчанию используются вместе с регистром DS;
BP - база стека, может применятся с регистрами DI и SI([ BP + SI ]);
SP - указатель стека;
Эти два регистра по умолчанию работают только с регистром SS.
Установленные по умолчанию регистры можно измеять, так как это сделано в приведенном Вами примере mov es:[di],ax, т.е. записать слово по адресу определенному в регистрах ES:DI. Вся физическая память реального режима разбита на области:
00000-А0000 - рабочая и служебная область DOS;
А0000-С0000 - буфер видеопамяти;
С0000-FFFFF - служебная область BIOS.
В контексте Вашего вопроса: область видеопамяти используется видеоконтролером для хранения отображаемой информации. Для каж дого видеорежима установленны свои адреса. Сегментный адрес 0b800h используется в режимах 00-06. Смещение относительно начала сегмента в памяти соответствует отображаемому символу на экране. В данном примере DI=0 т.е. верхний-левый угол.
К примеру если Вы запишите mov di,100, то у отображаемый символ сместится. Проверьте.
Также Вы можете по эксперементировать и с сегментным регистром, к примеру:
mov ax,0b000h
mov es,ax
mov di,8000h
.
При получении физического адреса сегментный регистр умножается на 16-ть и складывается с индексным регистром, т.е. получается 0b8000+00000 это равно 0b0000+08000. Для программиста такая процедура получения адреса прозрачна, т.к. это всё реализованно на аппаратном уровне.

Для установленого Вами режима на каждый символ отводится два байта: сам ASCII-код и его аттрибут.
На нем и остановимся: биты 0-3 определяют цвет символа, биты 4-6 определяют цвет фона, бит 7 - яркость.
Цвета располагаются в таком п орядке (00=черный, темно-синий, темно-зеленый, бирюзовый, темно-красный, темно-коричневый, коричневый и 07=серый)- для фона и текста, дальше только для текста(08=темно-cерый, синий, зеленый, голубой, красный, фиолетовый, желтый и 15=белый). Попробуйте менять аттрибуты в строке mov ah,31.

Строками:
mov ax,3
int 10h

Вы переводите видеоконтролер в 3-й текстовый видеорежим. Это нужно делать во всех DOS-примерах(из учебника) запускаемых под ХР. Если страший бит регистра AL установить в 1, то очистки экрана не будет: mov ax,83h.

О видах адресации советую почитать С. Зубкова, о работе с видеоконтролерами - В. Кулакова. Эти книги Вам пригодятся в дальнейшем.
Удачи!
---------
Итерация от человека, рекурсия — от Бога (Питер Дойч)
Ответ отправил: Зенченко Константин Николаевич (статус: Профессор)
Украина, Киев
Тел.: +380979536619
Адрес: Украина г.Киев
----
Ответ отправлен: 24.09.2008, 22:00


Вопрос № 144.965
Здравствуйте уважаемые эксперты! Подскажите как можно вывести содержимое какого либо регистра: например сложить какие либо числа, а результат вывести
Отправлен: 25.09.2008, 09:03
Вопрос задал: Sharkerr (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Зенченко Константин Николаевич
Здравствуйте, Sharkerr!

Код в приложении выводит содержимое регистра АХ в 10-ой системе.
Удачи!

Приложение:

---------
Итерация от человека, рекурсия — от Бога (Питер Дойч)

Ответ отправил: Зенченко Константин Николаевич (статус: Профессор)
Украина, Киев
Тел.: +380979536619
Адрес: Украина г.Киев
----
Ответ отправлен: 25.09.2008, 10:42
Оценка за ответ: 5
Комментарий оценки:
Большое спасибо


Вопрос № 144.969
Уважаемые эксперты помогите решить следующую задачу. Нужно сделать резидент который бы перехватывал бы ДОС прерывание «вывод строки на экран» и копировал эту строку в файл. Я тут начал это делать но столкнулся с проблемой я не могу использовать прерывания в резиденте так как сам их перехватываю. И не уверен что
правильно определил по какому адресу находится строка. Пожалуйста доведите мою программу до ума.

Приложение:

Отправлен: 25.09.2008, 09:43
Вопрос задал: Sergik1977 (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 5)

Отвечает: Зенченко Константин Николаевич
Здравствуйте, Sergik1977!

Программа в приложении.
Адрес строки у Вас уже есть в паре регистров DS:DX.
Неизвестно только длина строки, которая ограничена символом '$'.
Именно поэтому копирование в строки в буфер лишнее, т.к. она может быть очень большой, а это может привести к сбою в работе Вашего резидента.
Удачи!

Приложение:

---------
Итерация от человека, рекурсия — от Бога (Питер Дойч)

Ответ отправил: Зенченко Константин Николаевич (статус: Профессор)
Украина, Киев
Тел.: +380979536619
Адрес: Украина г.Киев
----
Ответ отправлен: 25.09.2008, 12:49
Оценка за ответ: 5


Вопрос № 145.023
нужно сделать 3 легких задачки, в ассемблере ни алё помогите пожалуйста!

1 - Если введены символы с 0-9 вывести соощение "ето цифра!"
2 - Ввести символ, занулить в его коде 0,3,5,7 биты и вывести символ который получился
3 - Найти сумму положительных элементов массива. Элементы байты, кол-во 7

Заранее большое человеческое спасибо!
Отправлен: 25.09.2008, 17:09
Вопрос задал: Timeisover (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Boriss
Здравствуйте, Timeisover!
В приложении решение Вашей задачи. Если что не будет понятно - спросите в минифоруме этого вопроса

Приложение:

---------
Вывод - то место в тексте, где вы устали думать

Ответ отправил: Boriss (статус: Профессор)
Россия, Саранск
Организация: Мордовский госуниверситет, Саранск, Факультет Электронной Техники
WWW: Программирование на Паскале
----
Ответ отправлен: 27.09.2008, 20:58


Вы имеете возможность оценить этот выпуск рассылки.
Нам очень важно Ваше мнение!
Оценить этот выпуск рассылки >>

Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2008, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале

∙ Версия системы: 5.3 RC 2 от 09.09.2008

Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное