Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СИ_Ассемблер_МУ_Курс.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
843 Кб
Скачать
☆

Часть 2 Программирование на языке Ассемблер

1. Задание и методические указания

К выполнению курсовой работы

Написать подпрограмму на Ассемблере, выполняющую действия над массивами байтов (строками) в соответствии с вариантом из табл. 1–8. Подпрограмма должна вызываться из Си-программы. Следует написать программу на языке Си, содержащую прототип ассемблерной функции, ввод исходных данных, вызов подпрограммы и вывод результата.

Каждая строка описана в Си-программе в виде байтового массива и заканчивается двоичным нулем. Строки имеют разную длину. В функцию передаются две строки и один целый параметр (байт). Функция возвращает модифицированные строки и одно целое значение (байт или слово). Модифицированная строка помещается на место первой строки или в отдельный массив.

Передача строк в функцию:

1 – по ссылке

2 – через глобальные переменные

Передача целых значений в функцию:

1 – по значению

2 - по ссылке

Действия над строками:

1 – объединить соответствующие нечетные байты строк по «или». Целый параметр – длина второй строки.

2 – поменять местами соответствующие четные байты строк. Целый параметр – максимально допустимое количество замен.

3 – нечетные байты первой строки поменять с четными байтами второй строки. Целый параметр – длина первой строки.

4 – из первой строки побайтно вычесть вторую. Целый параметр прибавлять к результату вычитания.

5 – четные байты первой строки сложить с нечетными байтами второй строки. Целый параметр – максимальное количество сложений.

6 – ко всем элементам первой строки прибавить целый параметр. В конец первой строки дописать вторую строку.

7 – на место четных байтов первой строки записать соответствующие байты из второй строки, объединенные по «и» с целым параметром.

8 – к нечетным байтам первой строки прибавить четные байты второй строки. Целый параметр – максимальное количество сложений

9 – сложить попарно байты второй строки и записать их на место соответствующих четных байтов первой строки. Целый параметр – количество пар во второй строке.

Формирование целого результата:

1 – длина первой строки

2 – длина второй строки

Возврат целого результата:

1 – по ссылке

2 – через имя функции

2. Краткие теоретические сведения

Для подпрограмм, предназначенных для вызова из Си-программ, необходимо выполнять соглашения о характеристиках сегментов, модели памяти, правилах передачи параметров и использовании регистров.

Оформленная таким образом ассемблерная подпрограмма имеет вид

.MODEL SMALL,С

func PROC NEAR USES SI DI, a:WORD, b:WORD

LOCAL X:WORD, y:WORD

; текст подпрограммы

RET

func ENDP

Ассемблерной функции func соответствует следующий прототип в Си-программе:

int func(int a, int b);

В тексте программы в качестве операндов можно использовать имена локальных переменных и передаваемых параметров. По команде RET автоматически генерируются команды восстановления регистров SI, DI, ВР, SP и затем выполняется возврат содержимого регистра AX в вызывающую программу.

В ассемблерной процедуре можно свободно использовать регистры AX, BX, CX, DX. Остальные регистры должны быть сохранены и восстановлены.

Для обработки строковых данных ассемблер имеет пять команд обработки строк: MOVS – переслать один байт или одно слово из одной области памяти в другую; LODS – загрузить из памяти один байт в регистр AL или одно слово в регистр AX; STOS – записать содержимое регистра AL или AX в память; CMPS – сравнить содержимое двух областей памяти, размером в один байт или одно слово; SCAS – сравнить содержимое регистра AL или AX с содержимым памяти. Префикс REP позволяет этим командам обрабатывать строки любой длины.

Флаг направления DF = 0 (устанавливается командой CLD) задает направление слева направо, а DF = 1 (устанавливается командой STD) – справа налево.

В следующем примере выполняется пересылка 20 байт из STRING1 в STRING2:

STRING1 DB 20 DUP('*')

