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

  • ID: 03579 
  • 5 страниц
200 рубСкачать

антиплагиат в подарок

1.asm

1.obj

MAIN.cpp

MAIN.exe

MAIN.exe.pif

MAIN.obj

Отчет.docx

Содержание:


Постановка задачи

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

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

Передача строк в функцию: через глобальные переменные.

Передача целых значений в функцию: через глобальные переменные

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

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

Возврат целого результата: по ссылке.

Тест программы

Файл с программой на СИ – main.cpp

#include //Подключение модулей

#include

extern "C" void func(void); //Прототип ассемблерной функции

char s1[]="12345"; //Передаваемая строка 1

char tmp[]=" ";//Пустой массив, чтобы строки в памяти на шли подряд

char s2[]="abcdefgh";//Передаваемая строка 2

int n=strlen(s2); //Передаваемый целый параметр – длина 2-ой строки

void main(void){ //Главная функция

func();//Вызов ассемблерной функции

printf("Raznost' strok = %d\n",n); //Вывод результатов выполнения функции

printf("Stroka 1 = %s\n",s1);

printf("Stroka 2 = %s\n",s2);

}//Конец главной функции

Файл с подпрограммой на Ассемблере – 1.asm

.MODEL small, C установка малой модели памяти

public func вызываемая функция общедоступная

extrn s1:BYTE передаваемая в функцию строка

extrn s2:BYTE передаваемая в функцию строка

extrn n:WORD передаваемое в функцию целое число

.data начало сегмента данных

n1 dw 0 объявление переменной - длина первой строки

raz dw 0 объявление переменной – разность строк

minlen dw 0 объявление переменной – мин длина строки

.code начало сегмента программного кода

func proc near, C заголовок функции

mov ax, @data копируем адрес

mov ds, ax сегмента данных

lea si, s1 загрузка адреса строки s1 в si

l1: метка