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

Санкт-Петербургский Государственный Электротехнический Университет

Кафедра вычислительной техники

Лабораторная работа №4

3-ий семестр, программирование на языке ассемблера

«Операции групповой обработки»

Студент гр. 181x:

Санкт-Петербург

2002

Задание.

Составить программу, выполняющую заданную обработку массива с помощью команд обработки строк.

Вариант

Содержимое массива

Ограничитель размера

Содержание обработки

2

слова

количество

подсчитать количество вхождений каждого слова

Ход выполнения работы.

Написание программы.

Текст программы:

;lab4

cod segment

assume cs:cod,es:dat

begin: mov ax,dat

mov es,ax

mov di,offset words

cld

mov cx,9 ;количество циклов

mov di,0

repne scasw

shr di,1 ;делим содержимое DI на два сдвигом

;теперь DI содержит количество вхождений

mov ax,4c00h

int 21h

cod ends

dat segment

words dw 1,10,11,100,101,110,111,10000,10001

dat ends

stk segment

db 256 dup(?)

stk ends

end begin

Примечания:

Программа сканирует заданный в дополнительном сегменте данных массив слов. В данном случае – words dw 1,10,11,100,101,110,111,10000,10001. Ограничителем размера массива служит его размер, в данном случае – 9. Данная величина и заносится в регистр СХ. Программа сканирует заданный массив, вычисляет количество вхождений каждого слова путём деления содержимого регистра DI на два после сканирования всего массива.

Отладка.

Исполняемый файл программы был загружен в отладчик. Программа была выполнена пошагово. В процессе её выполнения мы наблюдали за состоянием регистра DI и СХ. Вначале в DX было помещено смещение строки words в дополнительном сегменте данных, в нашем случае – 0. За каждый шаг выполнения строки repne scasw значение в регистре DI увеличивалось на 2 – 6, 8, Ah, Ch и т.д. А значение регистра CX уменьшалось на единицу. Предварительно мы поместили в этот регистр значение 0. После выхода из цикла repne scasw в регистре DI оказалось значение 12h, что соответствует смещению в сегменте данных, указывающему на байт, следующий за последним элементом заданного массива. Поделив значение в DI да два, путём сдвига вправо на один байт, мы получаем количество вхождений каждого байта. Это значение помещается в регистр DI.

Соседние файлы в папке Лабораторная работа №45
  • #
    01.05.201437.89 Кб84.doc
  • #
    01.05.2014571 б9LAB4.ASM