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

Инициализация массивов

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

Array DW 0, 1, 2, 3, 4

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

Как быть в том случае, если вы хотите определить массив, который слишком велик и не может уместиться на одной строке? Для этого просто нужно добавить несколько строк. Метку в директиве определения данных указывать необязательно. Например, по директивам:

...

SquareArray DD 0, 1, 4, 9, 16

DD 25, 36, 49, 64, 81

DD 100, 121, 144, 169, 196

создается массив элементов размером в двойное слово с именем SquareArray, состоящий из квадратов первых 15 целых чисел.

Турбо Ассемблер позволяет вам определить блок памяти, инициализированный указанным значением, с помощью операции DUP. Например:

BlankArray DW 100h DUP (0)

Здесь создается массив BlankArray, состоящий из 255 (десятичное) слов, инициализированных значением 0. Аналогично, директива:

ArrayOfA DB 92 DUP ('A')

создает массив из 92 байт, каждый из которых инициализирован символом A.

Задание

  1. Повторить теоретический материал о строковых операциях по конспекту лекций и литературе.

  2. Прочитайте задание, которое выполняет нижеприведенная программа, напишите эту программу с именем Lab6.asm.

  3. Сделайте исполняемый файл, и проследить за работой в Турбоотладчике.

  4. Перепишите программу в ваш отчет, и заполните комментариями о содержании регистров все строки в сегменте кода.

  5. На основе проделанной работы сделать отчет, внести в него краткие выводы.

;Даны два массива ArrayA, ArrayB,

;состоящие из 10 элементов каждый

;Сравнить эти массивы поэлементно и

; - если элементы равны, то записать в соответствующий элемент

; третьего массива (Difference) 'Y'

; - иначе 'N'

;Найти сумму и количество всех одинаковых и различных

;элементов двух массивов (ArrayA,ArrayB)

.model tiny

.stack 100h

.data

ArrayA db 05,10,06,44,20,32,05,11,46,0

ArrayB db 35,10,15,44,20,02,65,10,46,0

Difference db 10 dup(0)

NumOfDiff dw 0

NumOfEqual dw 0

.code

start:

mov ax,@data

mov ds,ax

push ds

pop es

mov di,offset Difference

mov cx,10

mov al,'Y'

cld

rep stosb

mov si,offset ArrayA

mov di,offset ArrayB

mov bx,offset Difference

mov cx,10

cld

findDE:

cmpsb

jne NotEqual

inc NumOfEqual

inc bx

dec di

dec si

mov al,byte ptr ds:[si]

cbw

add SumOfEqual, ax

mov al,byte ptr ds:[di]

cbw

add SumOfEqual, ax

inc si

inc di

jmp NextElement

NotEqual:

inc NumOfDiff

mov byte ptr ds:[bx],'N'

inc bx

dec di

dec si

mov al,byte ptr ds:[si]

cbw

add SumOfDiff, ax

mov al,byte ptr ds:[di]

cbw

add SumOfDiff, ax

inc si

inc di

NextElement:

loop findDE

mov ax,4c00h

int 21h

end start

  1. Написать свою программу, которая сравнивала бы поэлементно буквы вашего имени и фамилии. В случае разницы размеров дополнить начальными буквами. Имя и фамилию написать заглавными латинскими буквами. Например,

PAVLOVA ANNAANN (имя ANNA дополнена тремя буквами из маго себя ANN)

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

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