С Новым годом! Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
21 / 20 / 3
Регистрация: 21.06.2010
Сообщений: 80

Поясните код 32-байтной демки от Dirojed

05.10.2010, 21:45. Показов 2920. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!

Наткнулся на удивительные вещи - графически демки весом в 32 байта, выполненные на ассемблере. Стало жутко интересно, как оно так получается. Благо товарищи демо-сцены парни не жадные и многие прикладывают исходник к запускному файлу.

Если кому не сложно и не лень, прокомментируйте пожалуйста одну из лучших 32-байтных демок: Dirojed.
Хотелось бы поковырять и поизменять программу, но с ассемблером не знаком. Ваши комментарии мне сильно помогут!

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
; Dirojed 32b
; 32 byte intro
; original by T$, optimized 52->32 by Rrrola <rrrola@gmail.com>
; Greets to every x86 coder!
 
S equ 0E5h        ; like original
; S equ 0B1h        ; vertical "scouts"
 
org 100h          ; assumes: ah=0 bx=0 cl>0 di=0FFFEh si=0100h
 
mov  al,13h       ; (2)
int  10h          ; (2)
lds  bx,[bx]      ; (2) bx=20CDh ds=9FFFh
M:
cmp  [bx],cl      ; (2)
adc  [bx],ah      ; (2) if ([bx] < cl) [bx]++ (first pass increases)
imul bx,byte S    ; (3) pseudorandom generator: bx = S*bx-1 (works if S%4==1)
mov  cl,[bx]      ; (2) we don't decrease bx yet
add  cl,[bx+di]   ; (2)
add  cl,[bx-321]  ; (4)
add  cl,[bx+si+63]; (3) cl = ([bx+1]+[bx-1]+[bx-320]+[bx+320]) & 0FFh
dec  bx           ; (1)
 
in   al,60h       ; (2) standard ESC check
dec  al           ; (2)
jnz  M            ; (2)
ret               ; (1)
Заранее спасибо.
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.10.2010, 21:45
Ответы с готовыми решениями:

Поясните код
Здравствуйте. У меня есть программа. Мне нужно ее разъяснить преподавателю, но я ее не сам писал. Поясните пожалуйста поподробнее, что тут...

Поясните код
Прошу пояснить, видимо что то я не так понимаю. i=-3; j=2; k=0; m = ++i ? j++ : ++k; printf(&quot;%d, %d, %d,...

Поясните код
double **a = new double *;

5
2014 / 1286 / 61
Регистрация: 05.06.2010
Сообщений: 2,213
06.10.2010, 09:30
круто! а укажи источник если не жалко? Собственно комментировать особо нечего - там и так все прокомментировано, некоторые уточнения:
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
S equ 0E5h        ; like original
; S equ 0B1h        ; vertical "scouts"
 
org 100h          ; assumes: ah=0 bx=0 cl>0 di=0FFFEh si=0100h
 
mov  al,13h       ; (2)
int  10h          ; (2) установка режима vga (320х200 256 цветов)
; этот режим всегда использовался для игр, хорош тем что не надо выстовлять никакие цветовые плоскости - 
; в видеобуфер прямо пишется цвет пикселя.
lds  bx,[bx]      ; (2) bx=20CDh ds=9FFFh
; очень ловко устанавливается указатель ds:[bx] на адрес видеобуфера со смещением 0x20cd.
M:
cmp  [bx],cl      ; (2) устанавливает флаги
adc  [bx],ah      ; (2) if ([bx] < cl) [bx]++ (first pass increases)
imul bx,byte S    ; (3) pseudorandom generator: bx = S*bx-1 (works if S%4==1)
mov  cl,[bx]      ; (2) we don't decrease bx yet
add  cl,[bx+di]   ; (2)
add  cl,[bx-321]  ; (4)
add  cl,[bx+si+63]; (3) cl = ([bx+1]+[bx-1]+[bx-320]+[bx+320]) & 0FFh
; bx-1, bx+1 - точки влево, вправо; bx-320, bx+320 - вверх вниз
dec  bx           ; (1)
 
in   al,60h       ; (2) standard ESC check
; читаем из порта клавиатуры - скан-код клавиши esc - 1
dec  al           ; (2)
jnz  M            ; (2)
ret
я правда так и не понял почему рисуется не один круг а несколько
2
233 / 95 / 15
Регистрация: 31.12.2009
Сообщений: 224
06.10.2010, 14:50
Давно я с asm'ом не сталкивался.
Чуток добавлю:
org 100h выставляет смещение точки входа, т.е. резервирует память для DOSовского блока. Такой код нужен только для программ, слинкованных как *.COM, т.к. в них только 1 сегмент - сегмент кода, в нём всё и хранится.

А несколько раз отрисовывается потому, что в цикле стоит проверка на клавишу esc, т.е. если я правильно понял, пока не нажата esc, крутимся в цикле
1
2014 / 1286 / 61
Регистрация: 05.06.2010
Сообщений: 2,213
06.10.2010, 15:45
несколько кругов рисуется одновременно - расходятся из нескольких центров.
Цитата Сообщение от Чёрный Медведь Посмотреть сообщение
org 100h выставляет смещение точки входа, т.е. резервирует память для DOSовского блока
резервируется память под psp. Первые 2 байта cd 20 - опкод команды int 20h для корректного завершения (если программа завершается командой ret - она передает управление на адрес 0 - т.е на начало psp)
lds bx,[bx] - загружает в bx 20cdh в ds 0FFFEh - следующие 2 байта psp. Сегментный адрес видеобуфера 0A000h и он линейный(видеобуфер). отсюда легко посчитать центр первого круга. Откуда берутся остальные я так и не понял

Добавлено через 45 минут
остальные круги какие то артефакты, вызванные тем что в этом режиме всего одна видеостраница. Я переделал так что круг расплывается из центра и он стал один, как положено
0
21 / 20 / 3
Регистрация: 21.06.2010
Сообщений: 80
06.10.2010, 23:41  [ТС]
Спасибо за комментарии!

Цитата Сообщение от vital792 Посмотреть сообщение
круто! а укажи источник если не жалко?
pouet.net
scene.org
2
2014 / 1286 / 61
Регистрация: 05.06.2010
Сообщений: 2,213
07.10.2010, 10:01
да клеточные автоматы и фракталы рулят! всего то 32 байта, но в них оказывается довольно сложное дифференциальное уравнение, которое приводится к конечноразностному. И че еще интересно отладчик по команде adc [bx],ah ниче не показывает хотя должен прибавлять перенос если установлен флаг cf
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.10.2010, 10:01
Помогаю со студенческими работами здесь

Поясните код
Наткнулся на http://brain-sharper.blogspot.ru/2012/03/httplistener.html Ответьте пожалуйста на вопросы в коде. string url =...

Поясните код
Скачал исходник змейки, сейчас пытаюсь разобраться в коде Вот сам код : #include &lt;iostream&gt; //стандартная библиотека ...

Поясните код
Приветствую вас форумчане, недавно начала работать с хаскелем имеются две следующие функции если не сложно, то объясните построчно. ...

Поясните код
.section .data var: .long 555 frmt: .ascii &quot;%d\n&quot; . section .text .global main main:

Поясните код
поясните пожалуйста этот код void HandleAsyncMsg(HWND hwnd, WPARAM wParam, LPARAM lParam) { int nErrorCode =...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru