КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
В которой второй операнд непосредственный
ПРЯМАЯ АДРЕСАЦИЯ С БАЗИРОВАНИЕМ И ИНДЕКСИРОВАНИЕМ АДРЕСАЦИЯ С БАЗИРОВАНИЕМ И ИНДЕКСИРОВАНИЕМ + d8 АДРЕСАЦИЯ С БАЗИРОВАНИЕМ И ИНДЕКСИРОВАНИЕМ АДРЕСАЦИЯ ПО СУММЕ БАЗОВОГО РЕГИСТРА И СМЕЩЕНИЯ
MOV [BX+3],AL;-> аналогично предыдущему способу MOV BX,[BP+2] BX:=((BP)+2); <- слово При такой форме записи адресация по SS, т. е. осуществляется прямое обращение к стеку без использования PUSH и POP. Задача: по значению элементов массива Х сформировать массив Y, в котором X[i-1] + X[i+1] Y[i] = ----------------------- 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,AX; Ё AX:=X[1] MOV Y,AH; Ё 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 5 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(A) ;Начальное значение SI = 0 SUB SI,SI ;SI указывает на текущий элемент строки ;Дельта SI = size(A) ;Условно BX соответствует индексу i, а SI - j
Команды MOV [BP+SI],BL MOV AX,[BP+SI] выполняются аналогично, но адресуются в стек.
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) /
r/m │ mod = 01 │ mod = 10 ─────┼──────────────── 000 │ (BX)+(SI)+d8(16) 001 │ (BX)+(DI)+d8(16) 010 │ (BP)+(SI)+d8(16) 011 │ (BP)+(DI)+d8(16)
Данный способ адресации позволяет проводить эффективную обработку двумерных массивов.
┌───┬───┬───┬───┬───┐ А – прямой адрес матрицы или ; │A11│A12│A13│A14│A15│>┐ адрес первого элемента ; └───┴───┴───┴───┴───┘ │ BX – смешение строк матрицы ; ┌───────────────────────┘ ; │ ┌───┬───┬───┬───┬───┐ ; └>│A21│A22│A23│A24│A25│>┐ ; └───┴───┴───┴───┴───┘ │; ; ┌───────────────────────┘ ; │ ┌───┬───┬───┬───┬───┐ ; └>│A31│A32│A33│A34│A35│ ; └───┴───┴───┴───┴───┘
MOV BX,0;первая строка ;Дельта BX = m * size(A) - нашем случае - 1 байт ;SI - смещение элементов внутри строки MOV si,0; -> текущий элемент в строке ;Дельта SI = size(A) - нашем случае - 1 байт ;EA = (базовый адрес А) + (BX) + (SI)
ДВУХОПЕРАНДНАЯ КОМАНДА,
7 0 7 0 ┌───────┬──┬─┐ ┌───┬────┬─────┐ ┌ ─ ─ ─┐ ┌ ─ ─ ┐ ┌─────┐ ┌ ─ ─ ┐ │ KOP │S │W│ │mod│ kop│ r/m │ dispL dispH │dataL│ dataH └───────┴──┴─┘ └───┴────┴─────┘ └ ─ ─ ─┘ └ ─ ─ ┘ └─────┘ └ ─ ─ ┘
Бит направления d в данной команде не нужен, т. к. результат помещается только на место первого операнда. Поэтому биты s,w определяют формат второго операнда.
┌── │ *0, один байт данных dataL sw=│ 01, два байта данных dataL dataH │ 11, один байт данных, при выполнении команды расширяется до слова └──
Add bx,5h │ └────────────────┐ └─────────┐ │ ┌──────┬─┬─┐ ┌──┬─────┬───┐ ┌─────┐ │ kop │0│1│ │11│ кор │011│ │00 05│ └──┬───┴─┴─┘ └──┴──┬──┴───┘ └──┴──┘ │ s w mod │ r/m data └───────┬────────┘ код операции
Предположим, что А имеет размерность byte, тогда: Sub A[BX+SI],-8 – НО с базированием и индексированием ┌──────┬─┬─┐ ┌──┬─────┬───┐ ┌─────────────┐ ┌──┐ │ kop │0│0│ │10│ кор │000│ │ пр. адрес А │ │F8│ └──────┴─┴─┘ └──┴─────┴───┘ └──────┴──────┘ └──┘ disp dataL
Дата добавления: 2014-01-04; Просмотров: 354; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |