Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
halif
3 / 3 / 0
Регистрация: 04.04.2012
Сообщений: 26
1

Связь подпрограмм на ассемблере с программами на языках выс. уровня. PASKAL

15.05.2012, 20:24. Просмотров 1090. Ответов 13
Метки нет (Все метки)

Имеется программа на паскале(borland pascal version 7 1992 год) и подпрограмма на ассемблере вроде все норм, но ничего не работает, в чем ошибка? Помогите найти. Программа ищет последнюю позицию вхождения символа в строку string.
Код
{$L srav.obj}
var str,str2,str3:string;
    i:integer;
function sravnenie (a:char):char;near;external;
function sravnenie2 (a:char):char;
  begin
    if(a='Z') or (a='z') then
      sravnenie2:=chr(ord(a)-19)
    else
      sravnenie2:=chr(ord(a)+1);
  end;

function sravnenie3 (a:char):char;assembler;
asm
  mov al,a
  cmp al,'Z'
  jne @m1
  sub al,19h
  jmp @m2
@m1:
  cmp al,'z'
  jne @m3
  sub al,19h
  jmp @m2
@m3:
  inc al
@m2:
end;

begin
writeln ('vvedite stroku');
readln(str);
str2:=str;
str3:=str;
for i:=1 to length(str) do
  begin
  str[i]:=sravnenie(str[i]);
  str2[i]:=sravnenie2(str2[i]);
  str3[i]:=sravnenie3(str3[i]);
  end;
  writeln(str);
  writeln(str2);
  writeln(str3);
readln;
end.
ПОДПРОГРАММА
Код
public sravnenie

code segment public       ;сегмент кода
assume cs:code

	push bp
	mov bp,sp
	mov al,[bp+4]

sravnenie  proc near
	
        cmp al,'Z'
	jne m1
	sub al,19h
	jmp m2
m1:	
        cmp al,'z'
	jne m3
	sub al,19h
	jmp m2
m3:
        add al,1h
	pop bp	
m2: ret	 2			;возврат из подпрограммы
endp sravnenie  		;конец подпрограммы
code ends
end
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.05.2012, 20:24
Ответы с готовыми решениями:

На компилируемых языках один вид подпрограмм
Считается, что подпрограмм два вида: функции и процедуры. Но существуют например, паскаль, в...

Программирование на языках высокого уровня
Здравствуйте,уважаемые форумчане, подскажите как решить такую проблему в visual basic?Условия: В...

Для чего применяется Каррирование в языках высокого уровня?
Добрый день, гуру функционального программирования! Ввиду большого интереса к теории компиляции и...

Связь между программами
У меня есть одна программа на C++. В ней следовательно есть несколько переменных (например int i =...

Связь между программами через windows API
Здравствуйте. Есть задача наладить обмен данными между программами, одну из которых я пишу на C# а...

13
Искандар
Заблокирован
15.05.2012, 20:28 2
halif, я ажись понял в чом дело: функции должно присваиваться какое-то значение, как вот здесь
Assembler
1
2
3
4
5
6
7
function sravnenie2 (a:char):char;
  begin
    if(a='Z') or (a='z') then
      sravnenie2:=chr(ord(a)-19)
    else
      sravnenie2:=chr(ord(a)+1);
  end;
а в других (асмовских) проках этого нету, возможно поэтому не работает...
0
halif
3 / 3 / 0
Регистрация: 04.04.2012
Сообщений: 26
15.05.2012, 20:58  [ТС] 3
Пока ошибка в том что после запуска программа постоянно требует ввода строки до бесконечности
0
Искандар
Заблокирован
15.05.2012, 21:01 4
Цитата Сообщение от halif Посмотреть сообщение
после запуска программа постоянно требует ввода строки до бесконечности
не знаю, не знаю тут циклов нету, должно все норм идти
\
0
halif
3 / 3 / 0
Регистрация: 04.04.2012
Сообщений: 26
15.05.2012, 21:30  [ТС] 5
все ошибки в подпрограмме мне кажется в ней все причины и беды
0
Troll_Face
603 / 403 / 8
Регистрация: 26.04.2012
Сообщений: 2,069
15.05.2012, 21:39 6
тут вроде все норм, щас под отладчиком гляну
0
programmisto
92 / 137 / 0
Регистрация: 15.04.2012
Сообщений: 1,032
16.05.2012, 06:18 7
Цитата Сообщение от Искандар Посмотреть сообщение
не знаю, не знаю тут циклов нету, должно все норм идти
Зато есть условные прыжки, а от них похожие глюки.
0
Troll_Face
603 / 403 / 8
Регистрация: 26.04.2012
Сообщений: 2,069
16.05.2012, 07:26 8
Цитата Сообщение от programmisto Посмотреть сообщение
Зато есть условные прыжки, а от них похожие глюки.
нет, там клюк в следующем:
Цитата Сообщение от halif Посмотреть сообщение
push bp
* * mov bp,sp
* * mov al,[bp+4]
мало того что это надо внутрь функции перетащить, там еще и надо исправить mov al, [bp+3], т.к. переменная типа чар весит 1 байт... после этого я запустил прогу, она заработала, но sravnenie всегда печатает рожи, теперь отлаживать надо, но время щас нету, в школу собираюсь

Не по теме:

а почему у Искандара имя зачеркнуто??

0
Mikl___
16.05.2012, 07:29
  #9

Не по теме:

Цитата Сообщение от Fatal Error Посмотреть сообщение
а почему у Искандара имя зачеркнуто??
Проделки местных модераторов :)

0
programmisto
92 / 137 / 0
Регистрация: 15.04.2012
Сообщений: 1,032
16.05.2012, 08:08 10
Mikl___, а когда его освободят из кибертемницы?
0
zhan313
85 / 85 / 38
Регистрация: 09.12.2011
Сообщений: 174
16.05.2012, 11:24 11
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public sravnenie
code segment public       ;сегмент кода
assume cs:code
 
sravnenie  proc near          ; объявление процедуры в начало
    push bp
    mov bp,sp
    mov al,[bp+4]
    
        cmp al,'Z'
    jne m1
    sub al,19h
    jmp m2
m1: 
        cmp al,'z'
    jne m3
    sub al,19h
    jmp m2
m3:
        add al,1h
m2: pop bp        ; метка передвинута
    ret 2           ;возврат из подпрограммы
endp sravnenie          ;конец подпрограммы
code ends
end
и еще 19h и 19 не одно и тоже
0
halif
3 / 3 / 0
Регистрация: 04.04.2012
Сообщений: 26
16.05.2012, 22:39  [ТС] 12
вот что выдает прога, f - это я ввел и должен enter нажать после чего прога должна позицию последнего вхождения f выдать
0
Миниатюры
Связь подпрограмм на ассемблере с программами на языках выс. уровня. PASKAL  
Troll_Face
603 / 403 / 8
Регистрация: 26.04.2012
Сообщений: 2,069
16.05.2012, 23:30 13
ребят, забейте, прога левая, ТСу совсем другое надо
0
halif
3 / 3 / 0
Регистрация: 04.04.2012
Сообщений: 26
17.05.2012, 13:38  [ТС] 14
В общем все, всем спасибо, все свободны, совсем другое надо прога и правда какая-то левая.
0
17.05.2012, 13:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.05.2012, 13:38

Связь С++ с программой на ассемблере
Помогите пожалуйста! Не удается создать связь Borland C++ v5.02 с программой на ассемблере через...

связь ассемблера с языками высокого уровня
Обьясните или покажите на примерах, как делать связи: С++ + асм, асм+асм, паскаль+асм Спасибо.

Связь заголовка 1 уровня и тайтла страницы
1 - Как может повлиять на оптимизацию полное совпадения заголовка страницы и ее тайтла? 2 -...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru