Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
 Аватар для ElvenDragon
3 / 8 / 1
Регистрация: 12.07.2009
Сообщений: 361

Интересный вопрос

27.09.2010, 00:01. Показов 1998. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Регист ESP указатель стека, он указывает на последний помещенный в стек элемент.

C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
using namespace std;
 
int main() {
  int b;
  _asm {
    MOV EAX,100
    PUSH EAX
    MOV b,ESP
  }
  return 0;
}
Вот такой вопрос если ESP указатель стека то что он содержит?
Он содержит адрес регистра или число 100 просто?
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.09.2010, 00:01
Ответы с готовыми решениями:

Шифр файла на ассемблере (TASM). Интересный алгоритм)
Необходимо написать программу шифрования/дешифрования файла в соответствии с заданным ключом. Алгоритм следующий: Каждое слово...

Интересный подход к вызову функций
Как видно на листинге выше(это игра DAVE MIRRA FREESTYLE BMX, которую я все пытаюсь перелопатить и внести изменения, касательно графики),...

интересный вопрос
подскажите как сделать например я открываю страницу через webbrowser и мне нужно нажать на ссылку , а как ее обнаружить ? какой код ,...

23
 Аватар для Goodwin98
2537 / 833 / 10
Регистрация: 31.05.2009
Сообщений: 1,668
27.09.2010, 00:04
он содержит аддрес вершины стека.
2
 Аватар для Tronix
158 / 105 / 6
Регистрация: 22.08.2010
Сообщений: 215
27.09.2010, 00:05
Ни того ни другого. Он содержит смещение в памяти, по которому находится число 100. Точнее даже смещение - 4 (размерность eax = 4 байта).
2
 Аватар для ElvenDragon
3 / 8 / 1
Регистрация: 12.07.2009
Сообщений: 361
27.09.2010, 10:48  [ТС]
Тогда следующий вопрос что содержится в переменной b?
0
 Аватар для Tronix
158 / 105 / 6
Регистрация: 22.08.2010
Сообщений: 215
27.09.2010, 14:34
Цитата Сообщение от ElvenDragon Посмотреть сообщение
Тогда следующий вопрос что содержится в переменной b?
Адрес вершины стека. Ваш кеп
1
 Аватар для ElvenDragon
3 / 8 / 1
Регистрация: 12.07.2009
Сообщений: 361
27.09.2010, 16:14  [ТС]
Получается тогда переменная это тоже самое что указатель?
0
 Аватар для Tronix
158 / 105 / 6
Регистрация: 22.08.2010
Сообщений: 215
27.09.2010, 16:23
Цитата Сообщение от ElvenDragon Посмотреть сообщение
Получается тогда переменная это тоже самое что указатель?
Регистр ESP указывает на адрес вершины стека (адрес, куда будет заноситься следующая переменная командой PUSH). То же самое и в переменной a - адрес вершины стека.
0
 Аватар для ElvenDragon
3 / 8 / 1
Регистрация: 12.07.2009
Сообщений: 361
27.09.2010, 16:44  [ТС]
дамс чет я не понял
0
 Аватар для ElvenDragon
3 / 8 / 1
Регистрация: 12.07.2009
Сообщений: 361
01.10.2010, 11:00  [ТС]
Тогда такой вопрос какой смысл в этой команде MOV b,ESP если они оба уже содержат адрес вершины стека?
0
 Аватар для Tronix
158 / 105 / 6
Регистрация: 22.08.2010
Сообщений: 215
01.10.2010, 11:03
Переменная B до этой команды содержит неведомо что. После выполнения этой команды уже содержит адрес вершины стека из регистра ESP.
0
 Аватар для ElvenDragon
3 / 8 / 1
Регистрация: 12.07.2009
Сообщений: 361
01.10.2010, 11:15  [ТС]
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using namespace std;
 
int main() {
  int b,v;
  cout << &b;
  _asm {
    MOV EAX,100
    PUSH EAX
    MOV b,ESP
    POP v
  }
  cout << &b;
  return 0;
}
Да это хорошо ну чет я невижу изменений адреса. Адрес тотже в переменной b что и в начале.
0
 Аватар для Tronix
158 / 105 / 6
Регистрация: 22.08.2010
Сообщений: 215
01.10.2010, 11:28
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Uses SysUtils;
Var
      B : Cardinal;
 
Procedure PrintB;
Begin
      WriteLn(IntToHex(B,8));
End;
 
Begin
      asm
      mov eax,100
      mov b,esp
      call PrintB       // Посмотpим, где изначально указатель ESP
      push eax          // Заталкнем в cтек EAX. Указатель должен
                        // уменьшиться на 4 байта
      mov b,esp         // Поcмотpим, что стало с ESP
      call PrintB
      pop eax
      end;
      ReadLn;           // Ждем нажатия любой клавиши
End.
Вывод программы:
Code
1
2
0012FFAC
0012FFA8
0
65 / 65 / 1
Регистрация: 14.04.2010
Сообщений: 170
01.10.2010, 13:04
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
msg BYTE 'Ne mogeu molchat!',0dh,0ah
 
.code
start:
mov eax,sizeof msg            ;закидываем сначало адрес и смещение строки
push eax                      ;перед сохранением смещения стека
lea eax,msg
push eax
call StrDisp                   ;
push 0
call ExitProcess
 
StrDisp proc
mov ebp,esp                        ;сохраняем текущее значение стека(на верхушке адрес возврата)
sub esp,8                          ;отнимаем 2 байта в стеке,для сохранения в стеке значения 
push STD_OUTPUT_HANDLE           ;количества показанных символов(cWritten) и для сохранения значения от 
call GetStdHandle                 ; GetStdHandle
mov [ebp-4],eax                   ;перепрыгиваем адрес возврата и сохраняем значение GetStdHandle
push 0
mov eax,ebp
sub eax,8                          ;вторая переменная лок-я (cWritten-количество показ-х симв-в)
push eax
push [ebp+8]                       ;это было сохр-но до вызова этой процедуры и до 
push [ebp+4]                       ; сохранения стека в ebp(sizeof msg, addr msg)
push [ebp-4]                       ;stdout
call WriteConsoleA                 ;показ сообщения
mov esp,ebp                        ;восстановим значение стека на адрес возврата
ret 8                              ;после возврата в гл-ю процедуру стек не выровнен, потому-что
                                   ;до вызова данной пр-ры были два push,а не было pop
StrDisp endp
(invoke WriteConsoleA,stdout ,addr msg, sizeof msg, addr cWritten, 0)
0
2014 / 1286 / 61
Регистрация: 05.06.2010
Сообщений: 2,213
01.10.2010, 14:06
Цитата Сообщение от ElvenDragon Посмотреть сообщение
using namespace std;
int main() {
int b,v;
cout << &b;
_asm {
MOV EAX,100
PUSH EAX
MOV b,ESP
POP v
}
cout << &b;
return 0;
}
ElvenDragon, в этом примере адрес и не должен измениться, запись значения в переменную не меняет ее адрес в стеке).

Добавлено через 6 минут
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
using namespace std;
int main() {
  int b,v;
  _asm mov b, esp
  cout << b<<'\n';
  _asm
  {
    PUSH EAX
    MOV b,ESP
    POP v
  }
  cout << b;
  return 0;
так лучше видно
0
 Аватар для ElvenDragon
3 / 8 / 1
Регистрация: 12.07.2009
Сообщений: 361
01.10.2010, 17:25  [ТС]
1244804
1244800
Это адреса стека?
0
 Аватар для Tronix
158 / 105 / 6
Регистрация: 22.08.2010
Сообщений: 215
01.10.2010, 17:29
Цитата Сообщение от ElvenDragon Посмотреть сообщение
1244804
1244800
Это адреса стека?
Это адрес вершины стека только лишь в конкретном одном случае. Он всегда у всех будет разный.
1
 Аватар для ElvenDragon
3 / 8 / 1
Регистрация: 12.07.2009
Сообщений: 361
01.10.2010, 17:37  [ТС]
Ещё пару вопросов.
Что мне этот адрес дает? И как мне по нему извлечь данное из стека?
0
 Аватар для Tronix
158 / 105 / 6
Регистрация: 22.08.2010
Сообщений: 215
01.10.2010, 17:49
Цитата Сообщение от ElvenDragon Посмотреть сообщение
Ещё пару вопросов.
Что мне этот адрес дает? И как мне по нему извлечь данное из стека?
Этот адрес дает значение переменной в стеке, например:
Assembler
1
2
3
4
5
6
7
mov eax,100
push eax  ; затолкнули в стек число 100
mov eax,0 ; обнулили eax
mov eax,[esp] ; а теперь в eax у нас то же самое число  - 100
mov eax,0 ; опять обнулили
pop eax ; востановили eax из стека
; а тут у нас в eax опять число 100
PS: Не в обиду, но почитайте что-нибудь по ассемблеру, Юрова там например или даже лучше Зубкова. Уверен, что многие вопросы сразу отпадут.
0
65 / 65 / 1
Регистрация: 14.04.2010
Сообщений: 170
01.10.2010, 17:50
Assembler
1
2
3
4
5
push eax
push ebx                ;в esp - находится ebx,а в esp+4 - находится eax
mov b,[esp]
mov v,[esp+4]        ; теперь в переменной b находится значение, которое в ebx
                           ; а в v находится значение eax
esp (вершина стека) как массив, только адресация идёт в обр-ю сторону
0
 Аватар для ElvenDragon
3 / 8 / 1
Регистрация: 12.07.2009
Сообщений: 361
01.10.2010, 18:00  [ТС]
А смысл тада переменной присваивать адрес вершины стека? Если можно сразу из регистра ESP извлечь данное из стека.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.10.2010, 18:00
Помогаю со студенческими работами здесь

Интересный вопрос
Народ.. вот вопросик возник.. У меня есть сайт, проиндексированный на sub1.site.ru.. я и ссылки регил в каталоги на него.... и все...

Интересный вопрос!
Как будет работать программа если я изменю условие! if (fV&gt;= 0 &amp;&amp; fAlfa&gt;= 0 &amp;&amp; fAlfa&lt;= 180) просто на if 15 в приведенной ниже...

Интересный вопрос
Шалом! На vbulletin стоит роботс тхт, приведенный ниже. Ондако роботы ПС лезут регистрироваться, смотрят календарь и инфу о...

Интересный вопрос
Есть варез http://dalena.intway-uk.com Поставил на него DLE форум, в котором есть одна интересная функция. Если вы зайдёте на сайт вы...

Интересный вопрос
Ув. программисты,сегодня с преподователем в университете состоялся интресеный диалог.в ходе которого он мне заявил точ не одна функция...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru