Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 25.05.2010
Сообщений: 4
1

Реализовать с квад матрицей волнообразное движение темной строки (черной)

25.05.2010, 23:07. Показов 583. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам

Мальчики! помогите пожалуйста сделать лабу на asm, хотя бы наброски, чтоб могла оттолкнуться от чего. с 0 сложно написать самой.
Изначальное задание: на экран выводится квадратная матрица символов.Реализовать с этой матрицей волнообразное движение темной строки (черной), причем, с изменяемым временным интервалом.Изменение времени производить в 3 раза. клавиша "+" - увелечение скорости, "-" - соответственно уменьшение.
На начальный этап, хотя бы реализовать: матрицу 4*4.
На 1ом шаге: выключение 4ой строки, путем изменения атрибутов младшего байта.
На 2ом шаге: включение 4ой строки, выключение 3ей, и так вверх
На 5 шаге: вкл 1ой строки, выкл 4ой.
Плюс брать из сист.счетчика время, и как-то с ним работать, чтоб реализ увел и умень скорости
Вообще препод сказал, в идеале, изменять интенсивность свечения, но мне хотя бы предыдущее сделать.

Помогите плиз ребята!

Добавлено через 1 час 35 минут
Ну неужели ни кто не поможет? :-( мальчики! пожалуйста, помогите девушке!

Добавлено через 1 час 15 минут
((( ну помогите кто-нибудь! хоть черканите пару строк, мальчики!!! плиЗ!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.05.2010, 23:07
Ответы с готовыми решениями:

Волнообразное движение объектов
У меня такой вопрос, как осуществить волнообразное движение объектов при их столкновении на C#

Реализовать класс для работы с квадратной целочисленной матрицей
1) Составить описание класса для работы с квадратной целочисленной матрицей. Обязательные...

Волнообразное заполнение вектора
здравствуйте) нужно заполнить вектор любыми числами так что бы он походил на волнообразный что то...

волнообразное искривление страницы
Всем привет! народ у меня проблема.У меня с моей страницей происходят странные дефекты а именно в...

2
28 / 24 / 0
Регистрация: 03.02.2010
Сообщений: 66
26.05.2010, 00:00 2
Вывод матрицы думаю вы и сами реализуете. В случае работы с граф режимом, видеобуффер находится по адресу 0xA8000 - т.е. A800 сегмент и 0 смещение. Или если так удобней A000 сегмент, 0x800 - смещение. Список прерываний. - DOS и BIOS. Просто поройтесь в верхних ссылках
Что касается ускорения/замедления - вам собственно нужно делать некое подобие Sleep-а на определенное время. Предположим у вас есть некая переменная TimeOut. На каждой итерации цикла вы будете вызывать отрисовку следующего кадра + Sleep(TimeOut). При нажатии пользователем клавиш + или - эта переменная будет уменьшатся(+ отвечает за ускорение ведь - меньше TimeOut - быстрее все работает) и увеличиваться соответственно.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
int TimeOut=1000; //для примера.
#define PIT_INT_NUM=0x1C
#define KBD_INT_NUM=0x1
int main()
{
  SetInterruptHandler(KBD_INT_NUM,KBDHandler);
  SetInterruptHandler(PIT_INT_NUM,TimerHandler);
  while()
  {
    DrawNextStep();
    Sleep(TimeOut);
  }
}
void KBDHandler()
{
    BYTE keyCode= inPort(0x60); //после вызова прерывания из порта 0x60 можно считать скан-код нажатой клавиши 
    if(keyCode=KEY_PLUS)
    {
      TimeOut--;
    }
    elseif(keyCode=KEY_MINUS)
    {
      TimeOut++;
    }
    out(0x20,0x20);           // отправить EOI - End of Interrupt обоим PIC-ам 
    out(0xA0,0x20);
    iret;                    // и спокойно вернутся в основной код. 
 
}
int Counter=0;
void TimerHandler()
{
  Counter--;
  iret;
}
void Sleep(TimeOut)
{
  Counter=TimeOut;
  while(Counter!=0) HLT ; //HLT спец инструкция для ожидания следующего прерывания. 
}
 
SetInterruptHandler(vector_num,func_handler_addr)
{
  DS:DX=func_handler_addr;
  ah=0x25;
  al=vector_num;
  int 0x21;
}
Сей безобразный псевдокод призван помочь вам понять что и как вам нужно написать.
Список рекомендуемой литературы:
Help-PC
Keyboard Controller
Keyboard ScanCodes
Interrupt Services List - очень рекомендую просмотреть INT 21
INT 21, Function 25 Set Interrupt Vector
INT 1C - System Timer Tick - вызывается автоматически. Просто заглушка на место которой можно установить свой обработчик что я и сделал в псевдокоде с помощью INT 21, Func 25
IRQ Numbers

Надеюсь это хоть как то вам поможет
Чуть не забыл. Я работал с графикой, правда, в защищенном режиме:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
use16
org 0x7C00
start:
  cli
  mov ax,cs
  mov ds,ax
  mov ss,ax
  mov sp,0x7C00
  sti
  
  xor ax,ax
  mov es,ax
  mov si,GDT_table
  mov di,0x500
  mov cx,24
  cld
  rep movsb
  
  mov ax,3
  int 0x10
  mov ah,1
  mov ch,0x20
  int 0x10
  
  mov ah,0
  mov al,0x13
  int 0x10
  
  cli
  lgdt fword[GDTR]
  mov eax,cr0
  or al,1
  mov cr0,eax
  jmp 0x10:kernel
 
use32
kernel:
  mov ax,0x8
  mov es,ax
  mov ds,ax
  mov ss,ax
  mov esp,0x10000
  
  
  macro SetPixel x,y
  {
    mov ebx,x
    mov eax,y
    call GSetPixel
  }
  
  mov esi,0xA0000
  xor ecx,ecx
  @@:
  mov eax,dword[charH+ecx*4]
  mov dword[esi],eax
  add esi,320
  inc ecx
  cmp ecx,7
  jb @b
  
  mov esi,0xA0006
  xor ecx,ecx
  @@:
  mov eax,dword[charE+ecx*4]
  mov dword[esi],eax
  add esi,320
  inc ecx
  cmp ecx,7
  jb @b
  
  mov esi,0xA000C
  xor ecx,ecx
  @@:
  mov eax,dword[charL+ecx*4]
  mov dword[esi],eax
  add esi,320
  inc ecx
  cmp ecx,7
  jb @b
  
  mov esi,0xA0012
  xor ecx,ecx
  @@:
  mov eax,dword[charL+ecx*4]
  mov dword[esi],eax
  add esi,320
  inc ecx
  cmp ecx,7
  jb @b
  
  mov esi,0xA0018
  xor ecx,ecx
  @@:
  mov eax,dword[charO+ecx*4]
  mov dword[esi],eax
  add esi,320
  inc ecx
  cmp ecx,7
  jb @b
  
  jmp $
  
charH dd 0x0F00000F
      dd 0x0F00000F
      dd 0x0F00000F
      dd 0x0F0F0F0F
      dd 0x0F00000F
      dd 0x0F00000F
      dd 0x0F00000F
charE dd 0x0F0F0F0F
      dd 0x0000000F
      dd 0x0000000F
      dd 0x0F0F0F0F
      dd 0x0000000F
      dd 0x0000000F
      dd 0x0F0F0F0F
charL dd 0x0000000F
      dd 0x0000000F
      dd 0x0000000F
      dd 0x0000000F
      dd 0x0000000F
      dd 0x0000000F
      dd 0x0F0F0F0F
charO dd 0x000F0F00
      dd 0x0F00000F
      dd 0x0F00000F
      dd 0x0F00000F
      dd 0x0F00000F
      dd 0x0F00000F
      dd 0x000F0F00
GSetPixel:
;## ebx = x
;## eax = y
dec ebx
dec eax
mov ecx,320
mul ecx
add eax,ebx
add eax,0xA0000
mov byte[eax],0x0F
ret
 
  mov edi,0xA0000
  cld 
  mov al,00001111b  ; 
  xor ecx,ecx
  @@:
  stosb
  inc ecx
  cmp ecx,64000
  jb @b
 
 
 
GDT_table:
gdt_stub       dw 0x0000,0x0000,0x0000,0x0000
kernel_data    dw 0xFFFF,0x0000,0x9200,0x00CF
kernel_code    dw 0xFFFF,0x0000,0x9800,0x00CF
GDT_ends:  gdt_size=GDT_ends-GDT_table
GDTR:
  dw 0x17
  dd 0x500
TIMES 510-($-$$) db 0  
dw 0xAA55
0
0 / 0 / 0
Регистрация: 25.05.2010
Сообщений: 4
26.05.2010, 00:18  [ТС] 3
Спасибо за информацию!
0
26.05.2010, 00:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.05.2010, 00:18
Помогаю со студенческими работами здесь

Реализовать передачу параметров по ссылке для приведенной задачи с матрицей
Помогите, пожалуйста, сегодня сдавал программу, которая определяет в целочисленной квадратной...

Ввести класс для работы с прямоугольной матрицей, реализовать операции сложения и умножения матриц
Кто-нибудь подскажите, пожалуйста написать программу в С++. Ввести класс для работы с...

Датчик движения в темной обстановке
Здравствуйте. Необходим мне датчик движения в темноте цифровой (мб и аналоговый, но не хочется...

Не получается реализовать движение
Не получается реализовать движение


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru