Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.93/29: Рейтинг темы: голосов - 29, средняя оценка - 4.93
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1

Объяснить работу команды push

07.06.2016, 18:08. Показов 5912. Ответов 41
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, читаю книгу, и не могу понять кое чего относительно работы со стеком

Пусть например esp указывает на стек, в котором ничего нет, пусть адрес в esp равен 1000h.
После выполнения, например, команды push eax, как сказано в учебнике, сперва из регистра esp вычтется 4h (особенность интелловского процыка), а затем по этому адресу (1004h) положится значение eax (т.е. оно, получается будет располагаться в диапозоне адресов 1004h - 1007h), но раз мы так сделали, то почему по адресам 1000h - 1003h ничего не содержится?

Или запись происходит "вверх"? т.е. после вычитания 4h из esp (получится 1004h), четыре байта будут располагаться по адресам 1003h, 1002h, 1001h, 1000h ?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.06.2016, 18:08
Ответы с готовыми решениями:

Моделирование выполнения команды PUSH scr в DEBUG
Используя любые известные команды промоделировать выполнение команды PUSH scr. Я понимаю, что нужно для примера следующий код: mov...

Команды, работающие со стеком без push, pop
Необходимо написать последовательность команд, работающие со стеком без использования pop и push c применением базовой индексной адресации...

Сложносочинённые команды. Разобрать и объяснить три строки кода
Здравствуйте уважаемые. Столкнулся в FASM с таким конструктором. sub al,((3Eh shl 2)+'A'-'+') and 0FFh push (76 shr 2)+1 ...

