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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

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

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

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

Я хочу передать параметры через стек в процедуру а также из процедуры в главную программу, как мне это реализовать?
Есть интерфейс написанный на Паскале :
Код:
{$L C:\LR.OBJ}
uses crt;
var
	s1, s2: string;
	d, e  : word;

procedure WordMaxZ; far; external;

begin
  clrscr;
  Write('Введите вашу строку :');
  ReadLn(s1);

  writeln;
  d:=length(s1);
  WordMaxZ;
  
  Write('Самое длинное слово:');
  Write(s2);
  WriteLn;
  Write('Количество букв <Z> в нём: ');
  WriteLN(e);
	
  ReadLn;
end.
и есть ассемблерный модуль:
Код:
.model large,pascal

           
extrn	s1: byte, d: word , s2: byte, e: word
.data                                        
.code
;Процедура WordMaxZ - Входные данные - Строка
;		    - Выходные данн. - Слово(макс)
public WordMaxZ                
WordMaxZ proc far 
  lea si, s1
  mov cx, d
  add cx, 1
  lea di, s2
  mov bx, cx
  add bx, 1    
  mov al, ' '
  xor dx, dx

  m1:
  xor bx, bx
  m2:
  inc bx
  inc si
  cmp [si], al  
  je m3
  loop m2
  jmp m4


  m3:
  cmp dx, bx
  jge m1

  push si
  push cx

  sub si, bx
  mov cx, bx
  lea di, s2

  cld
  rep movsb

  pop cx
  pop si
  mov dx, bx

  jmp m1
  m4:
  mov cx, dx
  xor dx, dx
  mov al, 'Z'
  mov ah, 'z'
  lea di, s2
  m6:
  cmp [di], al
  je m5
  cmp [di], ah
  je m5
  inc di
  loop m6
  jmp m7
  m5:
  inc dx
  inc di
  jmp m6

  m7:
  mov e, dx
  lea di, s2
  ret
WordMaxZ endp 
                
end
d, s1 передаются в процедуру
e, s2 возвращаются из процедуры

Последний раз редактировалось maziLa; 05.12.2009 в 15:17.
maziLa вне форума Ответить с цитированием
Старый 05.12.2009, 16:05   #2
alexcoder
Форумчанин
 
Регистрация: 31.05.2009
Сообщений: 786
По умолчанию

Во вложении пример сопряжения паскаля и асма через линковку. Рекомендую сначала ассемблерный код оформить в виде процедуры в паскале, отладить, а только потом выносить его в ассемблерный файл.
И отладчик Вам в помошь!
Вложения
Тип файла: rar matrix1.rar (7.1 Кб, 10 просмотров)
Помощь с программами:
vk.com/alexcoder1
e-mail: informatik101@mail.ru
alexcoder вне форума Ответить с цитированием
Старый 05.12.2009, 17:34   #3
maziLa
Пользователь
 
Регистрация: 08.12.2008
Сообщений: 30
По умолчанию

Это уже готовая рабочая программа, мне просто надо её переделать под стек.
Я пробовал мне пример не оч помог я всё равно не могу толково передать строку в стек и из него взять.
maziLa вне форума Ответить с цитированием
Старый 05.12.2009, 17:50   #4
alexcoder
Форумчанин
 
Регистрация: 31.05.2009
Сообщений: 786
По умолчанию

А никто и не говорил, что будет просто.
Для начала правильно вызовите функцию из паскаля. На этом этапе ассемблерный модуль может вообще ничего не брать из стека и ничего не возвращать в стек!
Откройте в Турбо Дебаггере файл, найдите этот вызов и посмотрите в каком порядке паскаль передает аргументы и сколько они занимают места в стеке. Вы получите соответствие s1 - [bp+xx], s2 - [bp+yy] и т.д.
и замените в ассемблерном тексте символьные переменные на переменные в кадре стека. Что тут сложного?
Помощь с программами:
vk.com/alexcoder1
e-mail: informatik101@mail.ru
alexcoder вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ассемблер farxad Помощь студентам 6 11.09.2016 14:19
Модульое програмирование.Паскаль.Ассемблер. maziLa Помощь студентам 1 02.12.2009 05:51
Ассемблер Майкл18 Помощь студентам 0 27.11.2009 09:16
Ассемблер и Паскаль не дружат... Monte-Kristo Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 7 16.06.2009 13:03