![]() |
|
|
![]()
|
|
| pmy |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 2.10.2006 Репутация: нет Всего: нет |
У меня вопросец.
Есть ООП программа на Паскале. Есть объект, имеющий внешний метод. Этот метод написан на Ассемблере. Помогите разобраться, что делает эта прога. Вот текст программы на Паскале: program lab1; type myObject=object Age: word; constructor Init; function GetAge:word; end; {$L d:\metod.obj} constructor myObject.Init; begin Age:=25; end; function myObject.GetAge:word;external; var Object1: myObject; w:word; begin Object1.Init; w:=Object1.GetAge; WriteLn(w); readln; end. Вот метод, написанный на ассемблере: .model TPASCAL public myObject@GetAge .code myObject@GetAge proc arg self:dword push ds les di,self mov ax,word ptr es:[di] pop ds ret myObject@GetAge endp END Объясните пожалуйста код, написанный на ассемблере. |
|||
|
||||
| Sartorius |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1568 Регистрация: 18.7.2006 Где: Ivory tower Репутация: нет Всего: 37 |
Выводит Age
GetAge - возвращает Age
|
|||
|
||||
| dumb |
|
||||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 7 Всего: 158 |
при вызове метода первым параметром на стек кладется указатель на объект(self).
т.е. вызов
в дизассемблере будет выглядеть примерно так:
в функции myObject.GetAge в пару es:di загружается указатель на Object1. и затем, закладываясь на компилятор и хранение объектов в памяти(Age в объекте объявлен первым и в памяти будет храниться в первом слове данных, отведенных под хранение Object1), происходит вычитывание Age в ax. ps. push ds, pop ds в данном случае лишние. |
||||
|
|||||
| pmy |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 2.10.2006 Репутация: нет Всего: нет |
Спасибо! Но если не сложно, можно построчно объяснить ассемблеровскую прогу?
|
|||
|
||||
| Sartorius |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1568 Регистрация: 18.7.2006 Где: Ivory tower Репутация: нет Всего: 37 |
|
|||
|
||||
![]()
|
| Правила форума "Asm для начинающих" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Asm для начинающих | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |