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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.01.2013, 18:31   #1
Jugger
Пользователь
 
Регистрация: 30.01.2008
Сообщений: 99
По умолчанию Реализация меню .. в чем ошибка ?

Выводится надпись, нажимается любая клавиша и рисуется меню
5 пунктов и стрелочка бегает слева
пытаюсь сделать чтобы она двигалась стрелками вверх вниз
после метки select отслеживаю код стрелок в ah - 48 и 50 и пытаюсь прыгнуть на метки up и down
вот это и не хочет работать
в чем ошибка ?

если ставлю вместо jz jnz стрелка бегает вниз при нажатии любой клавиши и возвращает управление в дос когда доходит до конца .. что тоже не есть так как задумано

Код:
org 100h

jmp welcome

msg:    db      "Welcome to Jugger OS! "      
 len equ $-msg 
msg1:    db      "Press any key to resume!"         
len1 equ $-msg1           
 
 


   
welcome:  mov ax,1301h      ;out
        mov bx,0ah    
        mov bp,msg
        mov cx,len            ;length
        mov dx,0a1fh         ;coord
        int 10h          
        
         mov ax,1301h      ;out
        mov bx,0ah    
        mov bp,msg1
        mov cx,len1            ;length
        mov dx,0b1eh         ;coord
        int 10h
        
        mov     ah, 0           ;wait for input
        int     16h 
                                    
                                    jmp resume
ret 

 menu: db "MENU:"
lm equ $-menu
menu1:  db "Play"
lm1 equ $-menu1
menu2: db "Calculator  "
lm2 equ $-menu2 
menu3:  db  "Clock"
lm3 equ $-menu3 
menu4:  db "Reboot "
lm4 equ $-menu4    
menu5:  db "Exit "
lm5 equ $-menu5  
str: db "->"                     
     
 
   resume: 
   
    MOV Ax, 0600H    ;cls
    xor cx,cx
    MOV DH, 25
    MOV DL, 80
    MOV BH, 0FH 
    INT 10H  
  
   
        mov ax,1301h      ;out
        mov bx,05h    
        mov bp,menu
        mov cx,lm            ;length
        mov dx,061fh         ;coord
        int 10h       
       
        mov bp,menu1
        mov cx,lm1            ;length
        add dx,0100h         ;coord
        int 10h          
        
        mov bp,menu2
        mov cx,lm2            ;length
         add dx,0100h           ;coord
        int 10h
        
        mov bp,menu3
        mov cx,lm3            ;length
         add dx,0100h          ;coord
        int 10h          
         
        mov bp,menu4
        mov cx,lm4            ;length
        add dx,0100h       ;coord
        int 10h                   
        
        mov bp,menu5
        mov cx,lm5                 ;length
        add dx,0100h         ;coord
        int 10h         
                  MOV ax, 0600H
               xor cx,cx
               MOV DH, 25
                MOV DL, 1eh
               MOV BH, 0FH 
                  INT 10H 
                         mov ax,1301h      ;out
            mov bx,05h    
            mov bp,str
           mov cx,2           ;length
            mov dx,071dh         ;coord
        int 10h      
               jmp select
   ret                        
        
select: 
       mov ah,0                ;wait for up/down 48/50
       int 16h
          
        cmp ah,50
        jz down
          
        cmp ah,48
        jz up
        
    
ret

down:        MOV ax, 0600H
             xor cx,cx     
             MOV DL, 1eh
             MOV BH, 0FH 
                  INT 10H  
                  
             mov ax,1301h      ;out
            mov bx,05h    
            mov bp,str
            mov cx,2           ;length
            mov dl,1dh         ;coord              
            add dh, 01h
            cmp dh,0ch
            jz resetdown 
               int 10h     
        
        jmp select
        ret  
        
        
        
        
        
        
up:           MOV ax, 0600H
               xor cx,cx     
                MOV DL, 1eh
                MOV BH, 0FH 
                  INT 10H  
                  
           mov ax,1301h      ;out
            mov bx,05h    
            mov bp,str
           mov cx,2           ;length
            mov dl,1dh         ;coord              
           sub dh, 01h
            cmp dh,06h
            jz resetup 
        int 10h     
        
        jmp select
        ret              
        
        resetdown:
        mov dh,07h
        ret
        
        resetup:
        mov dh,0bh
        ret
Jugger вне форума Ответить с цитированием
Старый 12.01.2013, 21:22   #2
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Вообще не понимаю как у вас тут что-то работает.
-Прерывание int10 не обязано сохранять регистры, поэтому м\у вызовами этих прерываний значения регистров надо сохранять, чего у вас не сделано.
-строки типа mov bp,menu мой компилятор вообще не понял.
-Видеорежим изначально не установлен.
-коды 48 и 50, должны быть не 48 и 50, а 48h и 50h.

Код:
.286
.model tiny
.code

org 100h

start:
jmp welcome

msg    db      "Welcome to Jugger OS! "      
 len equ $-msg 
