КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Команды пересылки
Прежде чем изменять каким-либо образом наши данные, давайте научимся их сохранять: копировать из регистра в память и обратно. Ведь прежде чем оперировать данными в регистрах, их сначала туда надо поместить.
Команда MOV, хоть название ее и происходит от слова «move» (перемещать), на самом деле не перемещает, а копирует значение из источника в приемник:
MOV приемник, источник
Рассмотрим несколько примеров применения команды MOV:
mov ax,[number] mov [number],bx mov bx,ex mov a l, 1 mov dh,с1 mov e s i, e d i mov word [number] заносим значение переменной number в регистр АХ загрузить значение регистра ВХ в переменную number занести в регистр ВХ значение регистра СХ занести в регистр AL значение 1 занести в регистр DH значение регистра CL копировать значение регистра EDI в регистр ESI сохранить 16-битное значение 1 в переменную "number"
Процессоры семейства х86 позволяют использовать в командах только один косвенный аргумент. Следующая команда копирования значения, находящегося по адресу number_one, в область памяти с адресом number_two, недопустима:
mov [number_two], [number_one];НЕПРАВИЛЬНО!!!
Чтобы скопировать значение из одной области памяти в другую, нужно использовать промежуточный регистр:
mov ax, [number_one];загружаем в АХ 16-битное ;значение "number_one" mov [number_two], ах;а затем копируем его в переменную ;"number_two" Оба операнда команды MOV должны быть одного размера: mov ах, bl;НЕПРАВИЛЬНО! - Операнды разных ;размеров. Для копирования значения BL в регистр АХ мы должны «расширить диапазон», то есть скопировать весь ВХ в АХ, а затем загрузить 0 в АХ:
mov ах, Ьх;загружаем ВХ в АХ mov ah, 0;"сбрасываем" верхнюю часть ;АХ — записываем в нее О
Регистр АН является верхней 8-битной частью регистра АХ. После выполнения команды MOV ах, Ьх регистр АН будет содержать значение верхней части регистра ВХ, то есть значение регистра ВН. Но мы не можем быть уверены, что ВН содержит 0, поэтому мы должны загрузить 0 в АН — команда MOV ah, О «сбрасывает» значение регистра АН. В результате мы расширили 8-битное значение, ранее содержащееся в регистре BL, до 16 битов. Новое, 16-битное, значение будет находиться в регистре АХ.
Можно поступить и наоборот: сначала сбросить весь АХ, а затем загрузить BL в младшую часть АХ (AL): mov ах, 0;АН = 0, AL = О mov al, bl;заносим в AL значение BL Точно так же можно скопировать 16-битное значение в 32-битный регистр. Для полноты картины приведем список всех допустимых форматов команды
MOV — как в официальной документации: MOV r/m8,reg8 MOV r / m l 6, r e g l 6 MOV r/m32,reg32 MOV reg8,r/m8 MOV r e g l 6, r / m l 6 MOV reg32,r/m32 MOV reg8,imm8 MOV regl6,imml6 MOV reg32,imm32 MOV r/m8,imm8 MOV r/ml6,imml6 MOV r/m32,imm32 '
Дата добавления: 2014-01-06; Просмотров: 409; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |