Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Laba_2 (1).docx
Скачиваний:
5
Добавлен:
12.09.2019
Размер:
112.84 Кб
Скачать

Министерство образования и науки Украины

Херсонский национальный технический университет

Кафедра технической кибернетики

Лабораторная работа № 2

по дисциплине «Системное программирование систем управления»

на тему: «Команды пересылки»

Выполнили

студенты группы 2 СУ Волокитин М.В. ; Видюк С.С.

Проверил

Преподаватель Поливода О. В.

Херсон 2012

  1. MOV - Пересылка данных

Команда mov замещает первый операнд (приемник) вторым (источником). При этом исходное значение первого операнда теряется. Второй операнд не изменяется. В зависимости от описания операндов, пересылается слово или байт. Если операнды описаны по-разному, или режим адресации не позволяет однозначно определить размер операнда, для уточнения размера передаваемых данных в команду следует включить один из атрибутными операторов byte ptr или word ptr. Команда не воздействует на флаги процессора.

В зависимости от используемых режимов адресации, команда mov может осуществлять пересылки таких видов:

• из регистра общего назначения в регистр общего назначения;

• из регистра общего назначения в ячейку памяти

• из регистра общего назначения в сегментные регистры DS, ES и SS;

• из ячейки памяти в регистр общего назначения;

• из ячейки памяти в сегментный регистр;

• из сегментного регистра в регистр общего назначения;

• из сегментного регистра в ячейку памяти

• непосредственный операнд в регистр общего назначения;

• непосредственный операнд в ячейку памяти.

Запрещены пересылки из ячейки памяти в ячейку памяти (для этого предусмотрена команда movs), а также загрузка сегментного регистра непосредственным значением, которое, таким образом, приходится загружать через регистр общего назначения (см. выше).

mov AX, seg mem ;Сегментная адреса ячейки mem

mov DS, AX ;3агрузка его в регистр DS

Нельзя также непосредственно переслать содержимое одного сегментного регистра в другой. Такого рода операции удобно выполнять с использованием стека:

push DS

pop ES ; DS копируется в ES

  1. Push / pop - Сохранение / извлечение операнду из стека

Стек - память, организованная по принципу LIFO (Last In - First Out, последним вошел - первым

вышел). Команда push уменьшает на 2 содержимое указателя стека SP и заносит по адресу SS: SP новые данные по указанного регистра или ячейки памяти. Проталкивать в стек можно только целое слово (не байт).

Каждой команде push должна соответствовать обратная команда выталкивания из стека pop. Если стек для временного хранения некоторых данных, то извлекать эти данные из стека следует в

обратном порядке хранению.

Команды не влияют на флаги процессора.

  1. Обмен данных между операндами

Пару команд push - pop часто используется для пересылки данного из регистра в регистр.

Команда xchg пересылает значение первого операнда во второй, а второго - в первый. В качестве любого операнду можно указывать регистр (кроме сегментного) или ячейку памяти, однако не допускается определять оба операнда одновременно как ячейки памяти. Операнды могут быть байтами или словами и представлять числа со знаком или без знака. Команда не воздействует на флаги процессора.

mov AX, 0FF01h

mov SI, 1000h

xchg AX, SI ; AX=01000h, SI=FF01h

Задача 3.1

data segment para 'data' ;Откроем сегмент данных

memb db 5,6

memd dd 0 ;Двухсловная ячейка

data ends ;Откроем сегмент данных

assume CS:code, DS:data ;Определим соответствие сегментных регистров сегментам

stk segment stack para 'stack' ;Откроем сегмент стека

db 256 dup (?) ;Отведем под стек 256 байт

stk ends ;Закроем сегмент стека

code segment para 'code' ;Откроем сегмент команд

begin: mov AX, data ;Настроим DS

mov DS, AX ;на сегмент данных

mov DX, AX ;Из регистра в регистр

mov AL, memb ;Из памяти в регистр

mov AX, 0B800h ;Непосредственное значение в регистр

mov ES, AX ;Из регистра в сегментный регистр

mov word ptr memd+2, ES ;Из сегментного регистра в память

mov word ptr memd, 2000 ;Непосредственное значение в память

mov BX, word ptr memb ;Слово из памяти в регистр (число 0605)

mov DI, word ptr memd ;Слово из памяти в регистр

mov ES, word ptr memd+2 ;Слово из памяти в сегментный регистр

mov AX, 4C00h ;Функция DOS завершения программы

int 21h ;Вызов функции DOS

code ends ;Закроем сегмент команд

end begin ;Конец текста с точкой входа

Задача 3.2

data segment para 'data'

data1 dw 10000 dup(1) ;Массив произвольных данных

data2 dw 5000 dup(2) ;Массив-приемник данных

data ends

assume CS:code, DS:data

stk segment stack para 'stack'

db 256 dup (?)

stk ends

code segment para 'code'

begin: mov AX, data ;Настроим DS

mov DS, AX ;на сегмент данных

push DS ;Настроим

pop ES ;ES на тот же самый сегмент данных

mov SI, offset data1 ;SI -> data1

add SI, 5000 ;Поместим SI в середину массива

mov DI, offset data2 ;DI -> data2

mov CX, 2500 ;Размер половины массива (в словах)

cld ;Направление вперед

rep movsw ;Переместим вторую половину массива data1 на место data2

mov AX, 4C00h

int 21h

code ends

end begin

  1. Всего единиц:(62A8 – 0100)16=250010

  2. Всего двоек: (7230-62А8)16=500010

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]