Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
методичка1-4.doc
Скачиваний:
25
Добавлен:
01.09.2019
Размер:
306 Кб
Скачать
☆

2.2. Прямая адресация

Наиболее естественный способ адресации данных – это прямая адресация, когда адрес нужной ячейки памяти является частью команды, например: MOV АL, А

Здесь содержимое ячейки с адресом А помещается в регистр АL. Аналогичным способом можно произвести и обратное действие: MOV А, АL содержимое регистра АL пересылается в ячейку памяти, адрес которой определяется в результате трансляции ассемблером символического имени А.

2.3. Косвенная адресация

Существует способ адресации памяти, при котором исполнительный адрес выбирается из некоторого регистра, а не из самой команды.

Например, в команде MOV АL, [DI] исполнительный адрес содержится в регистре DI; квадратные скобки указывают на то, что содержимое регистра DI является адресом некоторой ячейки памяти. Описанным способом можно использовать любой четырех регистров SI,DI,BX,BP.

Чтобы занести адрес в один из указанных регистров можно использовать конструкцию offset:

mov BX, offset AB

Благодаря присутствию здесь оператора offset в регистр BX загрузится адрес области памяти с именем АВ. Команда mov АX, [ВХ] занесет в регистр АХ (аккумулятор)значение 3145Н. Если дважды инкрементировать (т.е. увеличить на единицу) содержимое регистра ВХ и снова выполнить эту же команду в регистре АХ окажется значение 4456Н:

INC BX

INC BX

MOV AX, [BX]; в регистре АХ значение 4456Н.

Напишем простую программу, выполнение которой будем наблюдать в отладчике. Пусть в сегменте данных резервируется два слова. Запишем в первое слово значение 27FC, во второе 573А.

dat SEGMENT; начало сегмента данных

A DW 2 dup(?)

dat ENDS; конец сегмента данных

ASSUME CS: cod, DS: dat

cod SEGMENT; начало кодового сегмента

START: mov AX, dat; инициализация

mov DS,AX; сегментного регистра

mov A, 27FCH;запись числа в первое зарезервированное слово

mov A+2, 573AH; запись числа во второе зарезервированное слово

RET

cod ENDS; конец кодового сегмента

END START

2.4. Директива assume

Директива ASSUME сообщает Ассемблеру назначение каждого сегмента. Так в директиве ASSUME приведенной программы показывается, что сегмент с именем cod является кодовым сегментом (в нем содержится программа), а сегмент с именем dat является сегментом данных и он соотносится с регистром DS.

2.5. Индивидуальные задания

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

Имя

Вариант 1

Вариант 2

Вариант 3

Вариант 4

Вариант 5

Т1

5 слов без инициал-и (исп. dup)

строка симво-лов «веселый день»

1 дв.слово без инициал-и

1 байт без инициал-и

2 слова без инициал-и (исп. dup)

Т2

строка сим-в «кислые щи»

6 слова без инициал-и (исп. dup)

послед. 4 байт: 82Н,137,А5Н, 1100111В

4 слова со знач.Е48АН (исп. dup)

послед. 4 слов: А83Н,F47H, 892,101110111B

Т3

3 слова со знач.А584АН (исп. dup)

послед. 6 байт: 89Н,10010010В, 254,ААН, -112, 7FH

5 слова со

знач. ЕF3AH (исп. dup)

строка сим-в «промозглая сырость»

строка сим-в «острова в океане»

Т4

послед. 4 байт:4АН,F7H, -54,111101В

послед. 2 слов: 7777Н,8888Н

строка сим-в «Кошкин дом»

послед. 3 байт: 84Н, -111,СЕН

4 байт со знач. 55Н (исп. dup)

Имя

Вариант 6

Вариант 7

Вариант 8

Вариант 9

Вариант 10

Т5

6 слов без инициал-и (исп. dup)

строка сим-в «бедная овечка»

1 дв.слово без инициал-и

1 байт без инициал-и

2 слова без инициал-и (исп. dup)

Т6

строка сим-в «литературный вечер»

3 слова без инициал-и (исп. dup)

послед. 4 байт: 82Н,137,А5Н, 1100111В

4 слова со знач.Е48АН (исп. dup)

послед. 4 слов: А83Н,F47H, 892,101110111B

Т7

2 слова со знач.А584АН (исп. dup)

послед. 5 байт: АЕН,1011011В, 135, F4H,-96

4 слова со

знач. Е73AH (исп. dup)

строка сим-в «паук каракурт»

строка сим-в «муха цокотуха»

Т8

послед. 5 байт: 7ЕН,В5Н, -103, 1110100В,250

послед. 3 слов: ЕЕF7Н,12А8Н, СА34Н

строка сим-в «ночь в опере»

послед. 3 байт: -35Н, -1107, FАН

6 байт со знач. F4H (исп.dup)

При выполнении последующих пунктов задания использовать оператор MOV.

  1. Инициализировать сегментные регистры DS,ES

  2. Записать по адресу

Вариант 1

Вариант 2

Вариант 3

Вариант 4

Вариант 5

Т3+2

слово 3333Н

Т2+2

слово 4444Н

Т3+4

слово 7777Н

Т1

байт FАH

Т4+1

байт FАH

Вариант 6

Вариант 7

Вариант 8

Вариант 9

Вариант 10

Т5+4

слово ВССВН

Т6+4

слово FАFАH

Т7+6

слово АА56Н

Т5

байт 7АН

Т8+3

байт FАH

  1. Занести в указанный регистр адрес ячейки, используя синтаксическую конструкцию с “OFFSET”:

Вариант 1

Вариант 2

Вариант 3

Вариант 4

Вариант 5

BX, T1+4

SI, T2

DI, T1+2

BX, T2+6

SI, T3+1

Вариант 6

Вариант 7

Вариант 8

Вариант 9

Вариант 10

BX, T7+2

SI, T6

DI, T7+4

BX, T8+2

SI, T5+3

  1. Занести в регистр АХ содержимое указанного сегментного регистра

Вариант 1

Вариант 2

Вариант 3

Вариант 4

Вариант 5

DS

SS

ES

CS

DS

Вариант 6

Вариант 7

Вариант 8

Вариант 9

Вариант 10

ES

CS

DS

SS

ES

  1. Записать в память значение аккумулятора (слово), адресуемое указанным регистром

Вариант 1

Вариант 2

Вариант 3

Вариант 4

Вариант 5

BX

SI

DI

BX

SI

Вариант 6

Вариант 7

Вариант 8

Вариант 9

Вариант 10

BX

SI

DI

BX

SI

  1. Инкрементировать дважды значение адреса в регистре, указанном в предыдущем пункте. Инкрементировать значение аккумулятора. Использовать оператор INC reg.

  2. Повторить пункт 5.

  3. Используя, оператор MOV изменить 6-ю букву в строке символов на букву “W”.

Пример оформления программы приведен ниже.

assume cs: code, ds: dat

dat segment

t1 bd ’тучи над городом’

t2 dw 7 dup(?)

t3 dw 1f47h,1222h,10011011b,1345h,6789

t4 dw ?

t5 dw 0a45h

dat ends

code segment

start:

mov ax, dat

mov ds, ax

mov t4, 2222h

mov ax, ds

mov cx, ofsset t3

MOV bx, cx

mov dx, [bx]

mov t3+6,1111; в память по адресу Т3+6 (т.е.30)

;заносится значение 1111.

mov si, offset t2; в регистр заносится адрес Т2,

;который равен 16

mov ax, 1112h

mov [si], ax; в память по адресу, хранящемуся в SI

;заносится знач. аккум.

inc si; инкрементирование содержимого регистра SI

; (содержимое SI увелич. на 1)

inc si

inc ax

MOV ax, cx

mov [si]

ret

code ends

end start