Другие языки программирования и технологии

Вопрос знакомым с ассемблером.

У нас есть числа лежащие в 4 регистрах AX, BX, CX и DX. И еще одно число в стеке. Как поменять местами число из АХ и стека, ни теряя при этом ни одного из чисел.
Юра Броль
Юра Броль
608
x dw ?

mov x,ax
pop ax
push x

только там кажется надо указать директиву .80286 а то нельзя будет поместить в стек непосредственное значение, это возможность появилась только начиная с 286 проца.

А если при этом хочешь не изменять указатель стека, то сделать надо так:

pop x
push ax
mox ax,x

В результате размер стека не изменяется, указатель останется прежним
Виктор Сачко
Виктор Сачко
2 084
Лучший ответ
Дмитрий Шибаев "нельзя будет поместить в стек непосредственное значение"
х - не непосредственное значение, а переменная. Транслируется в push word ptr [адрес_переменной]
Самый простой вариант (не надо переменных и ничего не затирается) :
xchg bx,sp
xchg ax,[bx]
xchg bx,sp

sp - указатель стека, т. е. в нем адрес того самого числа, с которым нужно менять ах.
**asetin** **naiman** самое верное решение!
Сначала определить какие данные сначала вводятся в реестр, а потом заменяются исходными переменными.. .
MODEL SMALL
STACK 256
DATASEG
Data1 DB (определить содержимое) ; выделить один байт с содержимым
CODESEG
Start:
mov bx.ax,@data ; установка в ds адpеса
mov dx,ax,cx; сегмента данных
mov ax,OFFSET Data1; где находиться переменная
Exit:
mov ah,04Ch ; функция DOS выхода из программы
mov al,0h ; код возврата
int 21h ; Вызов DOS остановка программы
End Start
нужно использовать переменные в памяти
в нее закинуть значение из регистра АХ
затем выбрать значение из стека в АХ
затем это значение из АХ закинуть в другую переменную
из первой переменной считать значение в АХ, а затем в стек
из второй переменной считать значение в АХ

код примерно такой (вначале надо объявить переменные)
x dw ?
y dw ?

mov x,AX
pop AX
mov y,AX
mov AX,x
push AX
mov y AX