Форум программистов, компьютерный форум, киберфорум
Assembler: Windows/protected mode
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/16: Рейтинг темы: голосов - 16, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 11.04.2009
Сообщений: 5

Не могу понять код.

11.04.2009, 14:29. Показов 3213. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребята, помогите разобраться с кодом, с Ассемблером нет практики общения.
Есть функция, если кто может, прокомментируйте расчет пожалуйста, не весь код, но основные правила расчета и условия перехода.

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
int __stdcall Recalc(int, double, double, int, int, double)
 
 var_4C          = byte ptr -4Ch
 var_C           = dword ptr -0Ch
 var_8           = qword ptr -8
 arg_0           = dword ptr  8
 arg_4           = qword ptr  0Ch
 arg_C           = qword ptr  14h
 arg_14          = dword ptr  1Ch
 arg_18          = dword ptr  20h
 arg_1C          = qword ptr  24h
 
                 push    ebp
                 mov     ebp, esp
                 sub     esp, 4Ch
                 push    ebx
                 push    esi
                 push    edi
                 lea     edi, [ebp+var_4C]
                 mov     ecx, 13h
                 mov     eax, 0CCCCCCCCh
                 rep stosd
                 mov     eax, [ebp+arg_14]
                 mov     dword ptr [ebp+var_8], eax
                 mov     ecx, [ebp+arg_18]
                 mov     dword ptr [ebp+var_8+4], ecx
                 mov     [ebp+var_C], 0
                 cmp     dword_1007A544, 1
                 jz      short loc_10001DBB
                 xor     eax, eax
                 jmp     loc_10001EDF
 loc_10001DBB:                       
                 cmp     [ebp+arg_0], 1
                 jnz     short loc_10001DFD
                 fld     [ebp+var_8]
                 fadd    [ebp+arg_1C]
                 fcomp   [ebp+arg_4]
                 fnstsw  ax
                 test    ah, 1
                 jz      short loc_10001DFD
 
 loc_10001DD1:                       
                 fld     [ebp+var_8]
                 fadd    [ebp+arg_1C]
                 fcomp   [ebp+arg_4]
                 fnstsw  ax
                 test    ah, 1
                 jz      short loc_10001DF5
                 fld     [ebp+var_8]
                 fadd    [ebp+arg_1C]
                 fstp    [ebp+var_8]
                 mov     edx, [ebp+var_C]
                 add     edx, 1
                 mov     [ebp+var_C], edx
                 jmp     short loc_10001DD1
 
 loc_10001DF5:                       
                 mov     eax, [ebp+var_C]
                 jmp     loc_10001EDF
 
 loc_10001DFD:                          
                 cmp     [ebp+arg_0], 1
                 jnz     short loc_10001E4F
                 fld     [ebp+var_8]
                 fadd    [ebp+arg_1C]
                 fcomp   [ebp+arg_4]
                 fnstsw  ax
                 test    ah, 1
                 jnz     short loc_10001E4F
                 fld     [ebp+var_8]
                 fsub    [ebp+arg_1C]
                 fcomp   [ebp+arg_C]
                 fnstsw  ax
                 test    ah, 41h
                 jnz     short loc_10001E4F
 
 loc_10001E23:                          
                 fld     [ebp+var_8]
                 fsub    [ebp+arg_1C]
                 fcomp   [ebp+arg_C]
                 fnstsw  ax
                 test    ah, 41h
                 jnz     short loc_10001E47
                 fld     [ebp+var_8]
                 fsub    [ebp+arg_1C]
                 fstp    [ebp+var_8]
                 mov     eax, [ebp+var_C]
                 sub     eax, 1
                 mov     [ebp+var_C], eax
                 jmp     short loc_10001E23
 
 loc_10001E47:                          
                 mov     eax, [ebp+var_C]
                 jmp     loc_10001EDF
 
 loc_10001E4F:                           
                 cmp     [ebp+arg_0], 0FFFFFFFFh
                 jnz     short loc_10001E8E
                 fld     [ebp+var_8]
                 fsub    [ebp+arg_1C]
                 fcomp   [ebp+arg_C]
                 fnstsw  ax
                 test    ah, 41h
                 jnz     short loc_10001E8E
 
 loc_10001E65:                           
                 fld     [ebp+var_8]
                 fsub    [ebp+arg_1C]
                 fcomp   [ebp+arg_C]
                 fnstsw  ax
                 test    ah, 41h
                 jnz     short loc_10001E89
                 fld     [ebp+var_8]
                 fsub    [ebp+arg_1C]
                 fstp    [ebp+var_8]
                 mov     ecx, [ebp+var_C]
                 sub     ecx, 1
                 mov     [ebp+var_C], ecx
                 jmp     short loc_10001E65
 
 loc_10001E89:                           
                 mov     eax, [ebp+var_C]
                 jmp     short loc_10001EDF
 
 loc_10001E8E:                
                 cmp     [ebp+arg_0], 0FFFFFFFFh
                 jnz     short loc_10001EDD
                 fld     [ebp+var_8]
                 fsub    [ebp+arg_1C]
                 fcomp   [ebp+arg_C]
                 fnstsw  ax
                 test    ah, 41h
                 jz      short loc_10001EDD
                 fld     [ebp+var_8]
                 fadd    [ebp+arg_1C]
                 fcomp   [ebp+arg_4]
                 fnstsw  ax
                 test    ah, 1
                 jz      short loc_10001EDD
 
 loc_10001EB4:                
                 fld     [ebp+var_8]
                 fadd    [ebp+arg_1C]
                 fcomp   [ebp+arg_4]
                 fnstsw  ax
                 test    ah, 1
                 jz      short loc_10001ED8
                 fld     [ebp+var_8]
                 fadd    [ebp+arg_1C]
                 fstp    [ebp+var_8]
                 mov     edx, [ebp+var_C]
                 add     edx, 1
                 mov     [ebp+var_C], edx
                 jmp     short loc_10001EB4
 
 loc_10001ED8:                
                 mov     eax, [ebp+var_C]
                 jmp     short loc_10001EDF
 
 loc_10001EDD:                
                 xor     eax, eax
 
 loc_10001EDF:                
                 pop     edi
                 pop     esi
                 pop     ebx
                 mov     esp, ebp
                 pop     ebp
                 retn    24h
 
Recalc endp
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.04.2009, 14:29
Ответы с готовыми решениями:

Не могу понять код
Подскажите что именно делает эта строчка кода if (isset($_POST)) {$name = $_POST; if ($name == '') {unset($name);} Если можно...

не могу понять код
есть такой фрагмент кода: /* test.cpp */ template <typename T> struct MyClass { static const int param = sizeof(T); }; ...

Не могу понять код
1) программа что здесь является входящими данными и что является выходными данными RD #85 WR R1 RD #14 WR R2 CALL M WR R6 ...

6
0 / 0 / 0
Регистрация: 11.04.2009
Сообщений: 5
17.04.2009, 14:34  [ТС]
Пытаюсь сам разобраться в коде

Assembler
1
2
3
4
5
6
7
8
9
loc_10001DBB:                       
                 cmp     [ebp+arg_0], 1            //Сравниваем      arg_0 == 1 ?
                 jnz     short loc_10001DFD       // если arg_0 != 1 то перейти к loc_10001DFD
                 fld     [ebp+var_8]                  // если arg_0 = 1
                 fadd    [ebp+arg_1C]               // var_8 = var_8 + arg_1C 
                 fcomp   [ebp+arg_4]                // Сравниваем   var_8 == arg_4
                 fnstsw  ax                              // ??? 
                 test    ah, 1                            // ??? а вот в этом месте у меня возникли проблемы
                 jz      short loc_10001DFD         //  ???

Прокомментируете пожалуста, правильно ли я разобрал код, и что происходит там где "???"
0
247 / 205 / 26
Регистрация: 03.02.2009
Сообщений: 785
18.04.2009, 10:44
Это работа с математическим сопроцессором.
Очень много инфы в инете!!!

Вот задал поиск "fnstsw" в yandex'е и куча ссылок, например:
http://ipoint.vlsi.uiuc.edu/we... ADING5-135
0
0 / 0 / 0
Регистрация: 11.04.2009
Сообщений: 5
18.04.2009, 12:07  [ТС]
Цитата Сообщение от o-user Посмотреть сообщение
Это работа с математическим сопроцессором.
Очень много инфы в инете!!!

Вот задал поиск "fnstsw" в yandex'е и куча ссылок, например:
http://ipoint.vlsi.uiuc.edu/we... ADING5-135
Да, для тех кто хорошо разбирается в Ассемблере эта информация очень понятно, но для меня пока темный лес Буду разбираться дальше
0
 Аватар для Mecid
683 / 232 / 16
Регистрация: 15.10.2007
Сообщений: 1,246
18.04.2009, 13:34
поставь hexrays и будет тебе счастье увидишь код на Си
0
0 / 0 / 0
Регистрация: 11.04.2009
Сообщений: 5
18.04.2009, 23:38  [ТС]
Цитата Сообщение от Mecid Посмотреть сообщение
поставь hexrays и будет тебе счастье увидишь код на Си
Хм, спасибо, сейчас попробую

Добавлено через 9 часов 51 минуту 0 секунд
Поставил hexrays и вот что получил:
if ( a1 != 1 )
goto LABEL_28;
__asm
{
fld [ebp+var_8]
fadd [ebp+arg_1C]
fcomp [ebp+arg_4]
fnstsw ax
}
if ( HIBYTE(_AX) & 1 )
{
....
}

И это мне не прибавило оптимизма и понимания
0
0 / 0 / 0
Регистрация: 11.04.2009
Сообщений: 5
24.04.2009, 16:03  [ТС]
Все, с предыдущим кодом розабрался.
Только вот есть продолжение и тут загвоздка:

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
10001D30 var_48          = byte ptr -48h
10001D30 var_8           = qword ptr -8
10001D30 arg_10          = dword ptr  18h
10001D30 arg_14          = qword ptr  1Ch
10001D30
10001D30                 push    ebp
10001D31                 mov     ebp, esp
10001D33                 sub     esp, 48h
10001D36                 push    ebx
10001D37                 push    esi
10001D38                 push    edi
10001D39                 lea     edi, [ebp+var_48]
10001D3C                 mov     ecx, 12h
10001D41                 mov     eax, 0CCCCCCCCh
10001D46                 rep stosd
10001D48                 mov     dword ptr [ebp+var_8], 0
10001D4F                 mov     dword ptr [ebp+var_8+4], 0
10001D56                 cmp     dword_1007C6EC, 1
10001D5D                 jnz     short loc_10001D73
10001D5F                 fild    [ebp+arg_10]     
10001D62                 fdivr   [ebp+arg_14]
10001D65                 fstp    [ebp+var_8]       // здесь var_8 = arg_10 делим на arg_14 
10001D68                 fld     ds:dbl_10071040  // вот тут не понятно что происходит 
10001D6E                 fdiv    [ebp+var_8]       // и еще одно деление???
10001D71                 jmp     short loc_10001D76 ...
Подскажите ответ.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.04.2009, 16:03
Помогаю со студенческими работами здесь

Не могу понять код
Здравствуйте! Никак не могу разобраться в программе. Кто понимает объясните пожалуйста что здесь написанно=)) unit Unit1; interface ...

Не могу понять код
Напишите, пожалуйста, что означает каждая строчка кода #include <stdio.h> #include <string.h> char s,t,c1,c2; bool...

Не могу понять код
Здравствуйте. Читаю Прата «Язык программирования C++» и встретился мне код, который я никак не могу понять, точнее не могу понять вывод: ...

Не могу понять код
Здравствуйте. Есть вот такой скрипт: #!/usr/bin/perl use strict; my $event; my %actions = ( ...

Не могу понять код
Всем привет! Я абсолютный новичек в программировании и в паскале, поэтому прошу вас помочь разобраться. Одна из задач в ЕГЭ выглядит так:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru