Ознакомление с методами адресации и командами передачи уп­равления. Изучение правил оформления ассемблерных про­цедур, вызываемых из Си-программ

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

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

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

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

Кафедра Автоматики

Лабораторная работа № 2

ОБРАБОТКА МАССИВОВ  ДАННЫХ.  ИНТЕРФЕЙС С  ЯЗЫКАМИ ВЫСОКОГО УРОВНЯ.

Группа: АП-318

                                                                                                                      Студенты:

                                                                                                                              Иванчиков И.

                                                                                                                              Кононов А.

                                                                                                                              Моисеев Е.

                                                                                                                              Мухин Р.

                                                                                                                      Преподаватель:

                                                                                                                              Андрей Геннадьевич

                                                                                                                      Вариант: III

Новосибирск 2004

1. Цель работы

Ознакомиться с методами адресации и командами передачи уп­равления, ознакомиться с правилами оформления ассемблерных про­цедур, вызываемых из Си-программ.

Задания к лабораторной работе. Исходные данные:

Ассемблерная функция имеет прототип     int func(char *strl, char *str2, int n);

Здесь strl и str2 - две строки символов произвольной  дли­ны,  содержащие алфавитно-цифровые символы. Значение, возвращаемое функцией в параметр n, зависят от варианта задания.

Задания:

1. Определить длины строк

2. В  конец  первой  строки  дописать первые n символов из второй строки

3. Поменять местами второй и четвертый байты второй строки

4. Вернуть в вызывающую программу длину второй строки.

…………………………………………………………………………………………………………………………………………………………………..

…………………………………………………………………………………………………………………………………………………………………...

#include <stdio.h>

extern "C" {int func(char *str1, char *str2, int num);}

void main()

{

  char st1[40], st2[40];

  int n;

  printf("\nEnter first string, pls: ");

  scanf("%s" ,st1);

  printf("\nEnter second string, pls: ");

  scanf("%s", st2);

  printf("\nEnter number: ");

  scanf("%i", &n);

  n=func(st1, st2, n);

  printf("\nFirst string: %s\n", st1);

  printf("\nSecond string: %s\n", st2);

  printf("\nLength of second string: %i\n", n);

}

………………………………………………………………………………………………………………………………………………………………………………………………………………………..

………………………………………………………………………………………………………………………………………………………………………………………………………………………..

model small, c

.code

public func

func proc c uses si di, s1: word, s2: word, n: word

local len1: word, len2: word

;;;;;;;;;;;;;;;;;;;;;;;;;;;task 1;;;;;;;;;;;;;;;;;;;;;;;;;;;

  xor bx, bx              ;get str1 length

  mov si, s1

l01:

  cmp byte ptr [si+bx], 0

  jz br01

  inc bx

  jmp short l01

br01:

  mov len1, bx

  xor bx, bx              ;get str2 length

  mov si, s2

l02:

  cmp byte ptr [si+bx], 0

  jz br02

  inc bx

  jmp short l02

br02:

  mov len2, bx

;;;;;;;;;;;;;;;;;;;;;;;;;;;task 2;;;;;;;;;;;;;;;;;;;;;;;;;;;

  cld

  mov si, n

  mov cx, [si]

  cmp cx, len2

  jbe continue

  mov cx, len2

continue:

  mov si, s2

  mov di, s1

  add di, len1

  rep movsb

  mov 1 ptr [di], 0

;;;;;;;;;;;;;;;;;;;;;;;;;;;task 3;;;;;;;;;;;;;;;;;;;;;;;;;;;

  cmp len2, 4

  jb task4

  mov si, s2

  mov al, si[1]

  xchg al, si[3]

  mov si[1], al

;;;;;;;;;;;;;;;;;;;;;;;;;;;task 4;;;;;;;;;;;;;;;;;;;;;;;;;;;

task4:

  mov ax, len2

  ret

endp

end

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

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

Тип:
Отчеты по лабораторным работам
Размер файла:
34 Kb
Скачали:
0