Assembler: что выполняет ета процедура ?
mov ebp,esp
push esi
mov esi,4[ebp]
mov eax,[esi]
add eax,4[esi]
add esi,8
mov 4[ebp],esi
pop esi
pop ebp
ret
и как ее можно назвать?
зарание спасибо за ответ.
mov ebp,esp
push esi
mov esi,4[ebp]
mov eax,[esi]
add eax,4[esi]
add esi,8
mov 4[ebp],esi
pop esi
pop ebp
ret
и как ее можно назвать?
зарание спасибо за ответ.
Запихивает в стек ebp, esi. Проводит какиет-то исчисления (к чему они? необходимо знать что сама процедура хоть приблизительно должна делать), а потом восстанавливает значения ebp, esi из стека.
Попробую вспомнить интерфейс с ассемблером ;)
mov ebp,esp ; Вроде как, организация стекового кадра.
push esi
mov esi,4[ebp]
mov eax,[esi] ; получить первый, переданный в функцию аргумент
add eax,4[esi] ; сложить его со вторым переданным аргументом
add esi,8
mov 4[ebp],esi ; вот тут не понял - зачем это. Адрес возврата???
pop esi
pop ebp
ret ; восстановление стека и возврат из функции
Очевидно, это функция сложения двух целочисленных значений.
Вызов этой функции из языка высокого уровня (например: С), может выглядеть вот так:
...
int r, x = 5, y = 10;
r = add( 5, 10 ); // собственно, вызов функции
P.S. МОГУ ОШИБАТЬСЯ! Долго уже к этой теме не обращался. Кстати, и выражение extern "C" может быть другим!
mov ebp,esp
push esi
mov esi,4[ebp] ;грузит в esi адрес возврата
mov eax,[esi] ;грузит в eax 4 байта по адресу возврата
add eax,4[esi] ;добавляет к eax 4 байта по адресу возврата + 4
add esi,8
mov 4[ebp],esi ;сдвигает адрес возврата на 8 байт в
;сторону старших адресов
pop esi
pop ebp
ret
Не исключено, что я ошибаюсь, но данная функция (именно в том виде, в каком её выложил автор, упадёт.
Всё зависит от вызывающего кода.
во вторых ета процедура точно чтото делает.
дело в том что у етой процедуры есть смысл.
вопрос заключается в названии .
лично я склонен к варианту "сложения двух целочисленных значений".
Просто я, по скудоумию, не усмотрел что юзается адрес возврата вместо аргумента.
Объясню:
mov ebp,esp
после этого, [EBP] = старое значение EBP, а [EBP+4] = адрес возврата
как уже сказано - грузит в ESI адрес возврата. А зачем... ладно тут еще можно что-нибудь придумать... далее
а тут что делается? загружается в eax значение из ячейки по адресу, равному коду инструкции (так как в ESI адрес возврата). и что? зачем? что это?
add esi,8
mov 4[ebp],esi
а тут уже вообще ничего не понятно.
add eax, 4[esi] - что тут? по адресу, равному коду инструкции еще и структура?!, да нифига себе!
Короче, тут явно ошибка!!!
Объясню:
после этого, [EBP] = старое значение EBP, а [EBP+4] = адрес возврата
как уже сказано - грузит в ESI адрес возврата. А зачем... ладно тут еще можно что-нибудь придумать... далее
а тут что делается? загружается в eax значение из ячейки по адресу, равному коду инструкции (так как в ESI адрес возврата). и что? зачем? что это?
а тут уже вообще ничего не понятно.
add eax, 4[esi] - что тут? по адресу, равному коду инструкции еще и структура?!, да нифига себе!
Короче, тут явно ошибка!!!
Ето совсем не утешает :)
код точно етот я перепроверил.
в вапросах такого формата ответ типа, код полная лажа не примут.
а завтра мне здавать :(
огромное спасибо за дискуссию.