- •Тема: «Регистры. Формат строки. Команды перемещения данных. Инициализация данных. Работа с отладчиком»
- •Лабораторная работа № 2 Цель работы: знакомство с архитектурой процессора, получение навыков работы с отладчиком.
- •Регистры
- •Формат строки
- •Команды перемещения данных
- •Перемещение данных в стек и из стека
- •Обмен данными
- •Работа с отладчиком
- •Инициализация массивов
- •Инициализация строк символов
- •Неинициализированные данные
Инициализация массивов
В одной директиве определения данных может указываться несколько значений. Например, директива:
SampleArray DW 0, 1, 2, 3, 4
Создает массив из пяти элементов с именем SampleArray, элементы которого имеют размер слово. В директивах определения данных можно использовать любое число значений, умещающееся на строке.
Турбо Ассемблер определить блок памяти, инициализированный указанными значениями, с помощью операции DUP. Например:
BlankArray DW 100h DUP (0)
Здесь создается массив BlankArray, состоящий из 255 (десят.) слов, инициализированных значением 0. Аналогично, директива:
ArrayOfa DB 92 DUP (‘A’)
Создает массив из 92 байт, каждый из которых инициализирован символом А.
Инициализация строк символов
Рассмотрим теперь создание строк символов. Символы представляют собой допустимые операнды директив определения данных, поэтому строку можно определить следующим образом:
String DB ‘A’, ‘B’, ‘C’, ‘D’
В турбо Ассемблере в этом случае предусмотрена также удобная сокращенная форма:
String DB ‘ABCD’
Аналогично можно определять и другие символы, например, символ возврата каретки, символ перевода строки, символ конца строки
HelloString DB ‘Привет!’, 0dh, 0ah, ‘$’
Неинициализированные данные
Иногда нет смысла присваивать начальное значение. Предположим, например, что ваша программа считает следующие 10 набранных на клавиатуре символов и записывает их в массив с именем KeyBuffer. Инициализацию этого массива можно выполнить следующим образом:
KeyBuffer DB 10 DUP (0)
Но смысла в этом немного, т.к. начальное значение массива KeyBuffer будут немедленно перезаписаны.
В действительности нужно – это определить переменную в памяти, как неинициализированную. Турбо Ассемблер предусматривает такую возможность с помощью символа «знак вопроса». Он указывает, что вы резервируете ячейку памяти, но не инициализируете её. Например, в последнем примере KeyBuffer можно определить так:
KeyBuffer DB 10 DUP (?)
В данной строке резервируется 10 байт памяти, начиная с метки KeyBuffer, но этим байтам не присвоено никакого конкретного значения.
ЗАДАНИЕ №3
.MODEL Small
.STACK 100h
.DATA
MyByte db ?
MyWord dw 100
.CODE
Start:
; пролог
mov ax,@data
mov ds,ax ; DS = сегмент .DATA
mov al, 99
mov MyByte, al
;эпилог
mov ax,4C00h
int 21h ; Выходим из программы
END Start
Вывод: Произошло знакомство с архитектурой процессора, получение навыков работы с отладчиком.