Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.12.2009, 22:23   #1
maziLa
Пользователь
 
Регистрация: 08.12.2008
Сообщений: 30
По умолчанию Модульое програмирование.Паскаль.Ассемблер.

Нужно написать интерфейс на паскале, а модуль на ассемблере.
Задание: Ввести строку на паскале, передать её на ассемблер и результат вернуть в паскаль , там же его и вывести.
Задача ассемблера : в строке найти самое длинное слово и его длину.
Ассемблерный модуль
Код:
.model large,pascal
.data                               
extrn	s1: byte, s2: byte, d: word, e: word
.code
;Процедура WordMaxZ - Входные данные - Строка
;		   - Выходные данн. - Слово(макс)
public WordMaxZ                
WordMaxZ proc far        	
		lea si, s1
		mov cx, d
		                              
		lea di, s2               ; - макс. слово

		xor si, si
		xor dx, dx

	m44:	xor bx, bx
	m4:     inc bx                   ;счечик букв в слове
		inc si                   ;переход на проверку след символа в строке
		mov al, ' ' 
		cmp [si], al             ;если конец слова
		je m5                                        
		loop m4                  ;цикл пока не достигнут конец строки
		jmp m6          
	m5:	cmp dx, bx
		jge m44

		push si
		push cx
		mov cx , bx     
		sub si , bx      
		cld
		rep movsb      
		pop cx
		pop si
		
                 
		sub di, bx
		
		lea di, s2 
		mov dx, bx 
		            	
		jmp m4 
	m6:	mov e, bx  		
      		ret 
WordMaxZ endp 
                
end
Интерфейс на Паскале:
Код:
{$L C:\LR}

uses crt;
var
	s1, s2: string;
	d, e  : word;

procedure WordMaxZ; far; external;

begin
  clrscr;
  Write('Введите вашу строку :');
  ReadLn(s1);
  writeln(s1);
  writeln;
  d:=length(s1);
  WordMaxZ;
  Write('Самое длинное слово:');
  Write(s2);
  WriteLn;
  Write('Количество букв в нём: ');
  Write(e);
  WriteLn;	
  ReadLn;
end.
вместо макс слова ничего не выводить мож что делаю нетак помогите.
maziLa вне форума Ответить с цитированием
Старый 02.12.2009, 05:51   #2
alexcoder
Форумчанин
 
Регистрация: 31.05.2009
Сообщений: 786
По умолчанию

данные в ассемблерный модуль из паскаля нужно передавать через стек([bp+4],[bp+8] и т.д.). Внесите ассемблерный код в паскаль, внесите в него изменения, что-то типа mov cx, [bp+8] и посмотрите в отладчике как передаются параметры в процедуру. После того, как отладите ассемблерный код на паскале, можно выносить его в отдельный файл.
Помощь с программами:
vk.com/alexcoder1
e-mail: informatik101@mail.ru
alexcoder вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ассемблер и Паскаль не дружат... Monte-Kristo Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 7 16.06.2009 13:03
Програмирование на ТР 7.0 darkduelist Помощь студентам 0 04.04.2009 15:06