Logo GenDocs.ru

Поиск по сайту:  


Загрузка...

Шпоры по ЭВМ - файл Методичка_АСС.doc


Шпоры по ЭВМ
скачать (348.5 kb.)

Доступные файлы (2):

Методичка_АСС.doc353kb.15.03.2009 21:33скачать
шпоры по ЭВМ.docx320kb.28.10.2009 08:01скачать

содержание
Загрузка...

Методичка_АСС.doc

  1   2
Реклама MarketGid:
Загрузка...
ЛАБОРАТОРНАЯ РАБОТА № 1

ТРАНСЛЯЦИЯ, КОМПОНОВКА И ОТЛАДКА ПРОГРАММ
1. ЦЕЛЬ И ЗАДАЧА РАБОТЫ
Целью работы является освоение инструментальных средств создания программ на языке ассемблера и получение начальных навыков трансляции, компоновки и отладки программ.

Задача работы состоит в изучении процедур формирования исполняемой программы на заданном примере.
2. ОСНОВНЫЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ

2.1. Архитектура компьютера
Структурные схемы компьютеров мало чем отличаются у разных моделей компьютеров: все компьютеры имеют оперативную память, процессор, внешние устройства. Различными являются способы, средства и используемые ресурсы, с помощью которых компьютер функционирует как единый механизм. Совокупность функциональных программно-управляемых свойств компьютера называют архитектурой.

Архитектура ЭВМ – это абстрактное представление ЭВМ, которое отражает структурную, схемотехническую и логическую организацию. Приступить к изучению языка ассемблера любого компьютера имеет смысл только после выяснения того, какая часть из вышеперечисленных аспектов архитектуры оставлена видимой и доступной для программирования. Это так называемая программная модель компьютера. В приложении А приведена программная модель микропроцессора Intel (Pentium III) [1]. Как видно из приведенной модели, ее основу составляют регистры общего назначения, состояния и ряд других. В разных моделях компьютеров одной и той же фирмы-производителя количество и разрядность регистров могут существенно изменяться. Но в качестве базовой модели для языка программирования микропроцессоров Intel используется 14-регистровая система, на которой остановимся далее подробнее.

^ Универсальные регистры AX, BX, CX, DX имеют разрядность 16 бит (2 байта) и могут использоваться для временного хранения любых данных, при этом можно работать с каждым регистром целиком, а можно отдельно с каждым его байтом. Старшие байты РОН имеют имена AH, BH, DH, CH, а младшие – AL, BL, DL, CL. Регистры AL, AH образуют соответственно младший и старший байты условного регистра AX.

В микропроцессорах Intel программы и данные хранятся в отдельных областях памяти - сегментах, с объемом до 64 КБ (килобайт). Одновременно микропроцессор может иметь дело с 4 сегментами, начальные адреса которых содержатся в сегментных регистрах CS, DS, SS, ES. Эти регистры выполняют следующие функции:

- регистр сегмента команд CS указывает на сегмент, содержащий текущую исполняемую программу. Для вычисления адреса следующей подлежащей исполнению команды процессор складывает значение CS умноженное на 16 с указателем команд IP;

- регистр сегмента стека SS указывает на текущий сегмент стека - области памяти предназначенной для временного хранения данных и адресов;

- регистр сегмента данных DS указывает на текущий сегмент данных, который обычно содержит используемые в программе переменные и константы;

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

Регистры указателей также, как и сегментные регистры, предназначены для хранения составных частей адресов.

Регистр IP содержит смещение в сегменте кодов следующей команды, подлежащей исполнению, иначе говоря, абсолютный адрес следующей команды программы в виде сегмент:смещение определяется как CS:IP.

Регистр SP хранит значение смещения, которое вместе с регистром SS указывает на текущее слово в стеке (вершина стека).

Регистр BP обрабатывает ссылочные параметры (данные и адреса), которые передаются между программой и подпрограммой через стек. Процессор сочетает смещение BP с адресом в SS.

Регистры индексов SI и DI используются для индексированной адресации, а также в строковых операциях.

Следует отметить, что регистр ВХ – единственный из РОН – можно использовать в качестве указателя (индекса) для расширения адресации. С это целью он может использоваться в сочетании с регистрами SI и DI.

Регистр флагов FL представляет собой 16-битовый регистр, где фиксируется информация о текущем состоянии процессора.

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0









OF

DF

IF

TF

SF

ZF



AF



PF



CF


Рис. 1 – Расположение флагов в регистре ^ FL
Наиболее часто используемые флаги (арифметические):

- OF называется флагом переполнения и OF=1 свидетельствует о наличии ошибки в операциях над числами со знаком;

- SF- флаг знака- устанавливается в 1, если в результате выполнения операции над числами со знаком, получается отрицательное число;

- ZF (zero flag) устанавливается в 1, если результатом операции является нулевое значение;

- АF -флаг вспомогательного переноса - используется в двоично-десятичной арифметике. Этот флаг устанавливается в 1, если результат такой операции не является десятичной цифрой;

- РF называется флагом четности и устанавливается в 1, если результат операции имеет четное количество битов, равных 1, в двоичном представлении результата;

- СF называется флагом переноса и в него заносится перенос (или заем) из знакового (старшего) разряда числа.
^ 2.2. Описание частей программы на языке ассемблера
Оператором (строкой) исходной программы может быть или команда, или директива (псевдооператор) Ассемблера. Команды выполняются в процессе решения задачи на компьютере, а директивы - в процессе ассемблирования (трансляции) программы. Следовательно, в отличие от команд директивы сообщают Ассемблеру (транслятору), что ему делать с командами и данными, которые вводятся в программе.

Сегменты, из которых состоит программа, описываются посредством директив. Подробная директива определения начала сегмента:

Имя сегмента ^ SEGMENT [тип выравнивания (подгонки)] [тип связи] [‘класс’].

