Yason , виндовые цвета, в частности вот эти:
ClBlack:=$000000; ClLime=$00FF00; ClBlue=$FF0000; СlRed=$0000FF;
надо преобразовать в КОС цвета
т. е. на переставить в DWORDе котрый PutPixel_color, байты, первый и третий !?... вроде так?!... хотя я уже сам сомневаюсь делая пробы и испытания... что-то не получается у меня добится соответствия того что мне нужно
Вопрос
Yason и другие участники форума, пока всё! Спасибо! Разобрался что к чему!
Ужос то какой...
Если в регистре, то
bswap eax
ror eax, 8
Если в памяти, то
mov al, [pointer]
xchg [pointer+2], al
mov [pointer], al
Если в регистре, то
bswap eax
ror eax, 8
Если в памяти, то
mov al, [pointer]
xchg [pointer+2], al
mov [pointer], al
[quote="Pathoswithin"]Ужос то какой...
Если в регистре, то
bswap eax
ror eax, 8
Если в памяти, то
mov al, [pointer]
xchg [pointer+2], al
mov [pointer], al[/quote]
Во-первых, я не мастер оптимизаций. Во-вторых оптимизировать налету, не умею. Во-вторых, последним постом, я оптимизировал по скорости, пому как, предпочитаю скорость.
mov eax, dword [pixel_color1]
rol eax, 8
mov [pixel_color2], dword eax
Два обращения к памяти будут работать быстрее, чем твои 3. Но спорить не собираюсь - каждый пишет, кому как нравится.
Если в регистре, то
bswap eax
ror eax, 8
Если в памяти, то
mov al, [pointer]
xchg [pointer+2], al
mov [pointer], al[/quote]
Во-первых, я не мастер оптимизаций. Во-вторых оптимизировать налету, не умею. Во-вторых, последним постом, я оптимизировал по скорости, пому как, предпочитаю скорость.
mov eax, dword [pixel_color1]
rol eax, 8
mov [pixel_color2], dword eax
Два обращения к памяти будут работать быстрее, чем твои 3. Но спорить не собираюсь - каждый пишет, кому как нравится.
И кто, как умеет.
Твой последний вообще не правильный, получится 4,1,2,3.
Тогда уж будет
mov eax, [pixel_color1]
bswap eax
ror eax, 8
mov [pixel_color2], eax
Тогда уж будет
mov eax, [pixel_color1]
bswap eax
ror eax, 8
mov [pixel_color2], eax
Или
mov eax, [pixel_color1]
rol eax, 8
bswap eax
mov [pixel_color2], eax
mov eax, [pixel_color1]
rol eax, 8
bswap eax
mov [pixel_color2], eax
Так я в начале так и писал, только не оптимизировал. И ещё писал, что непомню где альфа канал распологается, и напмсал код в соответствии со своим предположением.
Если б, знал бы точно, где альфа конал находится (так как не помню, а выяснять бало лень), написал бы правильно. Я ALEXS1983 просто набор команд дал, которыми можно оперировать, а там пусть сам решает, что ему лучше.
Ребята не спорьте! Я уже решил ту проблему!... и уже отписал об этом!
Прошу помощи!
Вот процедура которая инициализирует таблицу адресами процедур для Case of , точнее говоря вырезка из таблицы
;Инициализация таблицы Case of
;= Таблица Case of
adrs rd 256
init_table_in_case_opcode:
mov[adrs+(4*0)],C00
.........................
.........................
mov[adrs+(4*11)],C0B
.........................
.........................
mov[adrs+(4*29)],C1D
mov[adrs+(4*30)],C1E
mov[adrs+(4*40)],C28
.........................
.........................
mov[adrs+(4*41)],C29
mov[adrs+(4*42)],C2A
mov[adrs+(4*253)],CFD
mov[adrs+(4*254)],CFE
mov[adrs+(4*255)],CFF
ret
;/конец = Таблица Case of
Вот процедура вызывающая соответствующую процедуру в зависимости от значения opcode.
(Каждая вызываемая процедура из таблицы заканчивается pop ebx ret)
i8080_do_opcodes_case_opcode_of:
push ebx
mov ebx,eax
mov eax,[opcode]
jmp dword [eax*4+adrs]
Правильно ли это реализовано ?
Вот процедура которая инициализирует таблицу адресами процедур для Case of , точнее говоря вырезка из таблицы
;Инициализация таблицы Case of
;= Таблица Case of
adrs rd 256
init_table_in_case_opcode:
mov[adrs+(4*0)],C00
.........................
.........................
mov[adrs+(4*11)],C0B
.........................
.........................
mov[adrs+(4*29)],C1D
mov[adrs+(4*30)],C1E
mov[adrs+(4*40)],C28
.........................
.........................
mov[adrs+(4*41)],C29
mov[adrs+(4*42)],C2A
mov[adrs+(4*253)],CFD
mov[adrs+(4*254)],CFE
mov[adrs+(4*255)],CFF
ret
;/конец = Таблица Case of
Вот процедура вызывающая соответствующую процедуру в зависимости от значения opcode.
(Каждая вызываемая процедура из таблицы заканчивается pop ebx ret)
i8080_do_opcodes_case_opcode_of:
push ebx
mov ebx,eax
mov eax,[opcode]
jmp dword [eax*4+adrs]
Правильно ли это реализовано ?
Хочу дебагить свою программу. как значение регистра выводить в форму ?
Допустим нужно реализовать вот такое:
1. ВРЕМЯ=0
2. выполнить процедуру
3. пока ВРЕМЯ<=20/1000 секунды — отдавать ресурсы другим приложения ну или пустой цикл, иначе идём дальше п.4.
4............
КАКУЮ ПРОЦЕДУРУ ИСПОЛЬЗОВАТЬ ДЛЯ РЕАЛИЗАЦИЯ ТАКОГО ?
Проблема в том что в Функция 5 (пауза) там есть миллисекунды, но это не совсем то, что нужно. А в Функция 3 (получить системное время) нет миллисекунд.
Чего я не знаю ? Что я не понимаю ?
1. ВРЕМЯ=0
2. выполнить процедуру
3. пока ВРЕМЯ<=20/1000 секунды — отдавать ресурсы другим приложения ну или пустой цикл, иначе идём дальше п.4.
4............
КАКУЮ ПРОЦЕДУРУ ИСПОЛЬЗОВАТЬ ДЛЯ РЕАЛИЗАЦИЯ ТАКОГО ?
Проблема в том что в Функция 5 (пауза) там есть миллисекунды, но это не совсем то, что нужно. А в Функция 3 (получить системное время) нет миллисекунд.
Чего я не знаю ? Что я не понимаю ?
Есть ещё функция 26.9
А вот кто мне скажет, разъяснит, что это за тема такая пошла, что пишется
"
GSoC students, march 25 is a deadline for submitting final proposals.
Note: because of students' traditions in time management, GSoC site might fall on the last day and be unavailable. Beware and hurry!
"
Что это вообще такое с чем его едят ? :-) Акция какая-то ? Да и в чате чего-то там об этом пишется....
Где об этом можно почитать на РУССКОМ языке ?
"
GSoC students, march 25 is a deadline for submitting final proposals.
Note: because of students' traditions in time management, GSoC site might fall on the last day and be unavailable. Beware and hurry!
"
Что это вообще такое с чем его едят ? :-) Акция какая-то ? Да и в чате чего-то там об этом пишется....
Где об этом можно почитать на РУССКОМ языке ?
Who is online
Users browsing this forum: No registered users and 5 guests