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

Префиксы повторения

Т. к. смысл использования строковых команд заключается в организации циклов, специально для них предусмотреныпрефиксы повторения. Префикс повторенияrep (repeat – повторить) заставляет процессорn раз повторить указанную строковую команду. Количество повторенийn должно быть заранее загружено в регистр-счетчикCX. При каждом повторении содержимоеCX декрементируется и при достижении им нуля цикл завершается.

Пример:

mov di,offset buf ; загрузка адреса буфера (ES уже должен быть загружен)

mov cx,20 ; количество повторений (длина цепочки)

mov al,’0’ ; шаблон-заполнитель

rep stosb ; повторение (заполнение буфера шаблоном)

Наряду с мнемоникой префикса rep используются мнемоникиrepe (repz) иrepne (repnz), которые обозначают повторение с возможностью досрочного завершения цикла. Префиксrepe/repz (repeat until equal – повторять, пока равно), применяемый с командами cmps, scas, завершает цикл по первому несовпадению сравниваемых элементов. Префиксrepne/repnz, соответственно, завершает цикл при первом совпадении. Т. к. после выхода из цикла необходимо знать: завершился ли цикл по счетчику (cx=0) или досрочно (по признакуzf), для этого предусмотрена командаjcxz (jump if cx zero), по которой выполняется анализ содержимого счетчикаcx на ноль.

Пример программы

Ниже приведен пример программы на языке Ассемблер, выполняющей пересылку байтов из массива (строки) источника str1 в массив (строку) приемникаstr2. Пересылаются 10 байтов.

name strings

.model small

.stack

.data

str1 db '0123456789012345'

str2 db '****************'

.code

;---------------------

start:

mov ax,@data

mov ds,ax

mov es,ax ; ES:=DS

assume es:@data

cld

mov cx,10

mov si,offset str1

mov di,offset str2

rep movs str2,str1

.exit

;---------------------

end start

С

егмент данных до выполненияrep movs:

С

егмент данных после выполненияrep movs:

Порядок выполнения работы

  1. Создайте исходный модуль ggnn_st1.asm, выполняющий действия над строками согласно варианту (gg –последние цифры номера группы,nn – номер в группе).

  2. Выполните трансляцию модуля в ggnn_st1.exe

  3. Загрузите исполняемый модуль в отладчик и выполните в пошаговом режиме.

  4. Проделайте п.п. 1-3 для модулей ggnn_st2.asm,ggnn_st3.asm.

  5. Результаты отразите в отчете.

Содержание отчета

  1. Исходные тексты программ.

  2. Алгоритм работы третьего модуля

  3. Выводы.

Варианты заданий

№/№ вар. зад.

Длина 1

Нач. поз. 1

Длина 2

Нач. поз. 2

Кол.

Примечание

1.1

33

5

44

9

12

Пересылка байтов

1.2

Сколько раз введенный символ:

не совпадает с байтами строки

1.3

Поиск подстроки в строке

2.1

22

3

33

10

15

Пересылка байтов

2.2

Сколько раз введенный символ:

совпадает с байтами строки

2.3

Поиск подстроки в строке

3.1

44

4

22

11

10

Пересылка слов

3.2

Сколько раз введенный символ:

не совпадает с байтами строки

3.3

Поиск подстроки в строке

4.1

23

2

66

1

18

Пересылка слов

4.2

Сколько раз введенный символ:

совпадает с байтами строки

4.3

Поиск подстроки в строке

5.1

25

6

64

2

12

Пересылка байтов

5.2

Сколько раз введенный символ:

не совпадает с байтами строки

5.3

Поиск подстроки в строке

6.1

27

7

62

3

11

Пересылка байтов

6.2

Сколько раз введенный символ:

совпадает с байтами строки

6.3

Поиск подстроки в строке

7.1

29

8

60

4

13

Пересылка слов

7.2

Сколько раз введенный символ:

не совпадает с байтами строки

7.3

Поиск подстроки в строке

8.1

31

9

58

5

16

Пересылка слов

8.2

Сколько раз введенный символ:

совпадает с байтами строки

8.3

Поиск подстроки в строке

9.1

33

10

56

6

19

Пересылка байтов

9.2

Сколько раз введенный символ:

не совпадает с байтами строки

9.3

Поиск подстроки в строке

10.1

35

9

54

7

10

Пересылка байтов

10.2

Сколько раз введенный символ:

совпадает с байтами строки

10.3

Поиск подстроки в строке

11.1

37

8

52

8

13

Пересылка слов

11.2

Сколько раз введенный символ:

не совпадает с байтами строки

11.3

Поиск подстроки в строке

12.1

39

7

50

9

15

Пересылка слов

12.2

Сколько раз введенный символ:

совпадает с байтами строки

12.3

Поиск подстроки в строке

13.1

41

6

48

10

18

Пересылка байтов

13.2

Сколько раз введенный символ:

не совпадает с байтами строки

13.3

Поиск подстроки в строке

14.1

43

5

46

11

20

Пересылка байтов

14.2

Сколько раз введенный символ:

совпадает с байтами строки

14.3

Поиск подстроки в строке

15.1

45

4

44

1

22

Пересылка слов

15.2

Сколько раз введенный символ:

не совпадает с байтами строки

15.3

Поиск подстроки в строке

16.1

47

3

42

2

23

Пересылка слов

16.2

Сколько раз введенный символ:

совпадает с байтами строки

16.3

Поиск подстроки в строке

17.1

49

2

40

3

24

Пересылка байтов

17.2

Сколько раз введенный символ:

не совпадает с байтами строки

17.3

Поиск подстроки в строке

18.1

51

1

38

4

8

Пересылка байтов

18.2

Сколько раз введенный символ:

совпадает с байтами строки

18.3

Поиск подстроки в строке

19.1

53

11

36

5

4

Пересылка слов

19.2

Сколько раз введенный символ:

не совпадает с байтами строки

19.3

Поиск подстроки в строке

20.1

55

10

34

6

7

Пересылка слов

20.2

Сколько раз введенный символ:

совпадает с байтами строки

20.3

Поиск подстроки в строке

21.1

57

9

32

7

12

Пересылка байтов

21.2

Сколько раз введенный символ:

не совпадает с байтами строки

21.3

Поиск подстроки в строке

22.1

59

8

30

8

15

Пересылка байтов

22.2

Сколько раз введенный символ:

совпадает с байтами строки

22.3

Поиск подстроки в строке

23.1

61

7

28

9

17

Пересылка слов

23.2

Сколько раз введенный символ:

не совпадает с байтами строки

23.3

Поиск подстроки в строке

24.1

63

6

26

10

19

Пересылка слов

24.2

Сколько раз введенный символ:

совпадает с байтами строки

24.3

Поиск подстроки в строке

25.1

65

5

24

11

6

Пересылка байтов

25.2

Сколько раз введенный символ:

не совпадает с байтами строки

25.3

Поиск подстроки в строке

Задание 1. Выполнить пересылку элементов строк (массивов) в соответствии с вариантом. Массивы описать в сегменте данных.

Задание 2. Программа вводит символ с клавиатуры и определяет, сколько раз он совпадает (или не совпадает с байтами строки). Строку описать в сегменте данных.

Задание 3. Определить, входит ли в строку А подстрока Б? Строки А и Б описать в сегменте данных. Результат работы программы – текст соответствующего сообщения.

Соседние файлы в папке Лаба Лаб_1-5 Методички