Новосибирский Государственный Технический Университет
Кафедра Автоматики
Лабораторная работа № 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
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.