Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для shurikan

Старожил


Сообщения: 240
Благодарности: 1

Профиль | Отправить PM | Цитировать


himik
Значится так. Компилил TASM-ом. Стрелочками перемещается курсор. CTRL+стрелочки - символ вместе с курсором во все стороны. На краях перпрыгивает на противоположный край. ESC - выход. Код уже отладил. Читай:
Код: Выделить весь код
 
.286 
.model smal 
 
.data 
videoseg * * * * dw 0B800h 
 
cursor_pos * * * * dw ? 
cursor_shape * * dw ? 
video_off * * * * *dw ? 
 
key_tbl * * * * * *db 4Bh, 4Dh, 48h, 50h, 73h, 74h, 8Dh, 91h, 0 
off_tbl * * * * * *dw offset do_left 
 * * * * * * * * * dw offset do_right 
 * * * * * * * * * dw offset do_up 
 * * * * * * * * * dw offset do_down 
 * * * * * * * * * dw offset do_cleft 
 * * * * * * * * * dw offset do_cright 
 * * * * * * * * * dw offset do_cup 
 * * * * * * * * * dw offset do_cdown 
 
 .code 
start: 
 * * * * mov * * * *ax,@data 
 * * * * mov * * * *ds,ax 
 * * * * mov * * * *ax,videoseg 
 * * * * mov * * * *es,ax 
 
 * * * * mov * * * *ah,03h 
 * * * * mov * * * *bh,0 
 * * * * int * * * *10h 
 
 * * * * mov * * * *cursor_pos,dx 
 * * * * mov * * * *cursor_shape,cx 
 
 * * * * xor * * * *cx,cx 
 * * * * mov * * * *cl,dl 
 * * * * shl * * * *cx,1 
 * * * * xor * * * *ax,ax 
 * * * * mov * * * *al,dh 
 
 * * * * mov * * * *bp,160 
 * * * * mul * * * *bp 
 * * * * add * * * *ax,cx 
 * * * * mo * * * * vvideo_off,ax 
 
next: 
 * * * * mov * * * *ah,10h 
 * * * * int * * * *16h 
 
 * * * * cmp * * * *ah,1 
 * * * * je * * * * done 
 
 * * * * call * * * process 
 
 * * * * jmp * * * *next 
 
done: 
 * * * * mov * * * ax,4c00h 
 * * * * int * * * *21h 
 
 
process: 
 * * * *cmp * * * *al,0E0h 
 * * * *jne * * * * *locret 
 
 * * * *xor * * * * *bx,bx 
 
 @@1: 
 * * * *mov * * * *al,key_tbl[bx] 
 * * * *and * * * *al,al 
 * * * *je * * * * * locret 
 
 * * * *cmp * * * *ah,al 
 * * * *je * * * * * found 
 
 * * * * inc * * * * bx 
 * * * * jmp * * * @@1 
 
found: 
 * * * * shl * * * * bx,1 
 * * * * add * * * *bx,offset off_tbl 
 * * * * mov * * * ax,[bx] 
 * * * * call * * * * ax 
 
locret: 
 * * * * ret 
 
 
do_left: 
 * * * * mov * * * dx,cursor_pos 
 * * * * and * * * dl,dl 
 * * * * je * * * * *zero_col0 
 
 * * * * dec * * * dx 
 * * * * sub * * * video_off,2 
 * * * * jmp * * * cont0 
 
zero_col0: 
 * * * * mov * * *dl,79 
 * * * * add * * * video_off,2*79 
 
cont0: 
 * * * * mov * * *cursor_pos,dx 
 * * * * call * * * *set_cursor_pos 
 * * * * ret 
 
 
do_right: 
 * * * * mov * * *dx,cursor_pos 
 * * * * cmp * * *dl,79 
 * * * * je * * * * last_col0 
 
 * * * * inc * * * *dx 
 * * * * add * * *video_off,2 
 * * * * jmp * * * cont1 
 
last_col0: 
 * * * * xor * * * dl,dl 
 * * * * sub * * *video_off,2*79 
 
cont1: 
 * * * *mov * * * cursor_pos,dx 
 * * * *call * * * *set_cursor_pos 
 * * * *ret 
 
 
do_up: 
 * * * *mov * * * dx,cursor_pos 
 * * * *and * * * dh,dh 
 * * * *je * * * * *zero_row0 
 
 * * * *sub * * * dx,100h 
 * * * *sub * * * video_off,160 
 * * * *jmp * * * cont2 
 
zero_row0: 
 * * * *mov * * *dh,24 
 * * * *add * * * video_off,160*24 
 
cont2: 
 * * * *mov * * * cursor_pos,dx 
 * * * *call * * * *set_cursor_pos 
 * * * *ret 
 
 
do_down: 
 * * * *mov * * * dx,cursor_pos 
 * * * *cmp * * * dh,24 
 * * * *je * * * * *last_row0 
 
 * * * *add * * * dx,100h 
 * * * *add * * * video_off,160 
 * * * *jmp * * * cont3 
 
last_row0: 
 * * * *xor * * * *dh,dh 
 * * * *sub * * * video_off,160*24 
 
cont3: 
 * * * *mov * * *cursor_pos,dx 
 * * * *call * * * *set_cursor_pos 
 * * * *ret 
 
 
do_cleft: 
 * * * *mov * * * bx,video_off 
 * * * *mov * * * bp,bx 
 * * * *mov * * * dx,cursor_pos 
 * * * *and * * * dl,dl 
 * * * *je * * * * *zero_col1 
 
 * * * *sub * * * bp,2 
 * * * *jmp * * * cont4 
 
zero_col1: 
 * * * *add * * * bp,2*79 
 
cont4: 
 * * * *mov * * *dx,es:[bx] 
 * * * *mov * * *ax,es:[bp] 
 * * * *mov * * *es:[bx],ax 
 * * * *mov * * *es:[bp],dx 
 * * * *call * * * do_left 
 * * * *ret 
 
 
do_cright: 
 * * * *mov * * * bx,video_off 
 * * * *mov * * * bp,bx 
 * * * *mov * * * dx,cursor_pos 
 * * * *cmp * * * dl,79 
 * * * *je * * * * *last_col1 
 
 * * * *add * * * bp,2 
 * * * *jmp * * * cont5 
 
last_col1: 
 * * * *sub * * * bp,2*79 
 
cont5: 
 * * * *mov * * *dx,es:[bx] 
 * * * *mov * * *ax,es:[bp] 
 * * * *mov * * *es:[bx],ax 
 * * * *mov * * *es:[bp],dx 
 * * * *call * * * do_right 
 * * * *ret 
 
 
do_cup: 
 * * * *mov * * *bx,video_off 
 * * * *mov * * *bp,bx 
 * * * *mov * * *dx,cursor_pos 
 * * * *and * * *dh,dh 
 * * * *je * * * * zero_row1 
 
 * * * *sub * * *bp,160 
 * * * *jmp * * *cont6 
 
zero_row1: 
 * * * *add * * *bp,160*24 
 
cont6: 
 * * * *mov * * *dx,es:[bx] 
 * * * *mov * * *ax,es:[bp] 
 * * * *mov * * *es:[bx],ax 
 * * * *mov * * *es:[bp],dx 
 * * * *call * * * do_up 
 * * * *ret 
 
 
do_cdown: 
 * * * *mov * * *bx,video_off 
 * * * *mov * * *bp,bx 
 * * * *mov * * *dx,cursor_pos 
 * * * *cmp * * *dh,24 
 * * * *je * * * * last_row1 
 
 * * * *add * * *bp,160 
 * * * *jmp * * *cont7 
 
last_row1: 
 * * * *sub * * *bp,160*24 
 
cont7: 
 * * * *mov * * *dx,es:[bx] 
 * * * *mov * * *ax,es:[bp] 
 * * * *mov * * *es:[bx],ax 
 * * * *mov * * *es:[bp],dx 
 * * * *call * * * *do_down 
 * * * *ret 
 
 
set_cursor_pos: 
 * * * *mov * * *ah,02h 
 * * * *xor * * * *bh,bh 
 * * * *int * * * *10h 
 * * * *ret 
 
.stack 
 
end start

-------
UNIX, UNAS и др. Myself I'll like 'em


Отправлено: 03:12, 21-11-2003 | #6