Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.08.2012, 20:30   #1
lawliet93
Форумчанин
 
Регистрация: 30.08.2011
Сообщений: 102
По умолчанию Цикл for

Здравствуйте. Прошу проверить, правильно ли я прокомментировал строки следующего кода. Спасибо!
Код HTML:
for (int i = 3; i < 10; i++)
0000003c  mov         dword ptr [ebp-40h],3 // заносим 3 в регистр dword ptr [ebp-40h],
00000043  nop 
00000044  jmp         00000054 // прыгаем в адрес  00000054
    14:             {
00000046  nop 
    15:                 Console.WriteLine(i);
00000047  mov         ecx,dword ptr [ebp-40h]  //
0000004a  call        5E865094  //
0000004f  nop 
    16:             }
00000050  nop 
    13:             for (int i = 3; i < 10; i++)
00000051  inc         dword ptr [ebp-40h] //  увеличиваем на единицу значение регистра dword ptr [ebp-40h]
00000054  cmp         dword ptr [ebp-40h],0Ah // вычетаем  dword ptr [ebp-40h]  - 10
00000058  setl        al // если dword ptr [ebp-40h] меньше или равно 10, то al = 1
0000005b  movzx       eax,al // если dword ptr [ebp-40h] = 10, то переписываем a1 в eax   начиная с меньших разрядов, пустые, старшые разряды заполняем нулями.
0000005e  mov         dword ptr [ebp-44h],eax // заносим значение регистра eax в  dword ptr [ebp-44h]
00000061  cmp         dword ptr [ebp-44h],0 // вычетаем  dword ptr [ebp-44h]  - 0
00000065  jne         00000046 //  переход на адрес 00000046 если dword ptr [ebp-44h] не равно нулю
    17:             Console.ReadLine();
00000067  call        5E864F64  // вызываем функцию по адресу 5E864F64 если dword ptr [ebp-44h] равно 0
0000006c  nop 
    18:          
    19:  
    20:         }
lawliet93 вне форума Ответить с цитированием
Старый 17.08.2012, 20:45   #2
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Цитата:
заносим 3 в регистр dword ptr [ebp-40h]
Регистр?
Цитата:
вычетаем dword ptr [ebp-40h] - 10
Вообще если знак "-", то тогда "вычисляем". Или "вычитаем 10 из dword ptr..." Да и вообще, хотя это технически и вычитание, мне кажется, лучше называть сравнением - так понятнее.
Цитата:
если dword ptr [ebp-40h] меньше или равно 10, то al = 1
Просто меньше.
Цитата:
movzx eax,al // если dword ptr [ebp-40h] = 10, то переписываем a1 в eax
Условия нет, выаолняется в любом случае.
Somebody вне форума Ответить с цитированием
Старый 17.08.2012, 21:19   #3
lawliet93
Форумчанин
 
Регистрация: 30.08.2011
Сообщений: 102
По умолчанию

Цитата:
Сообщение от Somebody Посмотреть сообщение
Регистр?

Вообще если знак "-", то тогда "вычисляем". Или "вычитаем 10 из dword ptr..." Да и вообще, хотя это технически и вычитание, мне кажется, лучше называть сравнением - так понятнее.

Просто меньше.

Условия нет, выаолняется в любом случае.
Большое спасибо! =) И если dword ptr [ebp-40h] не регистр, то что?
lawliet93 вне форума Ответить с цитированием
Старый 17.08.2012, 21:41   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
И если dword ptr [ebp-40h] не регистр, то что?
Как минимум раз в квадратных скобках, то уже по адресу такому-то.

Тут:
ebp используется на 32битках для организации стека функций, соответственно ebp-40h это адрес одной из локальных переменных
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Цикл oban11 Помощь студентам 2 24.10.2010 13:25
Цикл по времени - Как сделать так чтобы цикл выполнялся к примеру 10 секунд ? Anarki Общие вопросы C/C++ 3 13.11.2009 19:23
Цикл с предусловием. ( цикл while) Цикл с постусловием. (цикл repeat ... until) Mr.User Помощь студентам 9 23.11.2007 01:34