Другие языки программирования и технологии
Вопрос знакомым с ассемблером.
У нас есть числа лежащие в 4 регистрах AX, BX, CX и DX. И еще одно число в стеке. Как поменять местами число из АХ и стека, ни теряя при этом ни одного из чисел.
x dw ?
mov x,ax
pop ax
push x
только там кажется надо указать директиву .80286 а то нельзя будет поместить в стек непосредственное значение, это возможность появилась только начиная с 286 проца.
А если при этом хочешь не изменять указатель стека, то сделать надо так:
pop x
push ax
mox ax,x
В результате размер стека не изменяется, указатель останется прежним
mov x,ax
pop ax
push x
только там кажется надо указать директиву .80286 а то нельзя будет поместить в стек непосредственное значение, это возможность появилась только начиная с 286 проца.
А если при этом хочешь не изменять указатель стека, то сделать надо так:
pop x
push ax
mox ax,x
В результате размер стека не изменяется, указатель останется прежним
Самый простой вариант (не надо переменных и ничего не затирается) :
xchg bx,sp
xchg ax,[bx]
xchg bx,sp
sp - указатель стека, т. е. в нем адрес того самого числа, с которым нужно менять ах.
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
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
в нее закинуть значение из регистра АХ
затем выбрать значение из стека в АХ
затем это значение из АХ закинуть в другую переменную
из первой переменной считать значение в АХ, а затем в стек
из второй переменной считать значение в АХ
код примерно такой (вначале надо объявить переменные)
x dw ?
y dw ?
mov x,AX
pop AX
mov y,AX
mov AX,x
push AX
mov y AX
Похожие вопросы
- Простой вопрос по прыжкам ассемблера
- Вопрос про язык ассемблера
- Вопрос по изучению языка Ассемблера под MS DOS. (Нужны советы по программному обеспечению/программированию)
- Что может ассемблер?
- Почему многие программисты ненавидят ассемблер?Ведь у него куча плюсов!Он позволяет максимально задействовать
- Вопрос по ассемблеру
- С помощью команд fpu вычислить площадь круга, исходя из введѐнного диаметра. Ассемблер...
- Ассемблер сегодня и завтра.
- Вопрос ассемблер
- стоит ли изучать ассемблер, если программирую на Делфи? и вообще реально ли что нибудь хорошее, дельное, нужное написать
х - не непосредственное значение, а переменная. Транслируется в push word ptr [адрес_переменной]