Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
перевод.docx
Скачиваний:
6
Добавлен:
06.03.2016
Размер:
39.11 Кб
Скачать

Объявление массивов.

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

d db 2,5,6,?,‘0’;создание массива с именемdи пятью однобайтовыми значениями,;    четвертое из которых не определено.

Обращение к элементам массива осуществляется с помощью квадратных скобок. Первый элемент имеет номер 0. Скажем, в приведенном примере к числу 6 можно обратиться так:

mov al, d[2]

Второй вариант использует мнемонику dup(duplicate):

Arr dw 10 dup (?);Создание массива десяти слов с неопределенными начальными  ;   значениями

В скобках указывается, как ясно из примера, начальное значение всех элементов массива.

Третий вариант фактически является модификацией первого и служит, как правило, для создания строк текста:

Str1 dbHello!’ ; Создание массива 6 однобайтовых чисел. Разделение символов в;     кавычках необязательно.

Получение адреса переменной или массива.

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

  • seg(segment) – получение сегмента, в котором определена переменная. На практике применяется крайне редко (за ненадобностью) ввиду ограниченности количества используемых в программе сегментов.

  • offset(смещение) – соответственно, получение смещения переменной относительно начала сегмента.

Имя переменной, адрес которой необходимо получить, указывается после слов segилиoffset.

Организация цикла со счетчиком.

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

Итак, синтаксис организации цикла loop:

заполнение счетчика

объявление метки

команда цикла 1

команда цикла 2

.

.

.

команда цикла N

loop имя_метки

Здесь под заполнением счетчика фактически понимается запись числа итераций цикла в СХ, а подобъявлением метки – запись любого слова (имени метки) с завершающим двоеточием.Имя_метки, указываемое в командеloop, сообщает последней, куда необходимо совершить переход для начала следующей итерации (т.е. сообщает, где начинается тело цикла). Каждое выполнение командыloopуменьшает СХ на единицу. Если после такого уменьшения в СХ осталось ненулевое число, то происходит переход по указанной метке, в противном случае – выполнение программы продолжается с команды, следующей заloop.

Пример программы, суммирующей элементы пятибайтного массива и записывающей результат в переменную x и регистр АХ:

.model tiny

.data

Arr db 1,2,3,4,5; объявление массива с заданными значениями элементов

x dw 0; объявление двухбайтовой переменной х

.code

.startup

mov ax, 0 ; обнуление АХ

mov bx, offset Arr; получение в ВХ адреса массива Arr

mov cx, 5; инициализация счетчика

m1: ; объявление метки с именем m1

mov al, [bx]; получение очередного элемента массива (т.е. чтение ячейки памяти, адрес                     ;  которой находится в ВХ)

add x, ax ; суммирование х и АХ

inc bx ; увеличение ВХ на единицу (инкремент), фактически вызывающее изменение              ; адреса текущей ячейки массива

loop m1 ; уменьшение СХ на единицу, сравнение с нулем, переход на метку m1, если                 ;  содержимое СХ не равно 0

mov ax, x ; сохранение в АХ значения х после завершения цикла

ret

end

&&&

$$$003-002-002$3.3.2.2 Задания или тестовые вопросы для самоконтроля к занятию №2

  1. Создать файл, содержащий текст программы, приведенной в примере, откомпилировать, создать .COM-файл, проследить логику выполнения программы, используя отладчикInsight.

  2. Изменить массив Arr, сделав его массивом восьми машинных слов, имеющих значения не менее 300. Откомпилировать программу, проверить правильность ее работы. Объяснить причины возникновения ошибок вычисления, исправить программу так, чтобы результат вычисления был верным.

  3. Составить программу, создающую массив одиннадцати однобайтных чисел с неопределенными значениями, заполняющую его числами от 0 до 100 (с интервалом 10, т.е. 0, 10, 20 ...100), а затем вычитающую из каждого элемента число 4.

  4. Представить обе программы преподавателю, подготовившись к защите (т.е. объяснению логики их работы).

При необходимости разрешается (и рекомендуется) пользоваться материалами лабораторной работы №1, справочной системой NortonGuidesи калькуляторомDosNavigator’а (вызывается комбинацией клавишCtrl+F6 и позволяет с легкостью переводить десятичные числа в шестнадцатеричные и наоборот).

&&&

$$$003-003-000$3.3.3 Практическое занятие №3

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]