· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.WIN32 —› Основные конструкции

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


Дата: Янв 23, 2003 13:18:49

Привет всем.
Я только начинаю изучать ассемблер и мне очень помогло бы, усли бы были аналоги из языков высокого уровня. Не подскажет кто, где можно найти перевод таких конструкций как for, if, while на ассемблер.
Заранее спасибо.


Дата: Янв 23, 2003 14:32:11

cmp ;)

А если серьезно, то можно компилить проги на языках высокого уровня (здесь - VC6) и смотреть, как компилятор все это сделал. И понимать, почему так делать не надо.

Пример. Пусть есть код на C.

[QUOTE]
int i;

for (i=0;i<10;i++)
{
printf("i=%u ! \n",i);
}
[/QUOTE]

Вот результат от компиллятора:

[QUOTE]
16: for (i=0;i<10;i++)
00401028 C7 45 F8 00 00 00 00 mov dword ptr [ebp-8],0
0040102F EB 09 jmp main+2Ah (0040103a)
00401031 8B 45 F8 mov eax,dword ptr [ebp-8]
00401034 83 C0 01 add eax,1
00401037 89 45 F8 mov dword ptr [ebp-8],eax
0040103A 83 7D F8 0A cmp dword ptr [ebp-8],0Ah
0040103E 7D 13 jge main+43h (00401053)
17: {
18: printf("i=%u ! \n",i);
00401040 8B 4D F8 mov ecx,dword ptr [ebp-8]
00401043 51 push ecx
00401044 68 38 00 42 00 push offset string "i=%u ! \n" (00420038)
00401049 E8 32 04 00 00 call printf (00401480)
0040104E 83 C4 08 add esp,8
19: }
00401051 EB DE jmp main+21h (00401031)
20:
[/QUOTE]


Дата: Янв 23, 2003 23:40:14

You demonstrated un-optimized code, he-he!

This code:
--------------------------------------
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
_asm int 3
TCHAR* pstr;
for (int i=0; i<10; i++) {
pstr = GetCommandLine ();
}
return 0;
}

When optimized it looks like that:
--------------------------------------
00401003 CC int 3
00401004 8B 3D 4C 50 40 00 mov edi,dword ptr ds:[40504Ch]
0040100A BE 0A 00 00 00 mov esi,0Ah
0040100F FF D7 call edi
00401011 4E dec esi
00401012 75 FB jne 0040100F
00401014 5F pop edi
00401015 33 C0 xor eax,eax
00401017 5E pop esi
00401018 C2 10 00 ret 10h

-----------------------------
CALL EDI !!! Holy sh#t!


Дата: Янв 24, 2003 04:32:24

[offtopic]
AsmGuru62
You have demonstrated optimized, but meaningless code. ;)
[/offtopic]


Дата: Янв 24, 2003 16:12:11

All
Зачем эти аналогии?
Всё намного интереснее...
Это на С у вас там for if while, а на асме всё очень просто и широко одновременно:

1. Есть флажки. FLAGS
2. Есть команды, которые умеют устанавливать эти флажки.
3. Есть команды перехода, которые умеют выполнять переход в зависимости от состояния этих флажков.

Вот и нет предела фантазии.

Вот любой IF -- это:

{команды, которые ставать/сбрасывают флажки в зависимости от
операндов, их значний}
+
{команда перехода, которая реагирует на состояние этих флажков}

P.S
Если учите асм, забывайте про С :))))


Дата: Янв 24, 2003 18:19:37

В MASM32 есть .IF .WHILE .REPEAT и для логики кое-что есть.


Дата: Янв 25, 2003 03:11:40

ПОЛНОСТЬЮ СОГЛАСЕН С Edmond'ом.

ИЛИ ASM ИЛИ NOTHING!!!

Myst.


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