21 / 21 / 3
Регистрация: 29.04.2010
Сообщений: 444
|
||||||
1 | ||||||
MASM Прямой вывод символа в видеопамять (по книге Калашникова)13.02.2011, 19:49. Показов 3998. Ответов 10
Метки нет (Все метки)
разбираю пример из Калашникова
И еще. Наверно каждый регистр за что-то отвечает? Ну, например, один за цвет текста, другой еще за что-то. Где про это можно прочитать? Потому что Калашников конкретно не говорил (ну, только в кратце и без особой конкретики)
0
|
13.02.2011, 19:49 | |
Ответы с готовыми решениями:
10
Вывод на экран прямой записью в видеопамять Вывод последовательности символов прямой записью в видеопамять Вывод строки средствами BIOS и с помощью прямой записи в видеопамять Резидентный обработчик прерывания 21h (по книге Калашникова) Обработчик прерывания int 21h (по книге Калашникова) |
4165 / 1817 / 216
Регистрация: 06.10.2010
Сообщений: 4,074
|
|||||||||||
13.02.2011, 20:31 | 2 | ||||||||||
http://frolov-lib.ru/books/bsp/v21/index.html
1
|
21 / 21 / 3
Регистрация: 29.04.2010
Сообщений: 444
|
||||||
13.02.2011, 20:57 [ТС] | 3 | |||||
что-то никак не могу понять как работает вывод. Вот в с++ для любого вывода был cout<<
в C# это Console.Writeline(), в TurboPascal это был Writeln, а здесь что???? в программе hello world по-другому вывод осуществлялся...
0
|
273 / 268 / 11
Регистрация: 24.12.2010
Сообщений: 328
|
|
13.02.2011, 21:19 | 4 |
В случае Hello,world строка выводится с помощью DOS-функции 9h (вывод строки). А у Калашникова пример вывода напрямую в видеопамять (минуя DOS). В es кладется адрес начала видеопамяти, в квадратных скобках смещение относительно него, при нулевом смещении символ появится в верхнем левом углу экрана. Вывод происходит мгновенно, это самый быстрый способ вывода.
1
|
21 / 21 / 3
Регистрация: 29.04.2010
Сообщений: 444
|
|
13.02.2011, 21:24 [ТС] | 5 |
murderer, а что эта строка в твоем коде значит
mov word ptr es:[0],1F40h и почему без нее ничего не выводится?
0
|
273 / 268 / 11
Регистрация: 24.12.2010
Сообщений: 328
|
|
13.02.2011, 21:44 | 6 |
Dimarik__, цвет (31) занеси в ah, а не в ax, тогда и у тебя получится. А murderer сделал проще, поместил код символа и его атрибут сразу в видеопамять, не задействуя ax.
0
|
21 / 21 / 3
Регистрация: 29.04.2010
Сообщений: 444
|
|
13.02.2011, 22:15 [ТС] | 7 |
Каждый регистр за что-то отвечает? Ну, например, один за цвет текста, другой еще за что-то. Где про это можно прочитать? Потому что Калашников конкретно не говорил (ну, только в кратце и без особой конкретики)
Добавлено через 2 минуты И еще. Если не трудно, дайте пару советов как лучше всего учить ассемблер. В смысле как правильнее всего. Например, в с++/C# если я читал книжку и у меня что-то не получалось, я вводил название функции в MSDN и там все рассказывалось. Как бы немного чего-то очень важного не понимаю=(((
0
|
273 / 268 / 11
Регистрация: 24.12.2010
Сообщений: 328
|
|
14.02.2011, 00:18 | 8 |
В данном случае регистр неважен, главное понять, под символ отводится 2 байта, старший отвечает за цвет самого символа и фона (старшие 4 бита за фон, младшие за символ), младший содержит его ASCII-код. Поэтому нужно в расчитанное заранее место экрана переслать эти самые 2 байта, можно использовать регистр или просто записать двухбайтовое число, например если написать mov es:[158],2E42h, в конец первой строки выведется желтая B на зеленом фоне(2Eh это 00101110b, коды зеленого и желтого цветов, 42h - ASCII-код B).
Добавлено через 31 минуту
1
|
Ушел с форума
16279 / 7604 / 1065
Регистрация: 11.11.2010
Сообщений: 13,617
|
|
14.02.2011, 08:40 | 9 |
Dimarik__, здесь тоже необходимо читать книжки, а если начнешь программировать на ассемблере под Windows, то также придется читать о назначениях API-функций в MSDN. И еще необходимым условием при программировании на ассемблере является использование отладчика и дизассемблера
1
|
21 / 21 / 3
Регистрация: 29.04.2010
Сообщений: 444
|
|
14.02.2011, 08:43 [ТС] | 10 |
Да я как бы просто попорядку Калашникова читаю. Делаю то что автор написал и всё.
0
|
4165 / 1817 / 216
Регистрация: 06.10.2010
Сообщений: 4,074
|
|
14.02.2011, 15:47 | 11 |
Dimarik__
Начинай с асм-вставок в C или Pascal. Учиться писать сразу на асме тяжело.
0
|
14.02.2011, 15:47 | |
14.02.2011, 15:47 | |
Помогаю со студенческими работами здесь
11
Создание динамических эффектов путем прямой записи в видеопамять Создание динамических эффектов путем прямой записи в видеопамять Написать программу вывода строки на экран: прямой записью в видеопамять / функциями BIOS Создание динамических эффектов: реализовать любой динамический видеоэффект с прямой записью в видеопамять Вывести изображение из массива 320×200 прямой записью в видеопамять видеорежима 4 (CGA) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |