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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » программа на Ассемблере

Ответить
Настройки темы
программа на Ассемблере

Завсегдатай


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

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


помогите плиз
переместить по экрану символ вертикально
спасибо.

-------
Слушайся совета и принимай обличение, чтобы сделаться тебе в последствии мудрым.
Книга притчей Соломоновых 19:20


Отправлено: 12:44, 17-11-2003

 

Аватара для shurikan

Старожил


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

Профиль | Отправить 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]

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


Отправлено: 03:39, 18-11-2003 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Завсегдатай


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

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


shurikan
Цитата:
Ну, полностью код писать не буду.
напиши если не сложно, очень надо, а я в этом ваще никак не рублю(
Санкс.

-------
Слушайся совета и принимай обличение, чтобы сделаться тебе в последствии мудрым.
Книга притчей Соломоновых 19:20


Отправлено: 10:11, 19-11-2003 | #3


Аватара для shurikan

Старожил


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

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


himik
OK! Только тогда я попрошу полностью выложить задание. А то я только понял, что писать надо на ассемблере. Это должна быть подпрограмма, принимающая какие-то параметры? Или как можно узнать какой символ двигать, куда именно сейчас (вверх или вниз), постоянно или по нажатию клавиши, с какой скоростью, когда остановиться???? Лады? А так это не сложно - сделаем.

Добавлено:

Можно и комментарии приклеить.

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


Отправлено: 03:08, 20-11-2003 | #4


Завсегдатай


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

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


shurikan
мдя озадачил)))
задание так и звучит
Составить программу, перемещения символа по экрану вертикально :-(
А как я думаю значения не имеет.

-------
Слушайся совета и принимай обличение, чтобы сделаться тебе в последствии мудрым.
Книга притчей Соломоновых 19:20


Отправлено: 09:38, 20-11-2003 | #5


Аватара для 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


Завсегдатай


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

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


shurikan
большое спасибо, выручил)
Guest
пасиб, но надо было на ассемблере :-)))

-------
Слушайся совета и принимай обличение, чтобы сделаться тебе в последствии мудрым.
Книга притчей Соломоновых 19:20


Отправлено: 09:13, 21-11-2003 | #7


Аватара для shurikan

Старожил


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

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


himik
Не за что
Комментарии нужны?

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


Отправлено: 15:48, 21-11-2003 | #8


Завсегдатай


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

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


Цитата:
Комментарии нужны?
shurikan
было бы не плохо, а то я не смогу если спросят объяснить)

-------
Слушайся совета и принимай обличение, чтобы сделаться тебе в последствии мудрым.
Книга притчей Соломоновых 19:20


Отправлено: 16:18, 21-11-2003 | #9


Аватара для shurikan

Старожил


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

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


himik
OK! Здесь добавлять не буду, вышлю по e-mail с вложением.

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


Отправлено: 04:40, 22-11-2003 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » программа на Ассемблере

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход