somewhere » 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 помещает регистры на стек. Поскольку порядок не алфавитный, то я уже не помню и оставлю эту простую задачу вам.
[code]
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
[/code]
Где WWWW, XXXX, YYYY, ZZZZ - смещения сохраненных регистров общего назначения в стеке AX, DI, CX, SI соответственно, относительно нового указателя стека после выполнения pusha. Эти смещения могут быть вычислены, если почитать в каком порядке pusha помещает регистры на стек. Поскольку порядок не алфавитный, то я уже не помню и оставлю эту простую задачу вам.