Тип выравнивания указывает, на границе слова (WORD ) или параграфа (PARA) должен быть установлен адрес начала сегмента. Выравнивание на границу параграфа означает, что адрес начала сегмента должен быть кратен 16 (на границе слова адрес кратен 2.

Тип связи (комбинирования сегментов) указывает, как нужно комбинировать одноименные сегменты различных модулей. По умолчанию предполагается PRIVATE, что означает, что сегмент не будет объединяться с сегментами с таким же именем вне данного модуля. Тип связи PUBLIC заставляет компоновщик объединить все сегменты с одинаковым именем в один сегмент. Объединенный сегмент будет непрерывным, все адреса данных или команд будут определяться относительно начала этого сегмента. В случае типа связи COMMON все сегменты с одним именем располагаются по одному адресу (перекрываются).

'Класс' - заключенная в кавычки строка символов определяет назначение сегмента и помогает компоновщику определить порядок следования сегментов внутри программы. Формально этот порядок может быть любым, но лучше, если все сегменты кода (содержат команды обработки) объединяются в общую группу. Заключенное в кавычки слово класс может принимать следующие значения: code, stack, data, что означает соответственно сегмент кода (команд программы), сегмент стека и сегмент данных.

Окончание сегмента определяется директивой:

Имя сегмента ENDS.

Между директивами начала и окончания сегмента записываются:

- для сегмента стека – директивы резервирования оперативной памяти. В этой области во время выполнения программы будут записываться результаты обработки, параметры вызываемых процедур, адреса возврата из процедур;

- в сегменте данных определяются структуры данных, переменные и константы;

- в сегменте кода – команды программы, которые выполняют заданное преобразование данных.

Ассемблер предлагает несколько способов упрощения определения сегментов. Однако, чтобы воспользоваться этой возможностью, необходимо определить модель памяти. Подробно об этом можно прочесть в литературе [1].

Каждый сегмент программы связывается с определенным сегментным регистром, который хранит адрес начала сегмента. Программист в директивах SEGMENT дает собственные имена сегментам, поэтому в начале программы (сегмента кода) должен связать имена сегментов с конкретными сегментными регистрами директивой

ASSUME CS: имя сегмента кода, DS: имя сегмента данных, SS: имя сегмента стека.

Например, в программе могут быть следующие директивы:

STACK SEGMENT PARA STACK ‘STACK’

. . . . . . . . . . . . .

^ STACK ENDS

DSEG SEGMENT PARA PUBLIC ‘DATA’

. . . . . . . . . . . . .

DSEG ENDS

CSEG SEGMENT PARA PUBLIC ‘DATA’

MAIN PROC FAR ; начало программы (основной процедуры)

ASSUME CS:CSEG, DS:DSEG, SS: STACK

. . . . . . . . . . .

MAIN ENDP ; конец процедуры

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

END MAIN ; конец программы

Как видно из этого примера, программы обработки оформляется как основная процедура, начало которой определяется директивой имя процедуры PROC, а конец – директивой имя процедуры ENDP. Конец программы определяет директива END имя процедуры.

В реальной программе вместо точек полужирного шрифта записываются команды Ассемблера, а вместо точек обычного шрифта – директивы определения типов данных, следующего формата:

[имя] ^ Dn выражение.

В этой директиве имя является идентификатором переменной или константы.

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

Собственно директива ^ Dn используется для определения элементов данных: DB – определить байт; DW – определить слово в два байта; DD – определить двойное слово (четыре байта); DF – определить дальнее слово; DQ – определить учетверенное слово; DT – определить удесятеренное слово.

Выражение – операнд, который может указывать неинициализированное значение (в этом случае заносится знак ‘?’) или конкретное значение. В приложении Б приведена более подробная таблица директив, а в приложении В - примеры определения данных.
^ 2.3. Процедуры формирования исполняемой программы
Последовательность процедур формирования программы на языке ассемблера и совокупность порождаемых файлов показана на рисунке 2.






Ассемблирова-ние (MASM)

Компоновка (LINK)

Отладка (TD, DEBUG)

Ввод текста







Рис. 2 – Процесс обработки ассемблер-программы
В процессе формирования программы на языке ассемблера выделено 4 этапа:

  • ввод исходного кода программы текстовым редактором,

  • трансляция программы,

  • создание загрузочного модуля,

  • отладка программы.

Начальной процедурой создания программы на языке Ассемблера является ввод исходного текста программы в файл с расширением .asm. При этом может быть использован любой текстовый редактор, сохраняющий текст в виде стандартных кодов ASCII, например, редактор NC или блокнот или редактор, встроенный в интегрированную среду Ассемблера.

Следующим шагом формирования программы является компиляция, которая носит специфическое название ассемблирование. Этот этап может быть выполнен программами ASM, MASM или TASM (сложность программ-компиляторов растет в указанной последовательности). Результатом выполнения этого этапа является программа в машинных кодах с расширением .obj, или, иначе, объектная программа, уже “понятная” микропроцессору. Естественно, перевод состоится лишь в том случае, если исходный текст программы не содержит ошибок. Одновременно с объектным файлом могут быть созданы файлы листинга (*.lst ) и перекрестных ссылок (*.crf). Рекомендуется файл листинга создавать обязательно, поскольку при наличии ошибок в листинге описывается характер ошибки сразу после ошибочной команды, что значительно упрощает внесение исправлений, особенно на этапе обучения.

Файл листинга содержит код ассемблера исходной программы, машинный (объектный) код каждой команды и ее смещение в кодовом сегменте (значение регистра IP). Кроме того, сообщения о найденных синтаксических ошибках в программе помещаются непосредственно после ошибочной команды (бывают исключения, когда ошибка не в самой команде, а ранее нее, но эти ситуации встречаются редко).

Однако объектная программа еще не является законченной и исполняемой, т.к. в ней определены не все адреса (программа не является “перемещаемой”) и не объединены части (блоки) программы, которые могут транслироваться отдельно с целью более простой отладки. Преобразование объектной программы в исполняемую (компоновка) выполняется загрузчиком (редактором связей) LINK либо TLINK (в зависимости от используемой программы ассемблирования: для ASM, MASMLINK, для TASMTLINK).

Чтобы проверить работоспособность созданной программы и увидеть результаты ее работы (если не использован вывод на дисплей), применяют программу отладчик. Тестирование и отладка исполняемой программы выполняется отладчиком TD или DEBUG.
^ 3. МЕТОДИКА ВЫПОЛНЕНИЯ РАБОТЫ
Этапы создания исходного текста программы, трансляции и компоновки не требуют дополнительных разъяснений, поскольку при их выполнении необходимо ввести только имя программы.

Отладчик td.exe, разработанный фирмой Borland International представляет собой оконную среду отладки программ на уровне исходного текста на языках Pascal, C, ассемблер. Основные возможности отладчика, наиболее широко используемые студентами - это:

  • выполнение трассировки программы в прямом направлении, при котором за 1 шаг выполняется одна машинная инструкция;

  • просмотр и изменения состояния аппаратных ресурсов микропроцессора во время командного выполнения программы.

Управлять работой отладчика можно с помощью системы меню двух типов:

  • глобального, находящегося в верхней части экрана и постоянно доступного. Вызов меню осуществляется выбором курсором мыши или нажатием клавиши F10;

- локального, учитывающего особенности окон и становящегося активным щелчком правой мыши или нажатием клавиш Alt+F10.

Специфика программы на ассемблере в том, что делать выводы о правильности ее функционирования можно, отслеживая работу на уровне микропроцессора, обращая внимание на то, как изменяется состояние ресурсов микропроцессора и компьютера в целом. Общее поведение программы позволяет просмотреть режим безусловного выполнения, который вызывается нажатием клавиши F9. Однако для детального изучения работы программы рекомендуется применять режим выполнения программы по шагам, для вызова которых выбираются пункты меню Run -> Trace into (прерывание или внутренняя процедура будут выполняться по шагам) или Run -> Step over (вызов процедуры или прерывание отрабатываются как одна обычная команда). В окне отладчика отражаются:

- команды выполняемой программы, причем курсор устанавливается на текущей команде;

- значения в регистрах и состояния флагов.

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

Рекомендуемый порядок работы с отладчиком:

а) вызвать на выполнение td.exe.;

б) выбрать файл исполняемой программы, набрав комбинации клавиш FILE ->OPEN и имя Вашей программы в окне запроса. После ответа OK на сообщение об отсутствии символьной таблицы в окно CPU загружается программа с нулевого адреса относительно начала сегментного регистра кодов (для приведенного в конце описания лабораторной работы примера это будет команда PUSH DS);

в) выбрать режим пошагового выполнения Run -> Step over. В окне CPU появляется окрашенный треугольник между относительным адресом команды и машинным кодом команды. Он показывает очередную команду, которая будет выполнена процессором после нажатия функциональной клавиши F8. Изменения, которые происходят в сегментных регистрах после выполнения команды, отмечаются белым цветом соответствующей строки в окне регистров. Пошаговый процесс выполнять до тех пор, пока не появится сообщение об окончании программы (с ключевым словом terminated);

г) после выполнения команд, связанных с изменением содержимого ячеек памяти, нужно просматривать эти изменения командой VIEW -> DUMP. При отсутствии мыши скрыть окно дампа памяти можно нажатием функциональной клавиши F6.
4. ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ
1. С использованием редактора текста набрать следующую программу:

^ TITLE EX_PROG

PAGE ,132

STACK SEGMENT PARA STACK ‘STACK’

DB 64 DUP(‘STACK) ; Область стека

STACK ENDS

DSEG SEGMENT PARA PUBLIC ‘DATA’

SOURCE DB 10,20,30,40 ; эта таблица будет скопирована

DEST DB 4 DUP(?) ; в эту таблицу в обратном порядке

DSEG ENDS

SUBTTL ОСНОВНАЯ ПРОГРАММА

PAGE

CSEG SEGMENT PARA PUBLIC ‘CODE’

ASSUME CS:CSEG, DS:DSEG, SS:STACK

OUR_PROG PROC FAR

;занести в стек такие начальные значения, чтобы программа

; могла возвратить управление отладчику

PUSH DS ; поместить в стек номер блока адреса возврата

SUB AX,AX ; обнулить регистр АХ

PUSH AX ; поместить в стек значение адреса возврата

MOV AX,DSEG; инициировать адрес сегмента данных

MOV DS,AX

; скопировать таблицу SOURCE в таблицу DEST в обратном порядке, в качестве промежуточной ячейки пересылки использовать регистр AL

^ MOV AL, SOURCE

MOV DEST+3,AL

MOV AL, SOURCE+1

MOV DEST+2,AL

MOV AL, SOURCE+2

MOV DEST+1,AL

MOV AL, SOURCE+3

MOV DEST,AL

RET ; возврат управления отладчику db

OUR_PROG ENDP

CSEG ENDS

END OUR_PROG

2. Оттранслировать программу в объектный код.

3. Скомпоновать программу (получить исполнимый файл). Изучить листинг программы.

4. Провести отладку программы и проверить получаемые результаты.

5. Внести в программу следующие изменения: задать исходную таблицу SOURCE из 5 двухбайтовых шестнадцатеричных переменных и скопировать эту новую таблицу в DEST.

6. В программе пункта 5 в сегменте данных дополнительно определить переменные, заполнив их следующими значениями:

  • 5 байтовых переменных AA, BB, CC, DD, EE;

  • 5 двухбайтовых слов AABB, BBCC, CCDD, DDEE, EEFF;

7. Получить исполнимый файл программы с данными пункта 6 и изучить дамп памяти данных с целью уяснения механизма размещения данных в оперативной памяти.
^ Требования к содержанию и оформлению отчета
Отчет должен включать:

а) титульный лист;

б) формулировку задачи работы;

в) описание результатов выполнения пунктов 3-7:

• листинги программ;

• результаты выполнения программ;

г) вывод, согласованный с задачей работы.
^ Критерии результативности выполнения работы
Лабораторная работа считается успешно выполненной, если:

  • отчет на бумажном носителе содержит все необходимые пункты согласно требованиям;

  • студент дает аргументированные пояснения по всем приведенным в отчете пунктам задания;

  • студент отвечает на контрольные вопросы преподавателя.


Контрольные вопросы
1. Какие группы регистров выделяются в микропроцессоре и каковы особенности их использования?

2. Какую функцию в микропроцессоре выполняет регистр флагов?

3. Как используется регистр команд IP?

4. Какие шаги необходимо выполнить для получения из программы на языке ассемблера исполняемого модуля?

5. Прокомментируйте содержание листинга программы.

ЛАБОРАТОРНАЯ РАБОТА № 2

РЕЖИМЫ АДРЕСАЦИИ
1. ЦЕЛЬ И ЗАДАЧА РАБОТЫ
Целью работы является освоение режимов адресации структурных данных и закрепление навыков трансляции, компоновки и отладки программ.

Задача работы – разработка простой линейной программы.
^ 2. ОСНОВНЫЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
Смещение, которое вычисляется операционным блоком для доступа к находящемуся в памяти операнду, называется исполнительным адресом операнда. Этот исполнительный адрес показывает, на каком расстоянии (в байтах) от начала сегмента располагается искомый операнд.

В зависимости от используемого режима адресации получение исполнительного адреса может заключаться только в извлечении его как составной части исполняемой команды, а могут потребоваться дополнительные операции сложения составной части команды с содержимым других регистров.

Различают адресацию операндов:

- непосредственную, которая заключается в указании в команде самого значения операнда, а не его адреса;

  • прямую, предполагающую указание в команде непосредственно исполнительного адреса;

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

  • неявную, когда адреса операндов в команде не указываются, а подразумеваются кодом операции.

Непосредственная адресация имеет место, если операнд-источник является константой или переменной, которой присвоено постоянное значение. Например:

MOV AX, 500 загружается значение 500 в РОН AX.

Следует отметить, что непосредственный операнд может быть задан простым выражением, в котором константы или идентификаторы констант связаны арифметическими операциями +, -, * или / (в таких выражениях не должно быть скобок). Например:

MOV AX, 156*10Н/2.

Следует помнить, что диапазон посылаемых чисел (значений непосредственного операнда) определяется вместимостью приемника - если это однобайтовый регистр (AH, AL, BL …), то в него можно посылать беззнаковые числа в диапазоне от 0 до 255, знаковые – от –128 до 127.

^ Регистровая адресация имеет место в командах, оперирующих с содержимым РОН или сегментных регистров в качестве одного или обеих операндов команды. Например, команда:

MOV DS, AX

копирует содержимое РОН АХ в сегментный регистр DS, при этом содержимое регистра AX не изменяется.

^ Обратите внимание! При использовании этого вида адресации в программах необходимо следить, чтобы разрядности обеих регистров были одинаковы.

Прямая адресация ячеек ОП имеет несколько вариантов:

  • прямая обычная характеризуется тем, что смещение является составной частью команды и не требует при формировании исполнительного адреса дополнительных регистров, иными словами. Обычно применяется, если операндом служит помеченная переменная, например:

MOV AX, SOURCE

загружает слово из ячейки памяти в регистр. При этом в памяти старший байт следует за младшим, а не предшествует ему. Это обусловлено тем, что в памяти ЭВМ старшая часть располагается в ячейках памяти со старшими адресами. Поэтому схема приведенной команды будет следующей:

Таблица 1


Смещение

Имя переменной

Значение

0000

SOURCE

ВВ

0001




АА

0002

SOURCE+2





После выполнения вышеуказанной команды пересылки регистр АХ будет содержать АХ=ААВВ;

  • прямая с индексированием использует арифметические операции для вычисления адреса. Покажем ее использование на примере следующих векторов (одномерных массивов):

BYTE_TBL DB 12,15,-54,-19,20

WORD_TBL DW -456, 50, 21, 654,-176,5,41.

Положим, требуется получить в РОН пятый байт из BYTE_TBL и второе слово из WORD_TBL. Такой результат можно получить выполнением команд:

MOV DL, BYTE_TBL[4]

MOV AX, WORD _TBL[4]

По первой из приведенных команд в DL попадет значение 20, по второй в AX будет перенесено значение 50.

^ Следует запомнить, что счет позиции элемента начинается с 1, а смещение считается с нуля, т.к. оно определяется относительно начала вектора!

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

MOV SI, 4

MOV DL, BYTE_TBL[SI]

MOV AX, WORD _TBL[SI].

Последний вариант записи команд является более универсальным, поскольку позволяет, например, осуществлять последовательную обработку элементов вектора путем наращивания значений в индексном регистре SI. Такая адресация операндов из оперативной памяти называется индексной, поскольку часть адреса операнда (смещение) находится в индексном регистре;

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

MOV BX, 4

MOV DL, BYTE_TBL[ВХ];

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

MOV SI, 4

MOV BX, 4

MOV AX, WORD _TBL [ВХ][SI].

Последняя команда будет пересылать в регистр АX значение из ячейки памяти с адресом WORD _TBL+4+4= WORD _TBL+8 (это пятое слово со значением –176). Возможна и такая форма записи команды: MOV AX, WORD _TBL [ВХ+SI].

Косвенная или непрямая адресация означает, что в команде указан регистр, в котором находится адрес операнда. Иными словами, подлежащее обработке значение можно получить после двух обращений: сначала из регистра извлекается адрес ячейки оперативной памяти, а затем по этому адресу извлекается сам операнд. Для такой адресации используются регистры BX, BP, SI, DI, указанные в квадратных скобках, что означает ”в качестве адреса брать содержимое того адреса, на который указывает заключенный в квадратные скобки регистр”.

Существует 2 варианта косвенной адресации ячеек ОП:

  • косвенная обычная, когда исполнительных адрес находится в регистре, например:

MOV BX, offset BYTE_TBL

MOV AH, [BX].

По этим командам в регистр AH будет занесено значение 12 (элемент вектора BYTE_TBL со смещением 0 относительно начала вектора).

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

MOV <регистр> offset <имя переменной>

(между знаками <> должны быть вставлены конкретные значения).

Т.к. содержимое регистра легко изменить в ходе выполнения программы, данный способ адресации позволяет динамически назначить адрес операнда для некоторой машинной команды. Это свойство применяется для организации циклических вычислений и для работы со структурами данных типа таблиц и массивов;
© gendocs.ru
При копировании укажите ссылку.
обратиться к администрации
Рейтинг@Mail.ru