Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.224.63.87] |
|
Сообщ.
#1
,
|
|
|
Некоторые нюансы при использовании команды MOV 1. С помощью MOV нельзя осуществлять пересылку из одной области памяти в другую. Для этого нужно использовать в качестве промежуточного буфера любой доступный регистр общего назначения: .data a db 5 b db ? .code start: ... mov al,a mov b,al ... end start 2. Нельзя пересылать содержимое одного сегментного регистра в другой сегментный регистр. Для этого нужно использовать регистры общего назначения: mov ax, ds mov es, ax 3. Нельзя загружать в сегментный регистр непосредственное значение. Для этого требуется промежуточный объект (например, регистр общего назначения или стек). 4. Нельзя использовать сегментный регистр CS как операнд назначения. Дело в том, что в архитектуре процессора IA-32 пара CS:IP содержит адрес команды, которая должна выполняться следующей. Поэтому изменение содержимого регистра CS фактически означает операцию перехода, что недопустимо. |
Сообщ.
#2
,
|
|
|
А как же такой вариант, через стэк!?!?!
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 ---------------------------------------- |
Сообщ.
#3
,
|
|
|
Ничего симпатичного - push/pop дольше двух mov
|