· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› СТРОКИ

<< . 1 . 2 .

Посл.отвђт Сообщенiе


Дата: Янв 15, 2004 16:20:57

Edmond
В описании блока предсказания переходов для Pentium-ов
говорится, что безусловный переход (jmp) считается, как
выполняемый и кэш предвыборки команд заполняется, начиная
с адреса перехода. Тоже самое и для условного перехода вверх. Если выполняется неверно предсказанная ветвь - условный переход вниз, то процессор сбрасывает очередь
предвыборки и заполняет ее заново. Потеря ~20 тактов.
Говоря С-ишным языком, наиболее вероятная ветвь
должна лежать между if и else.
А что касается приведенного тобой кода, то все зависит от
того, где расположены метки exit и code.


Дата: Янв 15, 2004 16:42:49

sd2000
Я хочу заметить, что это верно для Пентиум, а не для PII/PPro


Дата: Янв 15, 2004 16:59:48

Я посмотрю.


Дата: Янв 15, 2004 18:28:14

Copy2CB proc pszStr:DWORD,hWnd:HWND

 LOCAL dwStrLen:DWORD
 LOCAL hMemm:DWORD
 LOCAL pMemm:DWORD

 invoke lstrlen,pszStr ; посчитаем длину нашей строки
 mov dwStrLen,eax
 inc dwStrLen ; нужно учесть завершающий ноль... кажется нужно :)
 invoke GlobalAlloc,GMEM_MOVEABLE,dwStrLen	; выделим память
 mov hMemm,eax
 invoke GlobalLock,hMemm ; заблокируем и получим на нее указатель
 mov pMemm,eax
 invoke lstrcpy,pMemm,pszStr ; скопируем в эту память нашу строку
 invoke GlobalUnlock,hMemm   ; разблокируем нашу память
 invoke OpenClipboard,hWnd   ; откроем Клипбоард
 invoke EmptyClipboard       ; почистим его
 invoke SetClipboardData,CF_TEXT,hMemm	; установим нашу строку
 invoke CloseClipboard       ; закроем Клипбоард
 ; --- Нельзя! --- invoke GlobalFree,hMemm     ; освободим память, любезно 
                             ; предоставленную нам Windows :)
 ret
Copy2CB endp


Дата: Янв 15, 2004 18:57:52

[ Edmond: test eax,eax
jnz --> code
jmp --> exit
]

А где ты такое увидел?
Мой исходник будет ассемблирован в такой код:
00401000  /$ 55             PUSH EBP
00401001  |. 8BEC           MOV EBP,ESP
00401003  |. 83C4 EC        ADD ESP,-14
00401006  |. 8365 EC 00     AND DWORD PTR SS:[EBP-14],0
0040100A  |. 6A 01          PUSH 1                                   ; /Format = CF_TEXT
0040100C  |. FF15 2C204000  CALL DWORD PTR DS:[<&user32.IsClipboardF>; \IsClipboardFormatAvailable
00401012  |. 0BC0           OR EAX,EAX
00401014  |. 0F84 95000000  JE CLIPBO~1.004010AF
0040101A  |. 6A 00          PUSH 0                                   ; /hWnd = NULL
0040101C  |. FF15 24204000  CALL DWORD PTR DS:[<&user32.OpenClipboar>; \OpenClipboard
00401022  |. 0BC0           OR EAX,EAX
00401024  |. 0F84 85000000  JE CLIPBO~1.004010AF
0040102A  |. 6A 01          PUSH 1                                   ; /Format = CF_TEXT
0040102C  |. FF15 30204000  CALL DWORD PTR DS:[<&user32.GetClipboard>; \GetClipboardData
00401032  |. 0BC0           OR EAX,EAX
00401034  |. 74 71          JE SHORT CLIPBO~1.004010A7
00401036  |. 8945 FC        MOV DWORD PTR SS:[EBP-4],EAX
00401039  |. FF75 FC        PUSH DWORD PTR SS:[EBP-4]                ; /hMem
0040103C  |. FF15 10204000  CALL DWORD PTR DS:[<&kernel32.GlobalSize>; \GlobalSize
00401042  |. 0BC0           OR EAX,EAX
00401044  |. 74 61          JE SHORT CLIPBO~1.004010A7
00401046  |. 8945 F8        MOV DWORD PTR SS:[EBP-8],EAX
00401049  |. FF15 18204000  CALL DWORD PTR DS:[<&kernel32.GetProcess>; [GetProcessHeap
0040104F  |. 0BC0           OR EAX,EAX
00401051  |. 74 54          JE SHORT CLIPBO~1.004010A7
00401053  |. FF75 F8        PUSH DWORD PTR SS:[EBP-8]                ; /HeapSize
00401056  |. 6A 08          PUSH 8                                   ; |Flags = HEAP_ZERO_MEMORY
00401058  |. 50             PUSH EAX                                 ; |hHeap
00401059  |. FF15 08204000  CALL DWORD PTR DS:[<&kernel32.HeapAlloc>>; \HeapAlloc
0040105F  |. 0BC0           OR EAX,EAX
00401061  |. 74 44          JE SHORT CLIPBO~1.004010A7
00401063  |. 8945 F4        MOV DWORD PTR SS:[EBP-C],EAX
00401066  |. FF75 FC        PUSH DWORD PTR SS:[EBP-4]                ; /hMem
00401069  |. FF15 14204000  CALL DWORD PTR DS:[<&kernel32.GlobalLock>; \GlobalLock
0040106F  |. 0BC0           OR EAX,EAX
00401071  |. 74 34          JE SHORT CLIPBO~1.004010A7
00401073  |. 8945 F0        MOV DWORD PTR SS:[EBP-10],EAX
00401076  |. FF75 F0        PUSH DWORD PTR SS:[EBP-10]               ; /String2
00401079  |. FF75 F4        PUSH DWORD PTR SS:[EBP-C]                ; |String1
0040107C  |. FF15 04204000  CALL DWORD PTR DS:[<&kernel32.lstrcpyA>] ; \lstrcpyA
00401082  |. 0BC0           OR EAX,EAX
00401084  |. 74 03          JE SHORT CLIPBO~1.00401089
00401086  |. FF45 EC        INC DWORD PTR SS:[EBP-14]
00401089  |> FF75 FC        PUSH DWORD PTR SS:[EBP-4]                ; /hMem
0040108C  |. FF15 0C204000  CALL DWORD PTR DS:[<&kernel32.GlobalUnlo>; \GlobalUnlock
00401092  |. FF15 38204000  CALL DWORD PTR DS:[<&user32.CloseClipboa>; [CloseClipboard
00401098  |. 837D EC 01     CMP DWORD PTR SS:[EBP-14],1
0040109C  |. 75 05          JNZ SHORT CLIPBO~1.004010A3
0040109E  |. 8B45 F4        MOV EAX,DWORD PTR SS:[EBP-C]
004010A1  |. C9             LEAVE
004010A2  |. C3             RETN
004010A3  |> 33C0           XOR EAX,EAX
004010A5  |. C9             LEAVE
004010A6  |. C3             RETN
004010A7  |> FF15 38204000  CALL DWORD PTR DS:[<&user32.CloseClipboa>; [CloseClipboard
004010AD  |. 33C0           XOR EAX,EAX
004010AF  |> C9             LEAVE
004010B0  \. C3             RETN


[ S_T_A_S_: .if eax != 0 - а зачем здесь лишние символы "!= 0" ? ;)]

Для наглядности ;-)

<< . 1 . 2 .


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.059