Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
8_ПР_2011.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
154 Кб
Скачать
☆

2) Lds и les (Load ds и Load es) — команды загрузки адреса, состоящего из двух слов, в пару регистров (сегментный регистр и, чаще всего, базовый).

LDS регистр, переменная (двойное слово)

LES регистр, переменная (двойное слово)

Младшее слово, находящееся в переменной, загружается в регистр (1-ый операнд), старшее слово — в сегментный регистр DS (если LDS) и ES (если LES).

ПРИМЕР

t1 dd 565A0053h ; дальний адрес

……………..

LDS bx, t1 ; в DS запишется сегментный адрес 565Ah

; а в BX — 0053h

LES bp, t1 ; аналогично, только номер сегмента — в ES,

; а смещение в BP

jmp FAR DS:[BX] ; при этом будет происходить переход в другой

jmp FAR ES:[BP] ; сегмент кода.

Таким образом, команды пересылки адреса LES и LDS позволяют организовать переход в другой сегмент по заранее заготовленному адресу. То есть заранее в памяти в переменной t1 каким-то образом формируют два слова: номер сегмента и смещение, а затем их засылают, например, с помощью команды LDS в DS и в BX. Это дает возможность адресоваться к другому сегменту.

Команды LDS и LES часто используются в системном программировании, когда пишутся собственные обработчики прерываний, и нужно переходить между сегментом кода своей программы и сегментом кода стандартных обработчиков.

Для того чтобы обрабатывать массив в ассемблере, нужно знать, где он хранится (его начальный адрес), и длину его элемента. Как и в языке C/C++, имя массива в ассемблере является и его начальным адресом.

Архитектура CPU предоставляет достаточно удобные программно-аппаратные средства для работы с массивами. К ним относятся базовые и индексные регистры, позволяющие реализовывать несколько режимов адресации данных. Используя базовый, индексный, базово-индексный и базово-индексный со смещением режимы адресации можно организовать эффективную работу с массивами в памяти.

Например, индексный режим адресации вида имя_массива [регистр_индекса] позволяет обрабатывать каждый элемент массива, изменяя значение индексного регистра SI, DI.

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

  1. Перечислением элементов массива в поле операндов одной из директив описания данных. При перечислении элементы разделяются запятыми.

Например:

; массив из 4-х элементов. Размер каждого элемента – машинное слово

mas dw 0d50h, 77FFh, 5080h, 0ah

2. Используя оператор повторения dup. Его используют обычно для резервирования памяти с целью размещения и инициализации элементов массива.

Например:

;массив из 25 букв "а"

mas db 25 dup ("a")

3. Используя директивы label и rept. Директива rept относится к макросредставм языка ассемблера и вызывает повторение указанное число раз строк, заключенных между директивой и строкой endm. Достоинство директивы label в том, что она не резервирует память, а лишь определяет характеристики ячейки памяти. Использование нескольких директив label, записанных одна за другой, дает возможность присвоить одной и той же области памяти разные имена и типы.

Например:

mas1 label byte

mas2 label word

rept 8

db 0Ch

endm

В результате в памяти будет создана последовательность из 8 байт 0Ch. Эту последовательность можно трактовать как массив байт с именем mas1 или как массив слов с именем mas2.

4. Использованием цикла для инициализации значениями области памяти, которую можно будет впоследствии трактовать как массив.

Например:

mas dw 10 dup (?)

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