|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » программа на Ассемблере |
|
программа на Ассемблере
|
Завсегдатай Сообщения: 189 |
помогите плиз
переместить по экрану символ вертикально спасибо. |
|
------- Отправлено: 12:44, 17-11-2003 |
![]() Старожил Сообщения: 240
|
Профиль | Отправить PM | Цитировать himik
Ну, полностью код писать не буду. Наводку даю: (я так понимаю, что это требуется под DOS) Способ 1. Используем прерывние 10h (видео) функции скроллирование прямоугольной области экрана. Если в ah записать число 06h, то скроллинг осуществляется вверх, а если 07h, то - вниз. Остальные аргументы одинаковы для обеих функций. ch, cl - соответственно номера строки и колонки левого верхнего угла области скроллинга, (для всего экрана эти координаты 0 и 0) dh, dl - номера строки и колонки правого нижнего угла области скроллинга, al - количество строк, на которое нужно произвести сдвиг, bh - видео атрибут (цвет символа и фона) для заполнения пустого места, например 07h - светло серый символ на черном фоне. Способ 2. Прямое обращение к видеопамяти. *push ds *mov *ax,0B800h *mov *ds,ax *mov *ax, Y *mul *160 *add *ax, X *add *ax, X *mov *dx,[ax] *sub *ax, 160 ; для сдвига вверх *add *ax, 160 ; для сдвига вниз *mov *[ax],dx *pop *ds ![]() [s]Исправлено: shurikan, 4:41 18-11-2003[/s] |
------- Отправлено: 03:39, 18-11-2003 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Завсегдатай Сообщения: 189
|
Профиль | Отправить PM | Цитировать shurikan
Цитата:
![]() ![]() Санкс. |
|
------- Отправлено: 10:11, 19-11-2003 | #3 |
![]() Старожил Сообщения: 240
|
Профиль | Отправить PM | Цитировать himik
OK! Только тогда я попрошу полностью выложить задание. А то я только понял, что писать надо на ассемблере. Это должна быть подпрограмма, принимающая какие-то параметры? Или как можно узнать какой символ двигать, куда именно сейчас (вверх или вниз), постоянно или по нажатию клавиши, с какой скоростью, когда остановиться???? Лады? А так это не сложно - сделаем. ![]() Добавлено: Можно и комментарии приклеить. |
------- Отправлено: 03:08, 20-11-2003 | #4 |
Завсегдатай Сообщения: 189
|
Профиль | Отправить PM | Цитировать shurikan
мдя озадачил))) задание так и звучит Составить программу, перемещения символа по экрану вертикально :-( А как я думаю значения не имеет. |
|
------- Отправлено: 09:38, 20-11-2003 | #5 |
![]() Старожил Сообщения: 240
|
Профиль | Отправить 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 ![]() |
------- Отправлено: 03:12, 21-11-2003 | #6 |
Завсегдатай Сообщения: 189
|
Профиль | Отправить PM | Цитировать shurikan
большое спасибо, выручил) Guest пасиб, но надо было на ассемблере :-))) |
------- Отправлено: 09:13, 21-11-2003 | #7 |
![]() Старожил Сообщения: 240
|
Профиль | Отправить PM | Цитировать himik
Не за что ![]() Комментарии нужны? ![]() |
------- Отправлено: 15:48, 21-11-2003 | #8 |
Завсегдатай Сообщения: 189
|
Профиль | Отправить PM | Цитировать Цитата:
было бы не плохо, а то я не смогу если спросят объяснить) |
|
------- Отправлено: 16:18, 21-11-2003 | #9 |
![]() Старожил Сообщения: 240
|
Профиль | Отправить PM | Цитировать himik
OK! Здесь добавлять не буду, вышлю по e-mail с вложением. ![]() |
------- Отправлено: 04:40, 22-11-2003 | #10 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Assm - Простые проги на ассемблере под dos | Dimaev | Программирование и базы данных | 2 | 08-05-2009 11:18 | |
Assm - Помогите решить задание на ассемблере | Wild_cat | Программирование и базы данных | 3 | 10-03-2009 09:49 | |
Нужна программа, определяющая, каким инсталлятором запакована программа | yaryar | Программное обеспечение Windows | 3 | 24-06-2008 10:56 | |
программа | Rustem | Вебмастеру | 7 | 07-05-2008 11:37 | |
графика на ассемблере под дос | JCooper | Программирование и базы данных | 8 | 21-09-2004 09:46 |
|