Файл: 3. Команды перемещения данных.pdf

ВУЗ: Не указан

Категория: Учебное пособие

Дисциплина: Программирование

Добавлен: 30.10.2018

Просмотров: 324

Скачиваний: 8

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

3. Команды перемещения данных 

Основная команда пересылки имеет мнемонику MOV и является одной 

из  наиболее  часто  используемых.  Это  объясняется  постоянной 

необходимостью  загрузки  регистров  данными  из  оперативной  памяти  для 

обработки и сохранением результатов в памяти. Общий формат команды: 

MOV   приемник, источник 

Здесь  в  качестве  источника  данных  может  выступать  регистр, 

именованная  область  памяти  или  непосредственный  операнд  (НО),  а  в 

качестве приемника  - регистр или область памяти. Пересылать можно байт, 

слово  или  двойное  слово.  Никаких  специальных  указаний  по  размеру 

пересылаемого объекта нет, ассемблер проверяет операнды по их описанию, 

с  учетом  непротиворечивости.  Если  размеры  операндов  НЕ  согласованы, 

фиксируется  ошибка.  Никаких  преобразований  типа  «байт 

слово»  не 

выполняется. 

Нельзя  пересылать  данные  сразу  из  памяти  в  память,  для  этого 

приходится  использовать  две  команды  и  промежуточный  РОН.  Схематично 

возможные пересылки представлены на следующем рисунке. 

 

 

 

 

 

 

Отсюда видно, что существует пять разновидностей передачи данных: 

  регистр → регистр 

  регистр → память 

  память → регистр 

  НО → регистр 

  НО → память.  

Примеры использования команды MOV. 

регистр 

память 

регистр 

память 

непосредственный операнд 


background image

Пусть объявлены две следующие именованные области памяти 

Byte1    DB   ?           ; резервирование 1 байта 

Word1   DB   ?           ; резервирование 1 слова 

Тогда можно записать следующие команды: 

MOV   AL, 10     ; число 10 в младший байт регистра АХ 

MOV   AX, 1234     ; число 1234 в регистр АХ 

MOV   BH, Byte1    ; байт из области памяти с именем Byte1 в старший 

;  байт регистра ВХ 

MOV   Word1, BX  ; содержимое регистра ВХ в память с именем Word1 

MOV   Byte1, 0        ; число 0 в область памяти с именем Byte1 

MOV   BX, CX        ; регистр СХ в регистр ВХ 

Примеры неправильных команд: 

MOV AX, Byte1  ; не согласованы размеры операндов 

MOV BH, CX 

; аналогично 

MOV CL, 1000 

; число 1000 требует 2 байтов 

MOV Byte1, Byte2 

; нельзя из памяти в память 

 

Приведем  пример  программы,  в  которой  используется  команда  MOV. 

Пусть  требуется  определить  в  памяти  короткую  (3-4  байта)  строку  и 

«перевернуть»  ее  в  другую  область,  т.е.  скопировать  байты  в  обратном 

порядке, например: abc -> cba 

Объявим  две  области  памяти  для  исходной  (S1)  и  «перевернутой» 

строки (S2): 

S1 

DB  „abc‟   

; исходная строка 

S2 

DB  3   DUP(?)  ; резервируем память для результата 

Тогда  схематично  размещение  символов  строки  в  памяти  с 

соответствующими именами областей памяти можно представить так: 

 

. . . . . .  

. . . . . 

имя области памяти 

S1 

S1+1 

S1+2 

 

S2 

S2+1 

S2+2 

 

 


background image

Основной набор команд по перемещению символов будет выглядеть так: 

MOV   AL, S1       ; символ “a” из памяти с именем S1 в регистр AL 

MOV   S2+2, AL   ; символ “a” из регистра AL в память с именем S2+2 

MOV   AL, S1+1   ; символ “b” из памяти с именем S1+1 в регистр AL 

MOV   S2+1, AL   ; символ “b” из регистра AL в память с именем S2+1 

MOV   AL, S1+2   ; символ “c” из памяти с именем S1+2 в регистр AL 

MOV   S2, AL        ; символ “c” из регистра AL в память с именем S2