Форум программистов, компьютерный форум, киберфорум
Assembler: математика, вычисления
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 05.06.2013
Сообщений: 29

Фигуры Лиссажу (осцелограф)

19.06.2013, 06:37. Показов 3573. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите пожалуйста как можно изменить разрешение хотяб на 640Х400(короче просто побольше) и поменять цвет в программе:
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
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
.model  tiny
.code
.386     ; будут использоваться 32-битные регистры
org 100h    ; COM-программа
 
SCALE_H equ 3   ; число периодов в фигуре по горизонтали
SCALE_V equ 5   ; число периодов по вертикали
 
start   proc    near
cld  ; для команд строковой обработки
 
mov di,offset cos_table ; адрес начала таблицы косинусов
mov ebx,16777137 ; 224 * cos(360/2048) - заранее вычисленное
mov cx,2048 ; число элементов для таблицы
call    build_table ; построить таблицу косинусов
 
mov ax,0013h    ; графический режим
int 10h  ; 320x200x256
 
mov ax,1012h    ; установить набор регистров палитры VGA,
mov bx,70h  ; начиная с регистра 70h
mov cx,4     ; четыре регистра
mov dx,offset palette ; адрес таблицы цветов
int 10h
 
push    0A000h  ; сегментный адрес видеопамяти
pop es   ; в ES
 
main_loop:
call    display_picture ; изобразить точку со следом
 
mov dx,5000
xor cx,cx
mov ah,86h
int 15h  ; пауза на CX:DX микросекунд
 
mov ah,11h  ; проверить, была ли нажата клавиша,
int 16h
jz  main_loop   ; если нет - продолжить основной цикл
 
mov ax,0003h    ; текстовый режим
int 10h  ; 80x24
 
ret  ; конец программы
start   endp
 
; процедура build_table
; строит таблицу косинусов в формате с фиксированной запятой 8:24
; по рекуррентной формуле cos(xk) = 2 * cos(span/steps) * cos(xk-1) - cos(xk-2),
; где span - размер области, на которой вычисляются косинусы (например 360),
; а steps - число шагов, на которые разбивается область
; Ввод: DS:DI = адрес таблицы
;   DS:[DI] = 224
;   EBX = 224 * cos(span/steps)
;   CX = число элементов таблицы, которые надо вычислить
; Вывод: таблица размером CX * 4 байта заполнена
; Модифицируются: DI,CX,EAX,EDX
 
build_table proc    near
mov dword ptr [di+4],ebx ; заполнить второй элемент таблицы
sub cx,2     ; два элемента уже заполнены
add di,8
mov eax,ebx
build_table_loop:
imul    ebx  ; умножить cos(span/steps) на cos(xk-1)
shrd    eax,edx,23   ; поправка из-за действий с фиксированной
; запятой 8:24 и умножение на 2
sub eax,dword ptr [di-8] ; вычитание cos(xk-2)
stosd    ; запись результата в таблицу
loop    build_table_loop
ret
build_table endp
 
; процедура display_picture
; изображает точку со следом
 
display_picture proc    near
 
call    move_point  ; переместить точку
 
mov bp,73h  ; темно-серый цвет в нашей палитре
mov bx,3     ; точка, выведенная три шага назад
call    draw_point  ; изобразить ее
dec bp   ; 72h - серый цвет в нашей палитре
dec bx   ; точка, выведенная два шага назад
call    draw_point  ; изобразить ее
dec bp   ; 71h - светло-серый цвет в нашей палитре
dec bx   ; точка, выведенная один шаг назад
call    draw_point  ; изобразить ее
dec bp   ; 70h - белый цвет в нашей палитре 
dec bx   ; текущая точка
call    draw_point  ; изобразить ее
ret
display_picture endp
 
; процедура draw_point
; Ввод: BP - цвет
; BX - сколько шагов назад выводилась точка
;
draw_point proc near
movzx   cx,byte ptr point_x[bx] ; X-координата
movzx   dx,byte ptr point_y[bx] ; Y-координата
call    putpixel_13h    ; вывод точки на экран
ret
draw_point endp
 
; процедура move_point
; вычисляет координаты для следующей точки, изменяет координаты точек, 
; выведенных раньше
 
move_point proc near
inc word ptr time
and word ptr time,2047  ; эти две команды организуют
; счетчик в переменной time, который 
; изменяется от 0 до 2047 (7FFh)
 
mov eax,dword ptr point_x   ; считать координаты точек 
mov ebx,dword ptr point_y   ; (по байту на точку)
mov dword ptr point_x[1],eax ; и записать их со сдвигом
mov dword ptr point_y[1],ebx ; 1 байт
 
mov di,word ptr time    ; угол (или время) в DI
imul    di,di,SCALE_H   ; умножить его на SCALE_H
and di,2047  ; остаток от деления на 2048
shl di,2     ; так как в таблице 4 байта на косинус
mov ax,50    ; масштаб по горизонтали
mul word ptr cos_table[di+2] ; Умножение на косинус. 
; Берется старшее слово (смещение + 2) от 
; косинуса, записанного в формате 8:24, 
; фактически происходит умножение на косинус в 
; формате 8:8
mov dx,0A000h   ; 320/2 (X центра экрана) в формате 8:8
sub dx,ax    ; расположить центр фигуры в центре экрана
mov byte ptr point_x,dh ; и записать новую текущую точку
 
mov di,word ptr time    ; угол (или время) в DI 
imul    di,di,SCALE_V   ; умножить его на SCALE_V
add di,512   ; добавить 90 градусов, чтобы заменить 
; косинус на синус. Так как у нас 2048
; шагов на 360 градусов, 90 градусов - это 
; 512 шагов
and di,2047  ; остаток от деления на 2048,
shl di,2     ; так как в таблице 4 байта на косинус
mov ax,50    ; масштаб по вертикали
mul word ptr cos_table[di+2] ; умножение на косинус
mov dx,06400h   ; 200/2 (Y центра экрана) в формате 8:8
sub dx,ax    ; расположить центр фигуры в центре экрана
mov byte ptr point_y,dh ; и записать новую текущую точку
ret
move_point endp
 
; putpixel_13h
; Процедура вывода точки на экран в режиме 13h
; DX = строка, CX = столбец, BP = цвет, ES = A000h
putpixel_13h    proc    near
push    di
mov ax,dx   ; номер строки
shl ax,8    ; умножить на 256
mov di,dx
shl di,6    ; умножить на 64
add di,ax   ; и сложить - то же, что и умножение на 320
add di,cx   ; добавить номер столбца
mov ax,bp
stosb    ; записать в видеопамять
pop di
ret
putpixel_13h    endp
 
point_x db  0FFh,0FFh,0FFh,0FFh ; X-координаты точки и хвоста
point_y db  0FFh,0FFh,0FFh,0FFh ; Y-координаты точки и хвоста
db  ?   ; пустой байт - нужен для команд сдвига координат 
; на один байт
time    dw  0    ; параметр в уравнениях Лиссажу - время или угол
 
palette db  3Fh,3Fh,3Fh ; белый
db  30h,30h,30h ; светло-серый
db  20h,20h,20h ; серый
db  10h,10h,10h ; темно-серый
 
cos_table   dd  1000000h ; здесь начинается таблица косинусов
end start
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.06.2013, 06:37
Ответы с готовыми решениями:

Построение фигуры Лиссажу
Обращался за помощью в написании курсавика по ассемблеру(фигуры лиссажу)). Прекрасно помогли) только вот как сделать менюшку(типо:...

фигуры Лиссажу
Нужно решить задачу по метрологии, не представляю где и за что взяться. На пластине Х электронно лучевого осциллографа подано напряжение...

Фигуры Лиссажу
Добрый день. Плиз,помогите с задачкой... Добавлено через 3 минуты Задание 1. Используя возможность повторять выполнение...

25
 Аватар для Troll_Face
608 / 406 / 8
Регистрация: 26.04.2012
Сообщений: 2,065
20.06.2013, 09:12
Студворк — интернет-сервис помощи студентам
murderer, ах вон оно как... я думал если писать в видеопамять на прямую. эта функция долго работает, поэтому в основном пишут в видеопамять. хотя кто как.
1
1127 / 261 / 9
Регистрация: 11.06.2010
Сообщений: 1,049
20.06.2013, 09:24
Troll_Face, я тоже студент, так что про неуместность ошибаешься ;-) И под виндой в V86 особо в видеопамять без банков не попишешь. И ты не прав, что это до ужаса медленно. Всё от алгоритма зависит. Видел я графический редактор для DOS. Под виндой он также запускался и работал в режиме 1024x768x24. LFB он врятли юзал, т.к. из v86, насколько знаю, к LFB легальными способами нельзя обратиться(я ошибаюсь?). FPS было около 50, т.е. тормозов особых я не видел при работе, хотя функций там было напичкано, как в фотошопе. Вот такие дела.....
1
4195 / 1841 / 223
Регистрация: 06.10.2010
Сообщений: 4,127
20.06.2013, 09:37
из v86, насколько знаю, к LFB легальными способами нельзя обратиться(я ошибаюсь?)
Ну можно делать вызов из dll, которая будет запускать драйвер, который перейдёт в unreal mode и получит указатель на LFB. Тот ещё изврат
1
0 / 0 / 0
Регистрация: 05.06.2013
Сообщений: 29
20.06.2013, 20:10  [ТС]
ну можете написать что и как поменять что б изменить разрешение??? Очень буду благодарен если допишете))))))))
0
4195 / 1841 / 223
Регистрация: 06.10.2010
Сообщений: 4,127
21.06.2013, 05:55
Функцию putpixel_13h описываешь так
Assembler
1
2
3
4
5
6
7
putpixel_13h:
  push bx
  xor  bx,bx
  lea  ax,[bp+0C00h]
  int  10h
  pop  bx
ret
Теперь можешь включать любой палитровый видеорежим. Например
Assembler
1
2
3
4
;установка режима 640*480*8
mov ax,4F02h
mov bx,101h
int 10h
1
0 / 0 / 0
Регистрация: 05.06.2013
Сообщений: 29
22.06.2013, 19:59  [ТС]
Не выходит((( просто черный экран повисает и все...

Добавлено через 17 минут
Да же нет не так-окно увеличивается(на разрешение 640х480) а фигура рисуется такая же маленькая!!)))) Помогите плиз)))

Добавлено через 15 минут
@murderer, можете обьяснить почему так??
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.06.2013, 19:59

Фигуры Лиссажу
Добрый день, подскажите пожалуйста как правильно сформировать массив для Фигуры Лиссажу? я пытаюсь сделать чтобы фигура отрисовывалась...

Фигуры Лиссажу
Доброго времени суток. Суть задания заключается в изображении на panel в Visual Windows Form фигуры Лиссажу, в зависимости от значений...

Фигуры Лиссажу. Анимация
Добрый день друзья! Хочу попросить помощи в решении следующей задачи. Создать программу, генерирующую видеоролик, в котором...

Фигуры Лиссажу на builder
отдельно синусы рисую с помощью Image, а две нарисовать сразу не получается. x=sin(bx) y=sin(bx). Подскажите, где косяк. Приложил код...

Рассчитать и построить фигуры Лиссажу
Здравствуйте все, кто читает эту тему. Мне необходимо выполнить вот такое задание: "Рассчитать и построить фигуры Лиссажу для...


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

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru