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

Связать ассемблеровскую прогу с языком высокого уровня

17.05.2012, 19:21. Просмотров 530. Ответов 5
Метки нет (Все метки)

Pasсal 16 разрядный 7версия 1992г
Найти позицию первого вхождения символа в строку string.
я в курсе что в паскале встроенный ассемблер оформляется к примеру function sravnenie3 (a:char):char;assembler; asm программа end; Но некоторые команды надо писать в паскале немного отлично он обычного ассемблера подскажите как прогу вставить в pasсal и она заработала бы.
Прога на ассемблере
Код
var str:string;
pos, i:byte;
sim:char;
bool:boolean;
begin
writeln('vvedi stroku');
readln(str);
writeln('vvedi simvol dlya poiska');
readln(sim);
i:=length(str);
asm
mov al, sim
mov cl, i
xor ch, ch
xor si, si
@1:
cmp str[si], al
je @2
inc si
loop @1
jmp @3
@2:
inc si
mov ax, si
mov i, al
jmp @4
@3:
mov i, 0
@4:
end;
if i<>0 then writeln(i)
else writeln('net simvola');
readln;
end.

прога на паскале тоже самое должна делать и ассемблеровская прога

Код
var str:string;
pos, i:byte;
sim:char;
bool:boolean;
begin
writeln('vvedi stroku');
readln(str);
writeln('vvedi simvol dlya poiska');
readln(sim);
bool:=true;
for i:=1 to length(str) do
begin
if str[i]=sim then begin
bool:=true;
break;
end
end;
if bool=true then writeln(i)
else writeln('net simvola');
readln;
end.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.05.2012, 19:21
Ответы с готовыми решениями:

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

Сравнение производительности ассемблера и языков высокого уровня
Мне задали написать программу сортировки массива из 30000 элементов (размером в...

библиотека на масм32 для программ высокого уровня
помогите бедному студенту, который самостоятельно осваивает масм32. пишу...

Си является языком программирования низкого уровня или высокого?
у меня вопрос , си является низкий уровень или высокий уровень языка...

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

5
zhan313
85 / 85 / 38
Регистрация: 09.12.2011
Сообщений: 174
18.05.2012, 10:56 2
Pascal
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
26
27
28
29
30
31
32
33
var str:string;
pos, i:byte;
sim:char;
bool:boolean;
begin
writeln('vvedi stroku');
readln(str);
writeln('vvedi simvol dlya poiska');
readln(sim);
i:=length(str);
asm
mov al, sim
mov cl, i
xor ch, ch
xor si,si
@1:
inc si
cmp byte ptr str[si], al
je @2
loop @1
jmp @3
@2:
mov ax, si
mov i, al
jmp @4
@3:
mov i, 0
@4:
end;
if i<>0 then writeln(i)
else writeln('net simvola');
readln;
end.
0
halif
3 / 3 / 0
Регистрация: 04.04.2012
Сообщений: 26
18.05.2012, 11:19  [ТС] 3
Паскаль все работает но не как не сделаем внешний модуль подпрограмму на ассемблере
Код
var str:string;
dlinna, pos:integer;
sim:char;
i:byte;
bool:boolean;
function poisk_pas(str:string; simvol:char;dl:integer):integer;
begin
for i:=0 to dl do
if str[i]=simvol then begin
poisk_pas:=i;
bool:=true;
break
end;
if bool<>true then poisk_pas:=-1
end;
function poisk_asmp(str:string; simvol:char;dlin:integer):integer;assembler;
asm
les si, str
mov cx, dlin
mov bl, simvol
xor dx, dx
@1:
add dx, 1
mov al, es:[si+1]
cmp al, bl
je @2
inc si
loop @1
@2:
mov ax, dx
end;
begin
writeln('vvedi stroku');
readln(str);
dlinna:=length(str);
writeln('vvedi simvol');
readln(sim);
pos:=poisk_pas(str, sim, dlinna);
if pos<>-1 then writeln('pascal: ',pos)
else writeln('net simvola');
pos:=poisk_asmp(str, sim, dlinna);
if pos<>-1 then writeln('vstroenniy assembler: ',pos)
else writeln('net simvola');
readln;
end.
Это отдельный файл типо poisk.asm
Вот подпрограмма с ошибками помогите подправить можно и не через MODEL а простую, главное что бы подпрограмма работала в паскале.
Код
.MODEL LARGE,PASCAL
.CODE
public poisk

poisk proc near str:byte, simvol:byte, dlin:word
les si, str		; es:si  <- адрес строки
mov bl, simvol		; es:si  <- адрес символа
mov cx, dlin 		; cx <- количество элементов
xor cx, cx 		; cx <- 0 
@v1:
inc dx			
mov al,es:[si]		; загрузить значение из массива
cmp al,bl
je @v2
inc si
loop @v1
@v2:
mov ax, dx

ret8  ;возврат из подпрограммы
poisk endp  ;конец подпрограммы

end
0
zhan313
85 / 85 / 38
Регистрация: 09.12.2011
Сообщений: 174
18.05.2012, 11:28 4
как передать в подпрограмму строку символов и паскаля
0
halif
3 / 3 / 0
Регистрация: 04.04.2012
Сообщений: 26
18.05.2012, 11:51  [ТС] 5
Огромное спасибо Очень благодарен вам и fatal errory
0
Troll_Face
603 / 403 / 8
Регистрация: 26.04.2012
Сообщений: 2,069
18.05.2012, 15:50 6
Цитата Сообщение от halif Посмотреть сообщение
Огромное спасибо Очень благодарен вам и fatal errory
ОуОу, не каверкаем мой ник
0
18.05.2012, 15:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.05.2012, 15:50

Пересесть с языков высокого уровня на С++
Здравствуйте, я ActionScript3 разработчик и в данный момент рассматриваю...

Компилируемый язык высокого уровня
Если не там оставил тему, перенесите куда нужно, не нашел более подходящего...

Выходной ток высокого уровня у SN74ALS08
Что означает отрицание в выходном токе высокого уровня у элемента SN74ALS08....


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

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

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