msg1    db      "Press any key to resume!"         
 len1 equ $-msg1           
   
welcome proc near

	mov	ah, 0fh
	int	10h
	push	ax

	mov	ax, 0003h
	int	10h
	mov	ax, 0500h
	int	10h

	mov ax, 1301h      ;out
        mov bx,0ah
        lea bp, msg
        mov cx,len            ;length
        mov dx,0a1fh         ;coord
        int 10h          
        
	mov	ax,1301h      ;out
	mov	bx,0ah    
	lea	bp,msg1
        mov	cx,len1            ;length
	mov	dx,0b1eh         ;coord
        int	10h
        
	mov	ah, 0           ;wait for input
	int	16h                            
	jmp resume

welcome endp

menu: db "MENU:"
lm equ $-menu
menu1:  db "Play"
lm1 equ $-menu1
menu2: db "Calculator  "
lm2 equ $-menu2 
menu3:  db  "Clock"
lm3 equ $-menu3 
menu4:  db "Reboot "
lm4 equ $-menu4    
menu5:  db "Exit "
lm5 equ $-menu5  
strM: db "->"
 
resume:

	MOV AX, 0600H    ;cls
	xor cx,cx
	MOV DH, 25
	MOV DL, 80
	MOV BH, 0FH 
	INT 10H

	mov ax,1301h      ;out
	mov bx,05h
	lea bp,menu
	mov cx,lm            ;length
	mov dx,061fh         ;coord
	push dx
	int 10h       

	mov ax,1301h      ;out
	mov bx,05h
	lea bp,menu1
	mov cx,lm1            ;length
	pop	dx
	add dx,0100h         ;coord
	push	dx
	int 10h          

	mov ax,1301h      ;out
	mov bx,05h
	lea bp,menu2
	mov cx,lm2            ;length
	pop	dx
	add dx,0100h         ;coord
	push	dx
	int 10h

	mov ax,1301h      ;out
	mov bx,05h
	lea bp,menu3
	mov cx,lm3            ;length
	pop	dx
	add dx,0100h         ;coord
	push	dx
	int 10h          

	mov ax,1301h      ;out
	mov bx,05h
	lea bp,menu4
	mov cx,lm4            ;length
	pop	dx
	add dx,0100h         ;coord
	push	dx
	int 10h                   

	mov ax,1301h      ;out
	mov bx,05h
	lea bp,menu5
	mov cx,lm5                 ;length
	pop	dx
	add dx,0100h         ;coord
	int 10h         

	MOV ax, 0600H
	xor cx,cx
	MOV DH, 25
	MOV DL, 1eh
	MOV BH, 0FH 
	INT 10H 

	mov ax,1301h      ;out
	mov bx,05h    
	lea bp,strM
	mov cx,2           ;length
	mov dx,071dh         ;coord
	push dx
	int 10h      

select: 
	mov	ah,0                ;wait for up/down 48/50
	int	16h
	cmp	ah, 80
	jz	down
	cmp	ah, 72
	jz	up
	cmp	al, 27
	je	exitM
	jmp	select
exitM:
;	восстановить всё взад
	pop	ax
	mov	ah, 00h
	int	10h
	mov	ax, 4c00h
	int	21h
	ret

down:
	MOV ax, 0600H
	xor cx,cx     
	MOV DL, 1eh
	MOV BH, 0FH 
	INT 10H  
                  
	mov ax,1301h      ;out
	mov bx,05h    
	lea bp,strM
	mov cx,2           ;length
	pop dx
	cmp dh, 0bh
	jge  downNext
	inc dh
downNext:
	push	dx
	int 10h     
	jmp select

up:
	MOV ax, 0600H
	xor cx,cx     
	MOV DL, 1eh
	MOV BH, 0FH 
	INT 10H  
	mov ax,1301h      ;out
	mov bx,05h    
	lea bp,strM
	mov cx,2           ;length
	pop	dx
	cmp dh, 07h
	jle upNext
	dec	dh
upNext:
	push	dx
	int 10h     
	jmp select

end start
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 14.01.2013, 15:49   #3
Jugger
Пользователь
 
Регистрация: 30.01.2008
Сообщений: 99
По умолчанию

Спасибо !
Jugger вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Реализация стека в Pascal. Ошибка. MayhemWithMercy Помощь студентам 7 18.08.2012 14:49
Пропало меню на сайте ucoz не пойму в чем дело бэк ап не помог=( хаоси Помощь студентам 0 20.06.2012 19:07
Реализация не стандартного меню joomla1.5 zorro77786 JavaScript, Ajax 2 18.11.2009 13:51
Как(чем) удалить пункты из меню, которое появляется при нажатии правой кнопки мыши? TwiX Свободное общение 13 11.11.2009 13:53
В чем проблема появления символа & в начале каждого заголовка итема созданного в рунтайте раздела меню? SkAndrew Общие вопросы Delphi 17 10.08.2008 21:44