Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.11.2011, 16:21   #1
Kelevra23
Новичок
Джуниор
 
Регистрация: 24.11.2011
Сообщений: 2
Вопрос Не могу найти ошибку в коде (assembler) Задача - Ресайзинг прямоугольной области.

Задача: Нарисовать прямоугольник в режиме 320x200 256 цветов, затем вывести курсор мыши и обеспечить возможность изменять размер прямоугольника путём перетаскивания его углов. Иными словами обычный ресайзинк прямоугольной области!

Писать на ассемблере проц - i8086 TASM


Потратив пару дней написал код, по идее должен работать, не имею возможности протестить пошагово, т.к. эмулятор проца не поддерживает некоторые функции (а именно функции далше 3й в прерывании 33h). При компиляции кода в ком файл ошибок не обнаружено. При запуске com-файла прямоугольник рисуется замечательно, выводится курсор, но при нажатии кнопки мыши прога вылетает!

Буду признателен, если кто - нибудь укажет мне на ошибки в коде или подскажет какой эмулятор можно использовать, чтобы протестировать прогу пошагово! Ниже прилагаю код.



Код:
.model tiny
.code 
org 100h

start:    
    mov si,200h                    ;adres s ishodnimi dannimi
    mov ax,word ptr X1          ;zanosim koordinatu X1 verhnego levogo ugla
    mov [si],ax
    add si,2
    mov ax,word ptr X2          ;zanosim koordinatu X2 nizhnego pravogo ugla 
    mov [si],ax
    add si,2 
    mov ax,word ptr Y1          ;zanosim koordinatu Y1 verhnego levogo ugla
    mov [si],ax
    inc si
    mov ax,word ptr Y2          ;zanosim koordinatu Y2 nizhnego pravogo ugla
    mov [si],ax
    inc si
    mov ax,04h                     ;zanosim cvet zapolneniya
    mov [si],ax         
    
    mov cx,[200h]                 ;vichislayem shirinu pryamougolnika
    mov bx,[202h]
    sub bx,cx                   
    mov ax,320
    sub ax,bx
    mov word ptr @smechenie,ax
    
    
    mov al,byte ptr [204h]      ;vichislayem visotu pryamougolnika
    mov ah,0
    mov dl,byte ptr [205h]
    mov dh,0
    sub dx,ax                   
    
    mov ax,13h                         ;utanovka rezima 320x200 256 cvetov
    int 10h
	push 0A690h                   ;segmentniy adres nachala videopamyati v es 
	pop es
	mov al,byte ptr [206h]      ;cvet tochki
	mov di,word ptr X1           ;koordinata verhnego levogo ugla
	mov cx,dx
@b:	push cx
	mov cx,bx
	rep stosb                        ;vividim liniu iz bx tochek
	add di,word ptr @smechenie  ;sdvigaemsya na (320-bx) tochek 
	pop cx
	loop @b                         ;vivodim dx liniy 
	
	mov	ax,0		            ;inicializirivat mish
        int	33h
	mov	ax,1		            ;pokazat' kursor mishi
	int	33h

    mov ax,0007h                      ;ogranichili dvizhenie mishi po gorizontali
    mov cx,0000h
    mov dx,027Eh
    int 33h

    mov ax,0008h                      ;ogranichili dvizhenie mishi po verticali
    mov cx,0000h
    mov dx,00C8h
    int 33h

K1:	mov	ax,000Ch	            ;usyanovit obrabotchik sobitii mishi 
	mov	cx,0002h	            ;sobitie - najatije levoi knopki mishi
	mov	dx,offset handler      ;ES:DX - adres obrabotchika 
	int	33h
       
                
handler PROC FAR

    mov	ax,0005h                ;uznaem koordinati najatiya levoy knopki mishi
    mov	bx,0000h
    int	33h
    
    cmp cx,32h                         ;sravnim koordinatu najatiya s X1
    je M1
    jmp M3
    
M1: cmp dx,64h                       ;sravnim koordinatu najatiya s Y1
    je NEW1
    jmp M2  
    
M2: cmp dx,96h                       ;sravnim koordinatu najatiya s Y2
    je NEW2
    jmp M3
    
M3: cmp cx,96h                       ;sravnim koordinatu najatiya s X2
    je M4
    jmp K1
    
M4: cmp dx,64h                       ;sravnim koordinatu najatiya s Y1
    je NEW3
    jmp M5
    
M5: cmp dx,96h                       ;sravnim koordinatu najatiya s Y2
    je NEW4
    jmp K1
      
NEW1:
    mov	ax,0006h                ;uznaem koordinati otjatiya levoy knopki mishi
    mov	bx,0000h
    int	33h  
    mov word ptr X1,cx
    mov word ptr Y1,dx
    jmp start
NEW2:
    mov	ax,0006h               ;uznaem koordinati otjatiya levoy knopki mishi
    mov	bx,0000h
    int	33h  
    mov word ptr X1,cx
    mov word ptr Y2,dx
    jmp start
NEW3:
    mov	ax,0006h                ;uznaem koordinati otjatiya levoy knopki mishi
    mov	bx,0000h
    int	33h  
    push cx
    push dx  
    mov word ptr X2,cx
    mov word ptr Y1,dx
    jmp start
NEW4:   
    mov	ax,0006h               ;uznaem koordinati otjatiya levoy knopki mishi
    mov	bx,0000h
    int	33h  
    mov word ptr X2,cx
    mov word ptr Y2,dx
    jmp start
    retf
    handler endp
.data
X1 dw 32h
X2 dw 96h
Y1 dw 64h
Y2 dw 96h
@smechenie db 0
end start
Изображения
Тип файла: jpg reactangle.JPG (10.1 Кб, 122 просмотров)

Последний раз редактировалось Kelevra23; 24.11.2011 в 17:34.
Kelevra23 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу найти ошибку в коде при авторизации вконтакте Arsenx777 Работа с сетью в Delphi 10 27.07.2011 02:44
Паскаль, строки. Не могу найти ошибку в коде. Liam_ Помощь студентам 6 11.05.2011 19:29
Не могу найти ошибку в коде написанном на FASM Devil21RUS Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 8 12.12.2010 04:52
не могу найти ошибку в коде pavelstraut Общие вопросы C/C++ 5 24.07.2009 23:20
Не могу найти ошибку в коде! Natasha666 Помощь студентам 1 20.05.2009 09:27