Скачиваний:
26
Добавлен:
15.06.2014
Размер:
28.67 Кб
Скачать

Организация памяти

Память с точки зрения процессора представляет собой последовательность байт, каждому из которых присвоен уникальный адрес. Он может принимать значения от 0 до 232-1 (4 гигабайта). Программы же могут работать с памятью как с одним непрерывным массивом (модель памяти flat) или как с несколькими массивами (сегментированные модели памяти). Во втором случае для задания адреса любого байта требуется два числа — адрес начала массива и адрес искомого байта внутри массива. Помимо основной памяти программы могут использовать регистры — специальные ячейки памяти, расположенные физически внутри процессора, доступ к которым осуществляется не по адресам, а по именам. Данные можно размещать в памяти по любому адресу, хотя для ускорения лучше по четным адресам

Способы адресации данных.

Способом, или режимом адресации называют процедуру нахождения операнда.Существует ряд способов адресации.

Регистровый.

Операнд (байт или слово) находится в регистре. Этот способ адресации применим ко всем программно-адресуемым регистрам процессора.

inc cx ;Увеличение на 1 содержимого AX

Непосредственный.

Операнд (байт или слово) указывается в команде; он может иметь любой смысл (число, адрес, код ASCII), а также быть представлен в виде символического обозначения.

mov ah,10h ;Число 40h загружается в AH

int 21h ;Команда прерывания 21h

Важным применением непосредственной адресации является пересылка относительных адресов (смещений). Чтобы указать, что речь идет об относительном адресе, а не об ее содержимом, используется описатель OFFSET:

mes db ‘Wait’ ;Строка символов

mov dx,offset mes;Адрес строки в DX

Прямой.

Адресуется память; адрес ячейки памяти (слова или байта) указывается в команде:

;Сегмент данных

mem dw 0 ;Резервируется слово данных и инициализируется нулем

;Сегмент кода

inc mem ;Содержимое этого слова увеличивается на 1

mov dx,mem ;Содержимое слова с именем mem загружается в регистр DX

Строго говоря, процессору следует передать информацию о том, с помощью какого сегментного регистра определить адрес:

inc ds:mem

movdx,ds:mem

Однако по умолчанию все смещения вычисляются относительно ds, поэтому в данном случае это указание сегментного адреса избыточно. В тех же случаях, когда рассматриваемая ячейка находится в сегменте, адресуемом через какой-либо другой сегментный регистр (ES, CS, SS), указание сегментного регистра является обязательным.

Часто нужно бывает обращаться к памяти по известному абсолютному адресу. В этом случае указание сегментного регистра также является обязательным:

mov al,es:17h ;Загрузка AL из ячейки с адресом 17h относительно ES

При обращении по абсолютным адресам константа, определяющая адрес может быль заключена в квадратные скобки.

mov al,ds:[17h]

Регистровый косвенный .

Адресуется память (байт или слово). Относительный адрес операнда находится в регистрах BX или BP (базовая адресация) или в регистрах SI или DI (индексная адресация). При использовании регистров BX, SI, DI подразумевается сегмент, адресуемый через DS, при использовании BP подразумевается сегмент стека и, соответственно, регистр SS. Допускается замена сегмента. Обозначение этого способа адресации:

[BX] (подразумевается DS:[BX])

[BP] (подразумевается SS:[BP])

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

mov si,offset cells ;Относительный адрес ячейки cells загружается в SI

mov ax,[si] ;Содержимое ячейки cells загружается в AX

inc [si] ;Инкремент содержимого ячейки

mov bx,[si] ;Новое содержимое ячейки cells загружается в BX

Соседние файлы в папке Ответы на билеты