TURBO PASCAL |
Новости
|
Адресация
В архитектуре МП 8086/8088 адрес любого байта задается двумя 16-битовыми словами - сегментом и смещением. При формировании 20-разрядного полного адреса, необходимого для адресации в пределах 1 Мбайт, сегмент сдвигается влево на 4 разряда (умножается на 16) и складывается со смещением. Поскольку емкость 16-разрядного смещения составляет 65536 значений, в пределах одного сегмента можно адресовать до 64 Кбайт. Архитектура МП позволяет использовать семь различных способов адресации. Регистровая Извлекает операнд из регистра или помещает его в регистр. Примеры: mov ах,bх {Извлекаем из ВХ и помещаем в АХ} add cx,ax {Содержимое АХ прибавляем к СХ} push ex {Заталкиваем в стек содержимое СХ} Непосредственная Операнд (8- или 16-разрядная константа) содержится непосредственно в теле команды. Примеры: mov ax,100 {Загружаем в АХ значение 100} add ax,5 {К содержимому АХ прибавляем 5} mov cx,$FFFF {Помещаем в СХ значение 65535} Прямая Смещение операнда задается в теле программы и складывается с регистром DS; например: var X: Word; В: Byte; ....... mov ах,Х {Пересылаем значение переменной X регистр АХ} add ah,В {К содержимому регистра АН прибавляем значение переменной В} mov X,ax {Пересылаем содержимое регистра АХ, в область памяти переменной X} Косвенная регистровая Исполнительный адрес операнда (точнее, его смещение) содержится в одном из регистров ВХ, ВР, SI или DI. Для указания косвенной адресации этот регистр должен заключаться в квадратные скобки, например: mov ax,[bx] {Содержимое 16-разрядного слова, хранящегося в памяти по адресу DS:BX,пересылаем в регистр АХ}; Каждый из регистров BX...DI по умолчанию работает со своим сегментным регистром: DS:BX, SS:BP, DS:SI, ES:DI Допускается явное указание сегментного регистра, если он отличается от умалчиваемого, например: mov ax,es:[bx] Адресация по базе Базовый регистр ВХ (или ВР) содержит базу (адрес начала некоторого фрагмента памяти), относительно которой ассемблер вычисляет смещение, например: mov ах,[Ьх]+10 {Загружаем в АХ 10-й по счету байт от начала базы памяти по адресу DS-.BX}; Индексная адресация Один из индексных регистров SI или DI указывает положение элемента относительно начала некоторой области памяти. Пусть, например, АОВ - имя массива значений типа Byte. Тогда можно использовать такие фрагменты: mov si,15 {Помещаем в SI константу 15} mov ah,АОВ[si] {Пересылаем в АН 16-й по порядку байт от начала массива} mov si,0 mov AOB[si],ah {Пересылаем полученное в самый первый элемент массива} Адресация по базе с индексированием Вариант индексной адресации для случая, когда индексируемая область памяти задается своей базой. Например: mov ax,[bx][si] Этот тип адресации удобен при обработке двумерных массивов. Если, например, АОВ есть массив из 10x10 байт вида var АОВ: array [0..9,0..9] of Byte; то для доступа к элементу АОВ [2,3] можно использовать такой фрагмент mov bx,20 {База строки 2} mov si,2 {Номер 3-го элемента} mov ax,AOB[bx] [si] {Доступ к элементу}
|
(с)Все права защищены По всем интересующим вопросам прошу писать на электронный адрес |