Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 23.03.2011
Сообщений: 38
1

Работа с видеобуфером (вывод строки снизу вверх на экран)

24.04.2011, 19:10. Показов 2629. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
эта программа выводит на экран строку снизу ввех, если можете прокомментируйте пожалуйста какждую строку а то я не понял
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
model small
  stack 100h
  .data
  message db 'Operacionnaya sistema'
  .code
  main:
 
  mov ax,3              ;! установка видеорежима 80 x 25
  int 10h               ;!
 
  mov ax,@data
  mov ds,ax
  mov ax,0B800h
  mov es,ax
  mov di,0C8Ah
  mov si,0
  mov ah,00010000b
  mov cx,21
m1:
  mov ax,es:[di]
 
  mov al,message[si]
  mov ah,70h
  inc si
  mov es:[di],ax
  sub di,160
  loop m1
 
  mov ah,8             ;! задежка перед выходом до нажатия любой клавиши
  int 21h               ;!
 
  mov ax,4c00h
  int 21h
  end main
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.04.2011, 19:10
Ответы с готовыми решениями:

Вывод информации снизу вверх.
Написать прогу котороя при вводе информации виодила ее с низу вверх( в смисле на екране мы так...

Вывести текст в виде "бегущей строки" в центре экрана снизу вверх
Ввести с клавиатуры текст произвольного размера и после нажатия <Еnter> вывести его в виде "бегущей...

Работа с видеобуфером
Вывести в левы верхний угол экрана свою фамилию. все буквы должны быть попарно различны по цвету....

работа с видеобуфером напрямую
Доброго времени суток! Столкнулся с проблемой - взял пример из книги Марек "Ассемблер на примерах"...

8
273 / 268 / 11
Регистрация: 24.12.2010
Сообщений: 328
24.04.2011, 19:50 2
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
.model small
.stack 100h
.data
message db 'Operacionnaya sistema'
.code
main:
 
mov ax,3 ;! установка видеорежима 80 x 25
int 10h ;!
 
mov ax,@data        ;настроить ds
mov ds,ax       ;на область данных
mov ax,0B800h       ;настроить es
mov es,ax       ;на начало видеопамяти
mov di,0C8Ah        ;адрес первого символа       
mov si,0        ;si будет указывать на символы строки
;mov ah,00010000b   ;лишняя строка
mov cx,21       ;число выводимых символов
m1:
;mov ax,es:[di]     ;лишняя строка
 
mov al,message[si]  ;первый символ строки
mov ah,70h              ;атрибут(черный по белому)
inc si          ;si -> след. символ
mov es:[di],ax      ;запись символа в видеопамять
sub di,160      ;поднимемся на строку выше
loop m1         ;выполнить cx раз
 
mov ah,8 ;! задежка перед выходом до нажатия любой клавиши
int 21h ;!
 
mov ax,4c00h
int 21h
end main
1
0 / 0 / 0
Регистрация: 23.03.2011
Сообщений: 38
24.04.2011, 20:02  [ТС] 3
спасибо большое тебе за все

Добавлено через 2 минуты
как я понял мы начинаем считываем строку с конца, так вот почему 0C8Ah это адрес последнего символа, смог бы объяснить подробно?
0
273 / 268 / 11
Регистрация: 24.12.2010
Сообщений: 328
24.04.2011, 20:51 4
Строка выводится не с конца, а с начала. Всего символов 21, каждый нужно вывести в своей строке снизу вверх, значит первый символ будет в 20 строке(строки считаем от нуля). Ее адрес от начала видеопамяти 20*160=3200 или 0c80h. От начала строки еще делается отступ(5 пробелов или 10 байт видеопамяти). Получается 3200+10=3210 или 0c8ah.
2
0 / 0 / 0
Регистрация: 23.03.2011
Сообщений: 38
24.04.2011, 21:19  [ТС] 5
для установки курсора используется функция 02h прерывание int 21h, почему когда работают с видеопамятью не используют эту функцию, а пишут просто адрес (mov di,0C8Ah) и при этом курсор перемещается на экране?
0
273 / 268 / 11
Регистрация: 24.12.2010
Сообщений: 328
24.04.2011, 22:12 6
Ахмадик, так просто быстрее получается вывод, непосредственно по адресу в видеопамяти. Хотя можно, конечно, использовать функции bios(установки курсора и вывода символа):
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
cseg segment
assume cs:cseg,ds:cseg,es:cseg,ss:cseg
org 100h
start:  mov ax,3
    int 10h
    mov cx,21
    mov dh,20
    mov dl,5
    mov si,0
 
nxt:    push cx
    mov ah,02h
    mov bh,0
    int 10h
 
    mov ah,09h
    mov bh,0
    mov al,msg[si]
    mov bl,70h
    mov cx,1
    int 10h
    inc si
    dec dh
    pop cx
    loop nxt 
 
    ret
 
msg db 'Operacionnaya sistema'
 
cseg ends
end start
2
0 / 0 / 0
Регистрация: 23.03.2011
Сообщений: 38
24.04.2011, 22:38  [ТС] 7
я все понял братан, спасибо тебе огромное!!! спасибо!!
0
karambaamba
28.04.2011, 20:54 8
а как вывести строку размером от 0 до 78 в центре экрана?Fasm
Ушел с форума
Автор FAQ
16279 / 7604 / 1065
Регистрация: 11.11.2010
Сообщений: 13,617
29.04.2011, 04:35 9
karambaamba, вот так
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
.286
.model tiny
.code
org 100h
start:  mov ax,3; текстовый режим 80х25
    int 10h
    push 0B800h; в ES начало текстового видеобуфера
    pop es
    mov di,10*80*2; середина экрана по вертикали
    add di,(80-len) and 0FEh; середина экрана по горизонтали
    mov si,offset string; адрес строки которую выводим
    mov ah,0Fh; атрибут символов черный фон, белые буквы
    mov cx,len
a1: lodsb
    stosw
    loop a1
    mov ah,0; ждем пока не нажмут на клавиатуру
    int 16h 
    retn; выходим из программы
string db 'Hello, karambaamba!'
len = $ - string; длина выводимой строки
end start
с MASM на FASM переводи сам
0
29.04.2011, 04:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.04.2011, 04:35
Помогаю со студенческими работами здесь

Turbo c++ работа с видеобуфером
люди помогите доделать программу Задание: Открыть содержимое файла и вывести его на экран, при...

Полосы снизу вверх
Здравствуйте. Купил новую видеокарту sapphire radeon hd 7950 vapor-x, с ней в некоторых играх...

Текст снизу вверх
Как можно поменять направление текста с снизу вверх на сверху вниз?Использую Client.UploadString()...

Парсинг снизу вверх
Не могу разобраться, как заставить парсер, парсить не сверху вниз ,а снизу вверх. Public Function...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru