- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 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
format pe gui 5.0
include 'win32ax.inc'
_title db '1Kbyte window',0
_class db '#32770',0
old_wndproc dd 0
entry $
xor edi,edi
mov ecx,$80000000
mov esi,$400000
mov eax,WS_VISIBLE+WS_OVERLAPPEDWINDOW
invoke CreateWindowEx,edi,_class,edi,eax,ecx,ecx,ecx,ecx,edi,edi,edi,edi
mov ebx,eax
invoke SetWindowLong,ebx,GWL_WNDPROC,wnd_proc
mov [old_wndproc],eax
invoke SendMessage,ebx,WM_INITDIALOG,edi,edi
sub esp,32
mov ebx,esp
msg_loop:
invoke GetMessage,ebx,edi,edi,edi
cmp eax,1
jb app_exit
jne msg_loop
invoke DispatchMessage,ebx
jmp msg_loop
wnd_proc:
mov eax,[esp+8]
cmp eax,WM_INITDIALOG
je app_init
cmp eax,WM_CLOSE
je app_exit
pop eax
push [old_wndproc]
push eax
jmp [CallWindowProc]
app_init:
mov eax,[esp+4]
invoke SendMessage,eax,WM_SETTEXT,0,_title
xor eax,eax
ret
app_exit:
invoke ExitProcess,edi
data import
library\
kernel32,'kernel32.dll',\
user32,'user32.dll'
include 'api\kernel32.inc'
include 'api\user32.inc'
end data
http://board.flatassembler.net/topic.php?t=5909&view=next
особенно на этой фотке http://x86asm.net/fasmparty/krakow_sunday_3.jpg
Хм. Регистр-счётчик используется не по назначению:
mov ecx,$80000000
ebx ведь нужен?
Выполняется почти как nop + retn, но только считается одной инструкцией, а не двумя.
Этой глючной реализации посвятили целый сайт:
http://repzret.org/p/repzret/
В 8080 никаких предикторов не было, именно поэтому я за 8080.
О, сколько нам открытий чудных
Приносит «Микрософта» дух
И «Интел» –— сын ошибок трудных,
И «Борланд» —– «Парадоксов» друг.
А мне нравится обкладывать код воркэраундами и дрочить...
http://www.cs.cmu.edu/~ralf/interrupt-list/
Если просто хочешь узнать на испытательном стенде, сколько тактов прошло, то ты это можешь узнать через RDTSC. Правда, я не знаю, что RDTSC покажет в многозадачной среде.
Или тебя интересует, как узнать то, от чего это зависит (наличие говна в кэше и т. п.)?
Invoke используется для удобства. Раз человек заюзал его - значит, ему важно именно удобство, а не минимализм. Если нужен минимум кода - пушайте.
ASM получим на выхлопе 20 байт
use32
push $80000000;68 00 00 00 80
push $80000000;68 00 00 00 80
push $80000000;68 00 00 00 80
push $80000000;68 00 00 00 80
ASM получим 11 байт
mov ecx,$80000000;B9 00 00 00 80
push ecx;51
push ecx;51
push ecx;51
push ecx;51
Семь раз отмерь — один отрежь, chiacorp!
use32;8 байт
push 0;6A 00
push 0;6A 00
push 0;6A 00
push 0;6A 00
use32;6 байт
xor edi,edi;31 FF
push edi;57
push edi;57
push edi;57
push edi;57
Чем больше push 0 тем лучше, а invoke что поставим то и пульнёт)
Хм, так в винапи можно просто заменять обработчик событий и не регать новый класс...
Чем ниже тем интересней!
А интересно есть ниже XLIB возможность?
Ниже работа через протокол TCP/IP. Верно?
С микротиком так извращался)
СПС нужная инфа.
Написали бинарный, то и закинули бы бинарный)))
Помни, ASD_77, за тобой могут следить!