0 / 0 / 0
Регистрация: 18.05.2019
Сообщений: 9
|
|
1 | |
Как изменится состояние регистров после выполнения PUSH AX и POP DX18.05.2019, 16:08. Показов 6164. Ответов 4
Учусь на заочке и тут по архитектуре аппаратных средств прилетает практическая работа, а в ней задачки всякие. И на одной я застопорился:
Даны исходные данные: SP=0324h, DS=4302h, DI=0073h, AX=4852h, BX=3010h, DX=0000h, SI=0071h Покажите ситуацию в памяти до и после выполнения стековых команд, а также состояние участвующих в этом регистров: a) PUSH AX b) POP DX Хоть калёным железом пытайте, не могу взять в толк, что от меня хотят... Все пришедшие в голову мыслишки вылились в это: a) PUSH AX При реализации команды PUSH выполняются следующие действия: значение регистра SP уменьшается на 2, значение операнда записывается по адресу SS: SP. PUSH AX SP := SP – 2 memory[SP] := AX то есть, SP = 0324h – 2 = 0322h – полученное значение записывается в SP. b) POP DX Алгоритм работы команды POP обратен алгоритму команды push: значение из вершины стека пересылается в операнд, значение SP увеличивается на 2: POP DX DX := memory [SP] SP := SP + 2 то есть, SP = 0324h + 2 = 0326h – в DX записывается содержимое памяти, на которую указывает SP. Пожалуйста, подскажите, а правильно ли я понял задание? И, вообще, серьёзно, что с регистрами происходит до и после стековых команд? Неужели все эти DS, DI, AX, BX, SI остаются неизменны до и после? Честно, не доходит до меня эта тема со стеками, но, блин, кровь из носу, нужно разобраться.
0
|
|
18.05.2019, 16:08 | |
Ответы с готовыми решениями:
4
Значения регистров после выполнения действий Push и pop Сделать так чтобы если вводится push выполнялась функция push, если pop то pop Как изменится массив после выполнения фрагмента программы Как и почему меняется содержимое регистров после выполнения очередной команды |
6718 / 2694 / 375
Регистрация: 17.02.2013
Сообщений: 3,963
|
|
18.05.2019, 16:47 | 2 |
![]() Решение
Да неизменны.
стек - это организация памяти по принципу рожка автомата Калашникова. Рожок находится в памяти. Патроны это числа размером слово (2 байта). Патрон вставленный в рожок последним вынимается первым. PUSH AX - число из регистра AX вставил в рожок. После выполнения команды это число в рожке верхнее. POP DX - вынул верхнее число из рожка и поместил в регистр DX. Только когда патроны вставляются и вынимаются из рожка, они не перемещаются в нем как в настоящем автоматном рожке. Они лежат на месте. Чего зазря их по памяти перемещать-то ? Вместо этого сам рожок как бы резиновый, повернут горловиной вниз, рожок растягивается и сжимается, патроны при этом по высоте не двигаются. Пара регистров SS:SP всегда указывает на верхний патрон в рожке, считай на горловину рожка. Когда новый патрон (число) вставляется в рожок, рожок растягивается вниз (SP уменьшается на 2). Когда патрон (число) вынимается их рожка SP увеличивается на 2 и рожок сжимается вверх. Ну вот так представляй себе работу стека и не прошибешься.
3
|
Неэпический
|
|
18.05.2019, 21:08 | 3 |
Может быть поможет:
https://habr.com/ru/company/sm... og/234239/
1
|
0 / 0 / 0
Регистрация: 18.05.2019
Сообщений: 9
|
|
18.05.2019, 21:21 [ТС] | 4 |
Спасибо! Сейчас почитаю
0
|
Ушел с форума
![]() 16161 / 7499 / 1031
Регистрация: 11.11.2010
Сообщений: 13,498
|
|
29.05.2019, 01:35 | 5 |
2
|
29.05.2019, 01:35 | |
Помогаю со студенческими работами здесь
5
Модифицировать программу, имитирующую работу стека, так, чтобы после каждой из операций push и pop на экран выводился сн как реализовать вручную методы: Peek(), Pop(), Push() - для односвязных списков Каким будет содержание регистров после выполнения команд Определить значения регистров после выполнения фрагмента программы Найти содержимое регистров после выполнения группы команд push и pop Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |