Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КОНСПЕКТ ЛЕКЦИЙ ПО АССЕМБЛЕРУ.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
471.55 Кб
Скачать

Адресация по сумме базового регистра и смещения

MOV [BX+3],AL ;-> аналогично предыдущему способу

MOV BX,[BP+2]

BX:=((BP)+2); <- слово

При такой форме записи адресация по SS, т. е. осуществляется прямое обращение к стеку без использования PUSH и POP.

Задача: по значению элементов массива Х сформировать массив Y, в котором

X[i-1] + X[i+1]

Y[i] = -----------------------

2

i = 2,3 .. n-1

Y[1] = X[1]; Y[n] = X[n]

----------------------------------

X DW 20 DUP(?)

Y DW 20 DUP(?)

N DW ?

----------------------------------

MOV AX,X ; AX:=X[1]

MOV Y,AX ; Y[1]:=X[1]

MOV CX,N

SUB CX,2

MOV SI,2 ;индекс Х[2]

ML: MOV DI,offset Y+2

MOV AX,X[SI-2] ; AX:=X[i-1]

ADD AX,X[SI+2] ; AX:=X[i-1]+X[i+1]

MOV BX,2

CWD

IDIV BX

MOV [DI],AX

ADD DI,2

ADD SI,2

DEC CX

JNZ ML

; после выхода из цикла SI указывает на Х[n], а DI - на Y[n]

MOV AX,X[SI]

MOV [DI],AX

Адресация с базированием и индексированием

(BX)+(DI) = EA

(BP)+(DI) = EA

MOV [BX+SI],AL – одинаковые команды

MOV [BX][SI],AL

d w mod reg r/m

┌───────┬───┬───┐ ┌───┬───┬───┐ команда двухбайтная т. к. нет

│ KOП │ 0 │ 0 │ │ 00│000│000│ смещения

└───────┴───┴───┘ └───┴───┴───┘

Пример использования такой команды – обработка матриц.

A DB 15 DUP(?)

M DW 3 ; число строк

N DW 5 ; число столбцов

; ┌───┬───┬───┬───┬───┐

; │A11│A12│A13│A14│A15│>┐ Пусть BX содержит начальный

; └───┴───┴───┴───┴───┘ │ адрес поля А

; ┌───────────────────────┘

; │ ┌───┬───┬───┬───┬───┐

; └>│A21│A22│A23│A24│A25│>┐

; └───┴───┴───┴───┴───┘ │;

; ┌───────────────────────┘

; │ ┌───┬───┬───┬───┬───┐

; └>│A31│A32│A33│A34│A35│

; └───┴───┴───┴───┴───┘

MOV BX,offset A

;В дальнейшем BX будем использовать для адресации строк. В

;исходном состоянии BX указывает одновременно на 1-ю строку

;Дельта BX = m * size(элемента)= m * 1; длина строки в байтах

;Начальное значение SI = 0

SUB SI,SI

;SI указывает на текущий элемент строки

;Дельта SI = size(элемента)=1.

;Условно BX соответствует индексу i, а SI - j

Команды MOV [BP+SI],BL

MOV AX,[BP+SI]

выполняются аналогично, но адресуют поля байт или слов в стек.

АДРЕСАЦИЯ С БАЗИРОВАНИЕМ И ИНДЕКСИРОВАНИЕМ + d8

MOV [BX+SI-1],AL

┌───┬───┬───┬───┬───┐

│A11│A12│A13│A14│A15│>┐ Пусть [BX+SI] указывает на элемент

└───┴───┴───┴───┴───┘ │ А22, тогда [BX+SI-1] указывает на

┌───────────────────────┘ элемент А21. Считаем что элементы матрицы

│ ┌───┬───┬───┬───┬───┐ размером один байт.

└>│A21│A22│A23│A24│A25│>┐ Диапазон d8 -> -128..127

└───┴───┴───┴───┴───┘ │;

┌───────────────────────┘

│ ┌───┬───┬───┬───┬───┐

└>│A31│A32│A33│A34│A35│

└───┴───┴───┴───┴───┘

MOV [BX+SI-1],AL

d w mod reg r/m DISPL

┌───────┬───┬───┐ ┌───┬───┬───┐ ┌────┐

│ KOП │ 0 │ 0 │ │ 01│000│000│ │ FF │

└───────┴───┴───┘ └───┴───┴───┘ └────┘

EA = (BX) + (SI) + DISPL

(BX)+(SI)+d8(16) \ работают с DS

(BX)+(DI)+d8(16) /

(BP)+(SI)+d8(16) \ работают с SS

(BP)+(DI)+d8(16) /