Министерство образования Российской Федерации
Новосибирский Государственный технический Университет
Курсовая работа по информатике
по теме «Assembler»
Выполнил: студент
Группы АА-46
Романников Д.О.
Проверил:
Голодных Г.П.
Новосибирск 2005
Задача: написать программу на Ассемблере, выполняющую действия над массивами байтов в соответствии с вариантом (см. ниже). Подпрограмма должна вызываться из СИ-программы. Следует написать программу на СИ, содержащей прототип ассемблерной функции, ввод исходных данных(с подсказками), вызов подпрограммы и вывод результата.
Каждая строка описана с СИ-программе в виде байтового массива и заканчивается двоичным нулем. Строки имеют разную длину. В функцию передается две строки и один целый параметр. Функция возвращает модифицированные строки и один целый параметр.
Вариант №14:
1. Передача строк в функцию: по ссылке.
2. Передача целых значений в функцию: по ссылке.
3. Действия над строками: нечетные байты первой строки поменять местами с четными байтами второй строки. Целые параметр: длинна первой строки.
4. Формирование целого результата: сумма длин строк.
5. Возврат целого результата: через имя функции.
Программа на СИ:
#include <stdio.h>
int fun(char *,char *,int *);
void main()
{
int i,*n;
char str1[50],str2[50];
printf("Input first string:");
do
{
gets(str1);
if (str1[0]=='\0')
printf("ERROR!\nThis string is't rigth,try again:");
else break;
}
while (1);
printf("Input second string:");
do
{
gets(str2);
if (str2[0]=='\0')
printf("ERROR!\nThis string is't rigth,try again:");
else break;
}
while (1);
*n=strlen(str1);
i=fun(str1,str2,n);
printf("New first string:%s",str1);
printf("\nNew second string:%s",str2);
printf("\nSum of strings:%d",i);
}
Программа на Ассемблере:
Title kursovic
.model small,c
.data
len2 dw 0
.stack 100h
.code
step001:
fun proc near uses si di, str1:word, str2:word, n:word
mov si,str1
mov di,str2
xor bx,bx ;обнуляем бх
Len@str2:
inc bx
cmp [di+bx],byteptr 0 ;в ди-адрес строки
jne Len@str2
movlen2,bx ;перемещаем длину строки в len2
mov bx,n
mov cx,[bx]
mov bx,str1
xor ax,ax
inc di
For@loop:
cmp [di],byte ptr 0
je Go@Go@Go
cmp [bx],byte ptr 0
je Go@Go@Go
mov al,byte ptr [di]
mov ah,byte ptr [bx]
mov [di],ah
mov [bx],al
inc di
inc bx
cmp [di],byte ptr 0
je Go@Go@Go
cmp [bx],byte ptr 0
je Go@Go@Go
inc bx
inc di
loop For@loop
Go@Go@Go:
add [bx],byte ptr 0
mov str1,bx
add [di],byte ptr 0
mov str2,di
Sum@of@strings:
mov ax,len2
mov bx,n
add ax,[bx]
Go2C:
ret
fun endp
end
Примеры работы программы:
KURSOVIC.EXE
Input first string:12121212
Input second string:3434343434
New first string:42424242
New second string:3131313134
Sum of strings:18
Input first string:121212
Input second string:34
New first string:421212
New second string:34
Sum of strings:8
Input first string:12
Input second string:343434
New first string:42
New second string:313434
Sum of strings:8
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.