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

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


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

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

Чемпионы рейтинга экспертов в этой рассылке

Зенченко Константин Николаевич
Статус: Профессор
Рейтинг: 206
∙ повысить рейтинг >>
Командин Константин Евгениевич
Статус: 5-й класс
Рейтинг: 37
∙ повысить рейтинг >>
Лысков Игорь Витальевич
Статус: Специалист
Рейтинг: 35
∙ повысить рейтинг >>

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

Выпуск № 1110
от 16.11.2008, 02:35

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

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

Вопрос № 150115: Здравствуйте уважаемые эксперты! Вот кусок программки: (text segment assume cs:text begin: mov ax,0b800h mov es,ax mov bx,0 mov si,80*2*12+40*2 mov di,80*2*25-2 mov word ptr es:[bx],0f01h mov word ptr es:[si],3130h...


Вопрос № 150.115
Здравствуйте уважаемые эксперты!
Вот кусок программки:
(text segment
assume cs:text
begin: mov ax,0b800h
mov es,ax
mov bx,0
mov si,80*2*12+40*2
mov di,80*2*25-2
mov word ptr es:[bx],0f01h
mov word ptr es:[si],3130h
mov word ptr es:[di],0e40fh
mov ah,01h
int 21h
mov ax,4c00h
int 21h
text ends
stk segment stack
db 60 dup (0)
stk ends
end begin)
Обясните пожалуйста как выводятся символы и атрибуты на терминал (екран), если здесь нет никакого прерывания DOS или BIOS (имеется ввиду прерывания int 21h (ah=09h или ah=40h),int 10h (ah=09 или ah=0ah)).
Отправлен: 10.11.2008, 18:06
Вопрос задал: Олег Миколайович (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: an42
Здравствуйте, Олег Миколайович!
При включении IBM-совместимого компьютера видеоконтроллер обычно начинает работать в текстовом 16-ти цветном режиме разрешением 80 столбцов на 25 строк (код режима 03h). В этом режиме выделена память размером 32 Кбайт начальным линейным адресом B8000h.
Видеопамять в текстовом режиме организована следующим образом: на каждый символ приходится по два байта информации, причем первый байт это ASCII-код символа, а второй байт – цвет символа и цвет фона этого символа. Все то, что попадает в видеопамять аппаратно выводится на экран монитора.

Столбец 0 Столбец 1 Столбец 2 ….. Столбец 79
Строка 0 | Символ 0 | Символ 1 | Символ 2 | | Символ 79 |
| Код | Цвет | Код | Цвет | Код | Цвет | …. | Код | Цвет |
Строка 1 | Символ 80 | Символ 81 | Символ 82 | | Символ 159|
| Код | Цвет | Код | Цвет | Код | Цвет | …. | Код | Ц вет |
Строка 2 | Символ 160| Символ 161 | Символ 162| | Символ 239 |
| Код | Цвет | Код | Цвет | Код | Цвет | …. | Код | Цвет |
…………………………………………………………………………………………………..
Строка 24|Символ 1920|Символ 1921|Символ 1922| …. |Символ 1999|
| Код | Цвет | Код | Цвет | Код | Цвет | …. | Код | Цвет |

Для вывода в видеопамять обычно используют сегмент ES, в который заносят число равное абсолютному начальному адресу видеобуфера поделенному на 10h. Для текстовой видеопамяти B8000h делим на 10h, получаем B800h.
Чтобы вывести символ в заданное место (строка столбец), нужно номер строки умножить на 80*2 (80 символов по 2 байта на каждый символ) и прибавить номер столбца умноженного на 2. Затем соответствующий бай (ASCII-код символа) заноситься с помощью косвенной адресации относительно сегмента ES и избранного индексного регистра. Значение индексного регистра увеличивается на 1, и в следующий байт запи сывается код цвета символа и фона.
(text segment
assume cs:text
begin: mov ax,0b800h ;(1)
mov es,ax ;(2)
mov bx,0 ;(3)
mov si,80*2*12+40*2 ;(4)
mov di,80*2*25-2 ;(5)
mov word ptr es:[bx],0f01h ;(6)
mov word ptr es:[si],3130h ;(7)
mov word ptr es:[di],0e40fh ;(8)
mov ah,01h
int 21h
mov ax,4c00h
int 21h
text ends
stk segment stack
db 60 dup (0)
stk ends
end begin)

Строка (1) и (2) устанавливаем регистр ES значение 0b800h, это начальный адрес текстовой видеопамяти.
Строка (3) индекс равен 0, это нулевая строка нулевой столбец.
Строка (4) индекс соответствует 80*2*12 – двенадцатой строки, 40*2 – сороковому столбцу.
Строка (5) индекс соответствует 80*2*25 – это двадцать пятая строка нулевой столбец, а 80*2*25-1*2 – это от двадцать пятой строки нулевого столбца отнимает позицию одного символа и получаем 24 строку и 79 столбец.
Строка (6) помещаем ASCII-код (01h) и цвет (0fh) в 0 строку и в 0 столб ец, это верхний левый угол экрана.
Строка (7) помещаем ASCII-код (30h) и цвет (31h) в 12 строку и в 40 столбец, это центр экрана.
Строка (8) помещаем ASCII-код (0fh) и цвет (e4h) в 24 строку и в 79 столбец, это правый нижний угол экрана.

Удачи
Ответ отправил: an42 (статус: 7-й класс)
Ответ отправлен: 11.11.2008, 11:35

Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 235105 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


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

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

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

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

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

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


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

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров >>

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


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

    ∙ Версия системы: 5.11 от 9.11.2008

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

    В избранное