Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с мышью и видепамятью 
:(
    Опции темы
Hidalgo
Дата 15.2.2011, 01:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 12.12.2010

Репутация: нет
Всего: нет



Доброе время суток, помогите с разработкой следующей программы , заранее спасибо:

1. Заполнить i-ю страницу видеопамяти символом xi (x0 = 'a', x1 = 'b'и т.д.) с различными атрибутами на каждой странице. Обеспечить переключение видеостраниц при нажатии левой кнопки мыши. 
PM MAIL   Вверх
Hidalgo
Дата 15.2.2011, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 12.12.2010

Репутация: нет
Всего: нет



подскажите что за ошибки показывает, потому что не могу понять:

Код

.model tiny
.code
.286
org 100h

start:  
        mov ax,3            ; устанавливаем видеорежим и стираем с экрана
        int 10h 
        
        push 0B800h
        pop es
        
        xor di,di            ; начинаем с левого верхнего угла
        mov ax,0F41h        ; белая буква А на черном фоне
        mov cx,8            ; заполняем 8 страниц

a1:     
        push cx
        
        mov cx,2048
        rep stosw
        
        pop cx
        
        inc ax                ; переходим к следующей букве
        loop a1
        mov ax,0            ;Функция 00h предназначена для выяснения, загружен ли в память 
        int 33h                ;драйвер мыши. Если эта функция возвращает AX = 0, то драйвер 
        test ax,ax            ;отсутствует. Если драйвер загружен, то AX = 0FFFFh , а в 
        jz exit                ;регистре BX - число кнопок мыши
        
;------------------------------------------------------
        mov ax,0Ch;            Функция 0Ch позволяет программно задать реакцию на события 
        push cs                ;связанные с мышью: ее перемещения, нажатие и отпускание кнопок. 
        pop es                ;События, на которые необходимо реагировать, должны быть отмечены 
        mov cx,100b            ;единицами в соответствующих разрядах регистра CX.
        mov dx,offset mouse    ;функции драйвер мыши на каждое из заданных событий 
        int 33h                ;будет реагировать вызовом обработчика событий - подпрограммы, 

;FAR-указатель на адрес которой был указан в регистрах ES:DX
;Номер бита     Назначение маски вызова
;0      Вызвать, если мышь перемещается
;1      Вызвать, если левая клавиша нажата
;2      Вызвать, если левая клавиша отпущена
;3      Вызвать, если правая клавиша нажата
;4      Вызвать, если правая клавиша отпущена
;6      Вызвать, если средняя клавиша отпущена
;5      Вызвать, если средняя клавиша нажата

;--------------------------------------------------

        mov ax,1            ;Функция 01h включает изображение курсора мыши на экране.
        int 33h

;---------------------------------------------------------------------

        mov ah,0
        int 16h                ;жду пока не нажмут на клавиатуру
        mov ax,0Ch
        mov cx,0            ;удалить обработчик событий мыши
        int 33h
exit:   ret

mouse proc 
        mov ah,5            ; поменять видео страницу
        mov al,pg
        int 10h
        inc pg                ; увеличить номер видеостраницы
        and pg,0111b
        retf                ; выйти из программы
mouse endp
pg db 0 
end start

PM MAIL   Вверх
Hidalgo
Дата 16.2.2011, 01:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 12.12.2010

Репутация: нет
Всего: нет



Вот готовая программа, доделал:
Код

.386
Data SEGMENT PARA PUBLIC 'Data' USE16
    pg db 0
Data ENDS
Code SEGMENT PARA PUBLIC 'Code' USE16 
    ASSUME cs:Code, ds:Data, es:Data
    
;-----------------------------------------------------------------------------------------
; 1) для переключения видеостраниц используется Функция 05h прерывания 10h: 
; установить текущую видеостраницу: Вход:    AH =05h AL=видеостраница
; 2) в текстовом режиме как правило работают в 3-ем видеорежиме 80х25 символов 
; 3) под текстовый видеобуфер отведено C0000h - B8000h = 8000h = 32768 байт
; 4) символ в видеобуфере занимает 2 байта = 1 байт под атрибут + 1 байт под код символа
; считаем: 
; 1) 32768 / 2 = 16384 символов можно разместить в видеобуфере
; 2) 80 * 25 = 2000 + 48 = 2048 символов на одной видеостранице
; 3) 16384 / 2048 = 8 страниц
;-----------------------------------------------------------------------------------------

start:  
        mov ax, 3                ; устанавливаем видеорежим и стираем с экрана
        int 10h 
        
    push 0B800h                    ; сегментна адреса відеобуфера
    pop es
        
        xor di, di                ; начинаем с левого верхнего угла
        mov ax, 0F41h            ; белая буква А на черном фоне
        mov cx, 8                ; заполняем 8 страниц

a1:  
    push cx
    
        mov cx, 2048
        rep stosw
    
    pop cx
    
        inc ax                    ; переходим к следующей букве
        loop a1
        mov ax, 0                ; Функция 00h предназначена для выяснения, загружен ли в память 
        int 33h                    ; драйвер мыши. Если эта функция возвращает AX = 0, то драйвер 
        test ax, ax                ; отсутствует. Если драйвер загружен, то AX = 0FFFFh , а в 
        jz exit                    ; регистре BX - число кнопок мыши
        
;-----------------------------------------------------------------------------------------
   
        mov ax, 0Ch             ; Функция 0Ch позволяет программно задать реакцию на события 
        push cs                    ; связанные с мышью: ее перемещения, нажатие и отпускание кнопок. 
        pop es                    ; События, на которые необходимо реагировать, должны быть отмечены 
        mov cx, 100b            ; единицами в соответствующих разрядах регистра CX.
        mov dx, offset mouse    ; функции драйвер мыши на каждое из заданных событий 
        int 33h                    ; будет реагировать вызовом обработчика событий - подпрограммы, 

;FAR-указатель на адрес которой был указан в регистрах ES:DX
;Номер бита     Назначение маски вызова
;0      Вызвать, если мышь перемещается
;1      Вызвать, если левая клавиша нажата
;2      Вызвать, если левая клавиша отпущена
;3      Вызвать, если правая клавиша нажата
;4      Вызвать, если правая клавиша отпущена
;6      Вызвать, если средняя клавиша отпущена
;5      Вызвать, если средняя клавиша нажата
;-----------------------------------------------------------------------------------------

        mov ax, 1             ;Функция 01h включает изображение курсора мыши на экране.
        int 33h

;-----------------------------------------------------------------------------------------

        mov ah, 0          ; ожидание нажатия любой клавиши
        int 16h

        mov ax, 0Ch
        mov cx, 0             ;удалить обработчик событий мыши
        int 33h

exit:   
        mov ax, 4C00h         ; поверненя в MS-DOS
        int 21h;

;-----------------------------------------------------------------------------------------

mouse proc FAR
    push ax
    push ds
        
        mov ax,Data
        mov ds,ax

        mov ah,5             ; поменять видео страницу
        mov al,pg
        int 10h
        inc pg                 ; увеличить номер видеостраницы
        and pg, 0111b
    
    pop ds
    pop ax
    
    retf                     ; выйти из программы
mouse endp
    code ENDS
end start

 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0717 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.