Консультация № 195670
20.05.2019, 14:42
0.00 руб.
0 33 1
Уважаемые эксперты! Пожалуйста, ответьте на вопрос:

Кучу теории уже перечитал, но не могу понять, что от меня хотят в этом вопросе:

Исходные данные: SP=0324h, DS=4302h, DI=0073h, AX=4852h, BX=3010h, DX=0000h, SI=0071h

Покажите ситуацию в памяти до и после выполнения стековых команд, а также состояние участвующих в этом регистров: 1) PUSH AX 2) POP DX


как это можно сделать без компилятора и отладчика, в теории про них ни слова

Обсуждение

давно
Посетитель
7438
7205
20.05.2019, 15:01
общий
Адресаты:
Ага, нашел! Вы там зарегистрировались, как ras2

Так понимаю, что в целом, что такое стек понятно... Хорошо.
"Чего хотят?"
А хотят, чтобы Вы указали:
1) участок памяти, выделенной под стек, что там находится (если знаем, конечно).
2) интересующие нас адреса этой памяти.
3) куда указывает регистр SP
И все это до операций PUSH/POP, после PUSH AX и после операции POP DX
Ну и, кроме этого, содержимое регистров AX и DX (SP само собой)
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
20.05.2019, 15:05
общий
Адресаты:
Т.е, что произойдет, если сделаем PUSH AX?
Для этого надо четко понять, как стек адресуется, куда и как он растет и уменьшается
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
20.05.2019, 15:08
общий
20.05.2019, 15:08
Адресаты:
Нет, я там не зарегистрирован, за подобными консультациями обращаюсь впервые на вашем сайте
Значит, по одному учебнику учитесь
Хорошо, чтобы все улеглось в голове, рассказывайте, что Вы знаете о стеке
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
20.05.2019, 15:17
общий
Адресаты:
Ну что там? А не то скоро я не смогу оперативно ответить...
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Старший Модератор
31795
6196
20.05.2019, 15:20
общий
20.05.2019, 15:24
Адресаты:
Вот Вам 3-и картинки
1) до PUSH AX

2) между командами

3)и после

Найдите отличия.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
403037
55
20.05.2019, 15:23
общий
Цитата: Лысков Игорь Витальевич
Значит, по одному учебнику учитесь


может это даже мой однокурсник-заочник

Цитата: Лысков Игорь Витальевич
рассказывайте, что Вы знаете о стеке


то что растет стек по направлению к началу памяти, а уменьшается к концу

нет понимания, что делается с регистрами после выполнения команд
давно
Посетитель
403037
55
20.05.2019, 15:26
общий
Цитата: Зенченко Константин Николаевич
Найдите отличия.


значение регистра AX записалось в значение регистра DX
давно
Посетитель
7438
7205
20.05.2019, 15:29
общий
значение регистра AX записалось в значение регистра DX
Ну, это в итоге...
Важно не это, а как это происходило... Чем отличается первая и вторая картинка?
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
403037
55
20.05.2019, 15:30
общий
Цитата: Лысков Игорь Витальевич
Чем отличается первая и вторая картинка?


Значение регистра SP поменялось
давно
Посетитель
7438
7205
20.05.2019, 15:34
общий
20.05.2019, 15:35
Адресаты:
Ну хорошо, чтобы пришло понимание, рассказываю:
1) Регистр SP всегда указывает на адрес ЗА ячейкой памяти, которая является вершиной стека
2) При операции PUSH происходит: первое - уменьшается значение SP на 2 и второе - значение, которое помещается в стек, записывается по адресу SS:SP
3) При операции POP происходит обратное: первое - чтение слова по адресу SS:SP куда указано и второе - увеличение значение SP на 2
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
20.05.2019, 15:38
общий
Адресаты:
Вот теперь нарисуйте на бумажке нужный участок памяти, покажите, куда указывает SP
И покажите, какие будут происходить изменения после PUSH и POP
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
20.05.2019, 15:46
общий
20.05.2019, 15:46
Адресаты:
Получается?
Или мне нарисовать картинки?
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
403037
55
20.05.2019, 15:47
общий
20.05.2019, 15:49
Цитата: Лысков Игорь Витальевич
Получается?
Или мне нарисовать картинки?


Рисую

Но все равно ничего не понятно
давно
Посетитель
7438
7205
20.05.2019, 15:52
общий
Адресаты:
Что именно не понятно?
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
403037
55
20.05.2019, 15:54
общий
Вот что накалякал на бумаге
Прикрепленные файлы:
4e198c3b0b4ecf22168be4731fe0f8b4.jpeg
давно
Посетитель
7438
7205
20.05.2019, 15:57
общий
Адресаты:
Непонятно, потому что без привязки к самому стеку.
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
20.05.2019, 16:15
общий
Адресаты:
Смотрите рисунки, тоже на примере AFD
До PUSH


После PUSH
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
403037
55
20.05.2019, 16:23
общий
Цитата: Лысков Игорь Витальевич
Смотрите рисунки, тоже на примере AFD


А как вы вносите значения в регистры?

Код:


mov ax,4852h
mov dx,0000h

? у меня такой же отладчик, но значения там не меняются

то есть моя схема на бумаге правильная? после команды PUSH AX значение sp уменьшилось на 2 (0324-->0032), после команды POP DX значение регистра DX заменилось на значение регистра AX (4852), а значение SP увеличилось на 2 (снова стало 0324)
давно
Посетитель
7438
7205
20.05.2019, 16:29
общий
20.05.2019, 16:30
Адресаты:
Нажмите на F7, курсор переместится на область регистров
Вернуться или нажать еще два раза на F7, либо Enter (есть кнопка F4 - помощь)

Да, записано все правильно, но нет понимания почему так Или уже есть?
Обратили внимание на обведенное место в стеке?
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
403037
55
20.05.2019, 16:37
общий
Цитата: Лысков Игорь Витальевич
Да, записано все правильно, но нет понимания почему так Или уже есть?
Обратили внимание на обведенное место в стеке?


Да, примерно вник, но работы еще много

Большущее спасибо, на 2й вопрос помогли ответить , но чувствую их еще много будет
давно
Посетитель
7438
7205
20.05.2019, 16:38
общий
Адресаты:
С POP-ом вопросов нет?
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
403037
55
20.05.2019, 16:43
общий
Цитата: Лысков Игорь Витальевич
С POP-ом вопросов нет?


Да вроде нет, при этой команде происходит извлечение из стека, при этом SP увеличивается на 2
давно
Посетитель
7438
7205
20.05.2019, 16:44
общий
20.05.2019, 16:58
Адресаты:
но работы еще много
Да осилит дорогу идущий... Глаза боятся, а руки делают...
В Поднебесной говорят: путешествие в тысячу ли начинается с одного шага. Удачи!
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
20.05.2019, 17:02
общий
это ответ
Здравствуйте, lordwarrior161!
Вопрос сводится к пониманию того, как работает стек. Поэтому, самое главное, надо уяснить, что:

1) Регистр SP всегда указывает на адрес ЗА ячейкой памяти, которая является вершиной стека
2) При операции PUSH происходит: первое - уменьшается значение SP на 2 и второе - значение, которое помещается в стек, записывается по адресу SS:SP
3) При операции POP происходит обратное: первое - чтение слова по адресу SS:SP куда указано и второе - увеличение значение SP на 2

А в задании требуется показать содержимое стека, регистров SP, AX и DX до и после операций PUSH и POP
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Академик
20764
1861
20.05.2019, 17:35
общий
Адресаты:
Судя по вашему ответу, указатель смотрит на вершину стека, что противоречит вашему же утверждению в пункте 1.
давно
Посетитель
7438
7205
20.05.2019, 17:41
общий
Адресаты:
Разве?
Так понимаю, пункт 1, это
1) Регистр SP всегда указывает на адрес ЗА ячейкой памяти, которая является вершиной стека

А из какого ответа следует, что указатель смотрит на вершину?
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Академик
20764
1861
20.05.2019, 17:57
общий
Адресаты:
Из пунктов 2 и 3: по push сначала двигается указатель, а потом записывается значение. По pop наоборот.
давно
Посетитель
7438
7205
20.05.2019, 18:02
общий
Адресаты:
Разве не так?
Указатель за вершиной, чтобы в вершину записать, сначала уменьшаем указатель, потом туда пишем.
После чего опять указатель за новой вершиной.
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Академик
20764
1861
20.05.2019, 18:27
общий
Адресаты:
Похоже мы под вершиной подразумеваем разное. Я — последний добавленный элемент.
давно
Посетитель
7438
7205
20.05.2019, 19:39
общий
Адресаты:
Я соглашусь с Вами: все зависит от того, что считать вершиной стека.
Действительно, можно и так: указатель показывает на вершину, PUSH сначала уменьшает указатель на новую вершину и туда помещает значение.
Это в общем-то всё условно.
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа