стек

Низкоуровневое программирование портов, микроконтроллеров и т.д.

Модератор: Andy

Ответить
kolorimage
Сообщения: 6
Зарегистрирован: 06 апр 2009, 15:58

06 апр 2009, 17:02

у меня задание-
сохранить в стеку регистры общего назначения одной командой,Вызвать подпрограмму которая изменит между собой в стеку значение регистров Ах Di,Cx i Si .После выполнения процедуры зчитать со стека значения регистров одной командой.
Как сохранять и зчитать я знаю (pusha,popa)
Но как поменять Ах Di,Cx i Si немогу найти ..а здавать то надо(лабораторные,я студент)
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

06 апр 2009, 17:14

Код: Выделить всё

pusha
mov bp, sp
mov ax, [bp+WWWW]
xchg ax, [bp+XXXX]
mov [bp+WWWW], ax
mov ax, [bp+YYYY]
xchg ax, [bp+ZZZZ]
mov [bp+YYYY], ax
popa
Где WWWW, XXXX, YYYY, ZZZZ - смещения сохраненных регистров общего назначения в стеке AX, DI, CX, SI соответственно, относительно нового указателя стека после выполнения pusha. Эти смещения могут быть вычислены, если почитать в каком порядке pusha помещает регистры на стек. Поскольку порядок не алфавитный, то я уже не помню и оставлю эту простую задачу вам.
It's a long way to the top if you wanna rock'n'roll
kolorimage
Сообщения: 6
Зарегистрирован: 06 апр 2009, 15:58

06 апр 2009, 17:29

Спасибо огромное..я всьо понял :)
Ответить