41
Заблокирован
07.06.2016, 18:11
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
сперва из регистра esp вычтется 4h, а затем по этому адресу (1004h
А как ты из 1000 вычел 4 и получил 1004?
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
07.06.2016, 18:14  [ТС]
Из рисунка непонятно кода именно указывает esp: на нулевой байт четырехбайтовой переменной в стеке или на последний.
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
07.06.2016, 18:25  [ТС]
Цитата Сообщение от nimazzzy Посмотреть сообщение
А как ты из 1000 вычел 4 и получил 1004?
да, извини, косяк, под вечер уже того.

Вот исправленный текст:
Пусть например esp указывает на стек, в котором ничего нет, пусть адрес в esp равен 1000h.
После выполнения, например, команды push eax, как сказано в учебнике, сперва из регистра esp вычтется 4h (особенность интелловского процыка), а затем по этому адресу (FFCh) положится значение eax (т.е. будет занятно пространство FFCh - FF9h), но раз мы так сделали, то почему по адресам 1000h - FFDh ничего не содержится?

Или запись происходит "вверх"? т.е. после вычитания 4h из esp (получится FFCh), четыре байта будут располагаться по адресам FFDh, FFEh, FFFh, 1000h ?
0
Заблокирован
07.06.2016, 18:27
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
т.е. будет занятно пространство FFCh - FF9h
А почему у тебя значение кладется в нижние адреса? Ты же ничего не вычитаешь.
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
07.06.2016, 18:30  [ТС]
Цитата Сообщение от nimazzzy Посмотреть сообщение
FFCh - FF9h
ну наоборот FF9h - FFСh, но факт в том, что это пространство(хоть FFCh - FF9h, хоть FF9h - FFСh, в данном контексте порядок не важен) будет занятно, как пишет автор
0
Заблокирован
07.06.2016, 18:33
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
ну наоборот FF9h - FFСh, но факт в том, что это пространство(хоть FFCh - FF9h, хоть FF9h - FFСh, в данном контексте порядок не важен) будет занятно, как пишет автор
Нет, такого не будет.
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
07.06.2016, 18:38  [ТС]
nimazzzy, я правильно понимаю, что если первоначально в esp содержится адрес 1000h, то после выполнения команды push eax (в eax содержится значение 12345678h), содержимое памяти будет выглядить так?

FFDh: 78h
FFEh: 56h
FFFh: 34h
1000h: 12h

А после помещения eax в стек в esp будет содержаться адрес FFCh ?
0
Заблокирован
07.06.2016, 18:43
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
четыре байта будут располагаться по адресам FFDh, FFEh, FFFh, 1000h ?
По адресам FFCh, FFDh, FFEh, FFFh

Добавлено через 2 минуты
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
А после помещения eax в стек в esp будет содержаться адрес FFCh ?
Да.

Добавлено через 1 минуту
На самом деле ты можешь сам написать ассемблерный код с push и посмотреть в отладчике. Или ты изучаешь ассемблер без написания кода?
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
07.06.2016, 18:43  [ТС]
nimazzzy,
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
содержимое памяти будет выглядить так?
FFDh: 78h
FFEh: 56h
FFFh: 34h
1000h: 12h
0
Заблокирован
07.06.2016, 18:44
Ferrari F1, что это?
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
07.06.2016, 18:45  [ТС]
Цитата Сообщение от nimazzzy Посмотреть сообщение
На самом деле ты можешь сам написать ассемблерный код с push и посмотреть в отладчике. Или ты изучаешь ассемблер без написания кода?

Не по теме:

к сожалению не дома сейчас и пишу с ноутбука к тому же :(

0
Заблокирован
07.06.2016, 18:48
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
содержимое памяти будет выглядить так?
FFDh: 78h
FFEh: 56h
FFFh: 34h
1000h: 12h
Байты в том порядке, адреса неправильные.
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
07.06.2016, 18:49  [ТС]
nimazzzy, а почему, если изначально esp указывал на 1000h, следовательно этот адрес тоже должен быть занят
0
Заблокирован
07.06.2016, 18:51
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
следовательно этот адрес тоже должен быть занят
Следовательно откуда?

Добавлено через 16 секунд
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
а почему,
Я выше написал, почему:
Цитата Сообщение от nimazzzy Посмотреть сообщение
По адресам FFCh, FFDh, FFEh, FFFh
Потому что от FFCh 1000h - это уже пятый байт.

Если сложно, то считай десятичными числами. У меня в esp адрес 4. Я делаю push eax. Адрес становится 0 и я кладу 4 байта.
0 - первый байт
1 - второй
2 - третий
3 - четвертый.

Откуда тут "следовательно 4 должен быть занят"? Занят чем тогда?
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
07.06.2016, 18:56  [ТС]
nimazzzy, все заблуждения из за этой картинки


визуально кажется, что адреса 1000h - FFDh заняты
0
Заблокирован
07.06.2016, 18:59
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
визуально кажется, что адреса 1000h - FFDh заняты
На картинке явно отображено, что по адресу 1000 ничего не изменилось Да, он чем-то там занят. И был занят до. Но с твоим пушем это не связано.
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
07.06.2016, 19:01  [ТС]
Цитата Сообщение от nimazzzy Посмотреть сообщение
На картинке явно отображено, что по адресу 1000 ничего не изменилось
значит, мы по разному на нее смотрим
Возможно, адреса в обратном порядке ввели путаницу
0
Заблокирован
07.06.2016, 19:03
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
значит, мы по разному на нее смотрим
По адресу 1000 лежит число 6. После пуша лежит оно же. Как ты так посмотрел, что у тебя что-то туда записалось?
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
07.06.2016, 19:17  [ТС]
nimazzzy, постой. в esp лежал адрес 1000h, команду push 6h можно расценивать в прямой последовательности так:
1) esp - 4h = FFCh
2) адреса FFCh - FFFFh занимает значение 6h
Как по адерсу 1000h может хранится что либо?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.06.2016, 19:17
Помогаю со студенческими работами здесь

Команды PUSH/PSW..
Мне нужно сделать: "Составить подпрограмму вычисления значения функции MAX(X&K,8)+5 . Подпрограмма должна вызываться командой CALL из...

Объяснить работу кода
объясните пож. что делается в строчках ниже cbData dd ? ; я так понимаю это объявление переменной dd это dword? а что...

Объясните принцип работы команды PUSH {список}
Есть такой вход в подпрограмму: PUSH {R1,LR} Поясните мне, где будут лежать эти регистры, после выполнения этой команды? Подозреваю,...

Команды передачи управления - объяснить код
Прошу помощи потому что уже 2 сутки бьюсь в надежде понять свою же работу... Я не могу рассказать(защитить ее). Преподаватель требует...

Объяснить работу
Что здесь значит if(i>5... И что делает конкретно i и что означает #define _CRT_SECURE_NO_WARNINGS #include <iostream> ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
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