Программирование на языке Assembler

Автор работы: Пользователь скрыл имя, 15 Декабря 2013 в 15:42, курсовая работа

Описание работы

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

Файлы: 1 файл

Зотов Курсовик.docx

— 36.37 Кб (Скачать файл)

Министерство науки и  образования Российской Федерации

Новосибирский Государственный  Технический Университет

 

 

 

 

 

КУРСОВАЯ РАБОТА

 

ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ  АССЕМБЛЕР

 

 

Факультет: АВТ

Преподаватель: Голодных Геннадий Петрович

Группа: АА-27

Студент:  Зотов А.С.

Вариант: 16

 

 

 

 

Новосибирск

2013 г

 

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

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

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

Передача 

целых

значений

Действия 

над

строками

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

результата

Возврат

целого

результата

16

1

1

7

2

2


Передача строк в функцию: 1 – по ссылке

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

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

Формирование целого результата: 2 – длина второй строки

Возврат целого результата: 2 – через  имя функции

2) Модуль на языке C:

extern int func(char*,char*,int);

int main()

{

char s1[21], s2[21];

int n;

printf("String 1 (max - 20 elements): \n");

gets(s1);

printf("String 2 (max - 20 elements): \n");

gets(s2);

printf("N: \n");

scanf("%d",&n);

n=func(s1,s2,n);

printf("Modified string - %s\nLength of string 2 - %d\n",s1,n);

return 0;

}

3) Модуль на языке Ассемблер:

TITLE ASM_PART

.MODEL SMALL, C

.DATA

.CODE

PUBLIC func

func PROC NEAR USES SI DI, str1:WORD, str2:WORD, n:BYTE

MOV SI,str1

MOV DI,str2

L1:

CMP BYTE PTR[SI],0; проверка конца строки для str1

JE SHORT L2

CMP BYTE PTR[DI],0; проверка конца строки для str2

JE SHORT L2

MOV BL,n

AND BL, BYTE PTR[DI]; объединение по И с целым параметром (0-ой байт четный)

MOV BYTE PTR[SI], BL; на место четных байтов записываем BL

INC SI

INC DI

CMP BYTE PTR[SI],0; промежуточная проверка для str1

JE SHORT L2

CMP BYTE PTR[DI],0; промежуточная проверка для str2

JE SHORT L2

INC SI

INC DI

JMP L1

L2: 

XOR AX,AX

MOV DI,str2; определяем длину str2

L3:

CMP BYTE PTR[DI],0

JE L4

INC AX; func возвращает длину второй строки

INC DI

JMP L3

L4:

RET

func ENDP

END

 

4) Вывод:. 
В ходе написания данной курсовой работы я расширил свои навыки работы с Assembler’ом и С. Понял принципы передачи данных из программы на Си в Ассемблерную функцию и обратно, соотвественно научился вводить и выводить данные из ассемблерной функции. Так же я развил свои навыки в работе со строками в программах на Си и Assembler’e. Потренировался в работе с основными аспектами Ассемблера: регистрами, джампами, основными командами.

 

 

 

 

 

 

Пример выводы программы: 



Информация о работе Программирование на языке Assembler