Новосибирский государственный технический университет
Кафедра автоматики
Лабораторная работа №2
по дисциплине «Программирование»
ОБРАБОТКА МАССИВОВ ДАННЫХ. ИНТЕРФЕЙС С
ЯЗЫКАМИ ВЫСОКОГО УРОВНЯ.
Вариант:
3
Группа:
АА-86
Студенты:
Земцов Н.
Касьянова
А.
Сапрыкин
О.
Преподаватель:
Ханин А.Г.
1. Цель работы
Ознакомиться
с методами адресации и командами передачи управления, ознакомиться с правилами
оформления ассемблерных процедур, вызываемых из Си-программ.
2. Задания
к лабораторной работе. Исходные данные:
1.
Определить длины строк
2. В конец
первой строки дописать первые n символов из второй строки
3. Поменять
местами второй и четвертый байты второй строки
4. Вернуть в
вызывающую программу длину второй строки.
3. Листинг
C.C:
#include <stdio.h>
#include <dos.h>
extern int func(char *str1, char
*str2, int num);
int main()
{
char st1[100], st2[100];
int num, n;
printf("\nFirst string:
");
scanf("%s" ,st1);
printf("\nSecond string:
");
scanf("%s", st2);
printf("\nNumber: ");
scanf("%d", &n);
num=func(st1, st2, n);
printf("\nFirst string:
%s", st1);
printf("\nSecond string:
%s", st2);
printf("\nLength of second
string: %d", num);
}
asm.asm:
.MODEL SMALL, C
.STACK 4096
.CODE
PUBLIC func
func proc near c str1: word, str2:
word, n: word
local len1: word, len2: word
xor bx, bx
mov si, str1
FindLen1:
cmp byte ptr [si+bx], 0
jz br01
inc bx
jmp short FindLen1
br01:
mov len1, bx
xor bx, bx
mov di, str2
FindLen2:
cmp byte ptr [di+bx], 0
jz br02
inc bx
jmp short FindLen2
br02:
mov len2, bx
mov dx, n
Exchange:
mov al, [si]
test al, al
jz EndExchange
mov ah, [di]
test ah, ah
jz EndExchange
xor bx, bx
mov bx, len1
mov [si+bx], ah
inc si
inc di
dec dx
jnz Exchange
xor ax, ax
mov [si+bx], ax
EndExchange:
mov di, str2
mov ax, [di+1]
mov dx, [di+3]
xchg al, dl
mov [di+1], ax
mov [di+3],dx
mov ax, len2
ret
func endp
end
4. Пример работы программы
5. Вывод
Мы ознакомились с
методами адресации и командами передачи управления и с правилами оформления
ассемблерных процедур, вызываемых из Си-программ.