Написание программы на Ассемблере, выполняющей действия над массивами байтов

Страницы работы

4 страницы (Word-файл)

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

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

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

Курсовая работа по информатике

по теме «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

Похожие материалы

Информация о работе