STRING2 DB 20 DUP(")

CLD ;Сброс флага DF

MOV СХ, 20 ;Счетчик на 20 байт

LEA DL, STRING2 ; Адрес области "куда"

LEA SI, STRING1 ;Адрес области "откуда"

REP MOVSB ;Переслать данные

Таблица 1

№

Передача строк в функцию

Передача целых

значений

Действия над

строками

Формирование целого результата

Возврат целого

результата

1

1

1

1

1

1

2

2

1

2

1

1

3

1

2

3

1

1

4

2

2

4

1

1

5

1

1

5

2

1

6

2

1

6

2

1

Окончание табл. 1

№

Передача строк в функцию

Передача целых

значений

Действия над

строками

Формирование целого результата

Возврат целого результата

7

1

2

7

2

1

8

2

2

8

2

1

9

1

1

9

1

2

10

2

1

1

1

2

11

1

2

2

1

2

12

2

2

3

1

2

13

1

1

4

2

2

14

2

1

5

2

2

15

1

2

6

2

2

16

2

2

7

2

2

17

1

1

8

1

1

18

2

1

9

1

1

19

1

2

1

1

1

20

2

2

2

1

1

21

1

1

3

2

1

22

2

1

4

2

1

23

1

2

5

2

1

24

2

2

6

2

1

25

1

1

7

1

2

Таблица 2

№

Передача строк в функцию

Передача целых

значений

Действия над

строками

Формирова-ние целого результата

Возврат целого

результата

1

2

1

8

1

2

2

1

2

9

1

2

3

2

2

1

1

2

4

1

1

2

2

2

5

2

1

3

2

2

6

1

2

4

2

2

7

2

2

5

2

2

8

1

1

6

1

1

9

2

1

7

1

1

Окончание табл. 2

№

Передача строк в функцию

Передача целых

значений

Действия над

строками

Формирование целого

результата

Возврат целого

результата

10

1

2

8

1

1

11

2

2

9

1

1

12

1

1

1

2

1

13

2

1

2

2

1

14

1

2

3

2

1

15

2

2

4

2

1

16

1

1

5

1

2

17

2

1

6

1

2

18

1

2

7

1

2

19

2

2

8

1

2

20

1

1

9

2

2

21

2

1

1

2

2

22

1

2

2

2

2

23

2

2

3

2

2

24

1

1

4

1

1

25

2

1

5

1

1

Таблица 3

№

Передача строк в функцию

Передача

целых

значений

Действия

над

строками

Формирование целого

результата

Возврат целого

результата

1

1

2

6

1

1

2

2

2

7

1

1

3

1

1

8

2

1

4

2

1

9

2

1

5

1

2

1

2

1

6

2

2

2

2

1

7

1

1

3

1

2

8

2

1

4

1

2

9

1

2

5

1

2

10

2

2

6

1

2

11

1

1

7

2

2

12

2

1

8

2

2

Окончание табл. 3

№

Передача строк в функцию

Передача целых

значений

Действия над строками

Формирование целого результата

Возврат целого

результата

13

1

2

9

2

2

14

2

2

1

2

2

15

1

1

2

1

1

16

2

1

3

1

1

17

1

2

4

1

1

18

2

2

5

1

1

19

1

1

6

2

1

20

2

1

7

2

1

21

1

2

8

2

1

22

2

2

9

2

1

23

1

1

1

1

2

24

2

1

2

1

2

25

1

2

3

1

2

Таблица 4

№

Передача строк в функцию

Передача целых

значений

Действия над

строками

Формирование целого

результата

Возврат целого

результата

1

2

2

4

1

2

2

1

1

5

2

2

3

2

1

6

2

2

4

1

2

7

2

2

5

2

2

8

2

2

6

1

1

9

1

1

7

2

1

1

1

1

8

1

2

2

1

1

9

2

2

3

1

1

10

1

1

4

2

1

11

2

1

5

2

1

12

1

2

6

2

1

13

2

2

7

2

1

14

1

1

8

1

2

Окончание табл. 4

№

Передача строк в функцию

Передача целых значений

Действия над строками

Формирование целого

результата

Возврат целого результата

15

2

1

9

1

2

16

1

2

1

1

2

17

2

2

2

1

2

18

1

1

3

2

2

19

2

1

4

2

2

20

1

2

5

2

2

21

2

2

6

2

2

22

1

1

7

1

1

23

2

1

8

1

1

24

1

2

1

1

1

25

2

2

2

1

1

Таблица 5

№

Передача строк в функцию

Передача

целых

значений

Действия над

строками

Формирование целого

результата

Возврат

целого

результата

1

1

1

3

2

1

2

2

1

4

2

1

3

1

2

5

2

1

4

2

2

6

2

1

5

1

1

7

1

2

6

2

1

8

1

2

7

1

2

9

1

2

8

2

2

1

1

2

9

1

1

2

2

2

10

2

1

3

2

2

11

1

2

4

2

2

12

2

2

5

2

2

13

1

1

6

1

1

14

2

1

7

1

1

15

1

2

8

1

1

16

2

2

9

1

1

Окончание табл. 5

№

Передача строк в функцию

Передача

целых

значений

Действия над

строками

Формирование целого

результата

Возврат

целого

результата

17

1

1

1

2

1

18

2

1

2

2

1

19

1

2

3

2

1

20

2

2

4

2

1

21

1

1

5

1

2

22

2

1

6

1

2

23

1

2

7

1

2

24

2

2

8

1

2

25

1

1

9

2

2

Таблица 6

№

Передача строк в функцию

Передача целых

значений

Действия над

строками

Формирование целого

результата

Возврат

целого

результата

1

2

1

1

2

2

2

1

2

2

2

2

3

2

2

3

2

2

4

1

1

4

1

1

5

2

1

5

1

1

6

1

2

6

1

1

7

2

2

7

1

1

8

1

1

8

2

1

9

2

1

9

2

1

10

1

2

1

2

1

11

2

2

2

2

1

12

1

1

3

1

2

13

2

1

4

1

2

14

1

2

5

1

2

15

2

2

6

1

2

16

1

1

7

2

2

17

2

1

8

2

2

Окончание табл. 6

№

Передача строк в функцию

Передача

целых

значений

Действия

над

строками

Формирование целого

результата

Возврат

целого

результата

18

1

2

9

2

2

19

2

2

1

2

2

20

1

1

2

1

1

21

2

1

3

1

1

22

1

2

4

1

1

23

2

2

5

1

1

24

1

1

6

2

1

25

2

1

7

2

1

Таблица 7

№

Передача строк в функцию

Передача целых значений

Действия над

строками

Формирование целого

результата

Возврат

целого

результата

1

1

2

8

2

1

2

2

2

9

2

1

3

1

1

1

1

2

4

2

1

2

1

2

5

1

2

3

1

2

6

2

2

4

1

2

7

1

1

5

2

2

8

2

1

6

2

2

9

1

2

7

2

2

10

2

2

8

2

2

11

1

1

9

1

1

12

2

1

1

1

1

13

1

2

2

1

1

14

2

2

3

1

1

15

1

1

4

2

1

16

2

1

5

2

1

17

1

2

6

2

1

18

2

2

7

2

1

19

1

1

8

1

2

Окончание табл. 7

№

Передача строк в функцию

Передача

целых

значений

Действия над

строками

Формирование целого

результата

Возврат

целого

результата

20

2

1

9

1

2

21

1

2

1

1

2

22

2

2

2

1

2

23

1

1

3

2

2

24

2

1

4

2

2

25

1

2

5

2

2

Таблица 8

№

Передача строк в функцию

Передача целых значений

Действия над

строками

Формирование

целого

результата

Возврат

целого

результата

1

2

2

6

2

2

2

1

1

7

1

1

3

2

1

8

1

1

4

1

2

9

1

1

5

2

2

1

1

1

6

1

1

2

2

1

7

2

1

3

2

1

8

1

2

4

2

1

9

2

2

5

2

1

10

1

1

6

1

2

11

2

1

7

1

2

12

1

2

8

1

2

13

2

2

9

1

2

14

1

1

1

2

2

15

2

1

2

2

2

16

1

2

3

2

2

17

2

2

4

2

2

18

1

1

5

1

1

19

2

1

6

1

1