Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Assembler FAQ > Некоторые нюансы при использовании MOV


Автор: miksayer 06.07.05, 11:20
 
Некоторые нюансы при использовании команды MOV

1. С помощью MOV нельзя осуществлять пересылку из одной области памяти в другую. Для этого нужно использовать в качестве промежуточного буфера любой доступный регистр общего назначения:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    .data
    a db 5
    b db ?
    .code
    start:
    ...
    mov al,a
    mov b,al
    ...
    end start

2. Нельзя пересылать содержимое одного сегментного регистра в другой сегментный регистр. Для этого нужно использовать регистры общего назначения:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    mov ax, ds
    mov es, ax

3. Нельзя загружать в сегментный регистр непосредственное значение. Для этого требуется промежуточный объект (например, регистр общего назначения или стек).

4. Нельзя использовать сегментный регистр CS как операнд назначения. Дело в том, что в архитектуре процессора IA-32 пара CS:IP содержит адрес команды, которая должна выполняться следующей. Поэтому изменение содержимого регистра CS фактически означает операцию перехода, что недопустимо.

Автор: B1tD1ver 04.03.10, 15:13
А как же такой вариант, через стэк!?!?!
Var db 256 dup(?)
A db 'A',0
push A(или offset A);Аля masm
pop Var(offset Var)
или
mov al,'A' ; 2 - byte
mov edi,Var(offset Var); 5 - byte
stosb ; 1 - byte
----------------------------------------
push ds;В полне симпатично!
pop es
----------------------------------------

Автор: Akina 04.03.10, 15:31
Ничего симпатичного - push/pop дольше двух mov

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)