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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.06.2010, 18:00   #1
фантомаз
 
Регистрация: 11.02.2009
Сообщений: 5
По умолчанию Ассемблер и паскаль

Нужно написать программу на ассемблере, но ввод данных и вывод результатов организовать через Паскаль. Вот само задание: дана последовательность символов, содержащая от 1 до 30 слов, в каждом из которых от 1 до 10 латинских букв; между соседними словами - запятая, за последним словом точка. Найти все слова, которые имеют повторения.

Алгоритм:
1.записываю в SL первое слово из строки STR11
2.сравниваю SL с оставшимися словами в строке
3. если были совпадения, то записываю в STR1 через пробел
4. записываю в SL след. слово из строчки STR11 и повторяю проверку 2


Вот программа на ассемблере:
Код:
model small
.stack 256
.data
STR11 db 'ab,ab,sd,dd,sss,sss,ab.' ; исходная строка
SL db 10 dup (?) ; слово из строки
STR1 db 165 dup (?) ;слова,имеющие повторения в строке
 
.code
 
assume ds:@data, es:@data
main:
 mov ax,@data
mov ds,ax
mov es,ax
stroka proc near
 
public stroka
mov ah,09h  ;вывод исх.строки на экран
lea dx,STR11
int 21h
 stroka proc near
 public stroka

cld
lea si,STR11 ;загрузка первого слова из
lea di,SL      ;STR11 в sl
xor dx,dx ; 
xor ax,ax
push ax          ; 0 в тек (длина записанной STR1)
push ax          ;0 в стек (длина проверяемой STR11)
push ax          ;0 в стек (признак совпадения)
 
M3:
lodsb               ;загрузка в al бита STR11
cmp al,','          ; сравниваем с ","
je MM1            ;найден конец слова
cmp al,'.'          ; сравниваем с точкой
je MM2             ; конец STR11, вывод рез-тов
 
stosb              ;копируем бит в SL
inc dx             ;увел. длины SL
jmp M3            ; продолжаем загружать в SL из STR11
MM2: jmp M2
MM1:
xor dx,0
jnz M1
pop ax
pop ax
add ax,1
push ax
xor ax,ax
push ax
jmp M3
 
M1: mov cx,dx  ;загрузка длины SL
lea di,SL
 
M6: lodsb
 
cmp al,','
je M1                    ;слово в STR11 кончилось, уход на проверку след.слова в STR11
cmp al,'.'              ;конец строки
je M5                    ;уход на замену слова
dec si
cmpsb
jne M7 ;нет совпадения, на замену слова в строке
loop M6 ; проверяем пока не проверим все SL
lodsb                ;проверяем на наличие "," или "." 
cmp al,','
je SOVPALO1
cmp al,'.'
je SOVPALO2
 
M7:            ;поиск начала следующего слова в STR11
lodsb
cmp al,','
je M1           ;конец слова найден, на новую проверку
cmp al,'.'
je M5           ;STR11 закончилась
                   ;на замену SL
jmp M7         ; продолжаем искать '.' или ','
 
                   ;заменяем совпавшие символы в STR11 на "," и потом копируем SL в STR1 (потом)
SOVPALO1: sub si,dx
dec si
mov di,si
mov al,','
mov cx,dx
rep stosb        ;замена слова в STR11 на запятые
mov si,di
pop ax
mov ax,1
push ax
jmp M1
 
SOVPALO2: sub si,dx
sub si,2
mov di,si
mov al,'.'
stosb
pop ax
 
ZAPIC: lea si,SL
lea di,STR1
pop ax
mov cx,ax
pop ax
add di,ax
add ax,1
add ax,dx
push ax
add cx,1
add cx,dx
push cx
 
mov cx,dx
REp movsb
mov al,' '
stosb
xor ax,ax
push ax
lea si,STR11
lea di,SL
pop cx
pop ax
add si,ax
push ax
push cx
xor dx,dx
jmp M3
 
M5: pop ax
dec ax
jz ZAPIC
pop ax
add ax,dx
inc ax
push ax
xor dx,dx
push dx
lea si,str11
add si,ax
lea di,sl
jmp M3
 
M2: mov ah,09h        ;вывод результата STR1
lea dx,STR1
int 21h
mov ah,4ch
int 21h
stroka endp
end main
Пытаюсь создать программу на паскале, но она не работает. Помогите исправить ошибку.

Program asm1;
{$D+}
uses CRT;
var
str11,str1:string;
procedure stroka(str11:string;var str1:string);external;
{$L 3.obj}
begin
clrscr;
writeln('Vvedite stoky');
readln(str11);
writeln('Slova,kotorie imeut povtoreniy: ');

stroka(str11,str1);
readln;
end.
фантомаз вне форума Ответить с цитированием
Старый 02.06.2010, 19:00   #2
Doholyan
Форумчанин
 
Регистрация: 26.04.2009
Сообщений: 270
По умолчанию

как помню, ЛУЧШЕ наооброт.... писать оболочку на Паскале, а алгоритм уже асемблером, так якобы быстрей работает программа.....
Как ты копмелируеш Паскалевский код и при этом еще тебе нужно подключить этот модуль {$L 3.obj}
Doholyan вне форума Ответить с цитированием
Старый 02.06.2010, 19:17   #3
фантомаз
 
Регистрация: 11.02.2009
Сообщений: 5
По умолчанию

нам как раз нужно сначала написать прогу на ассемблере, получить obj-файл, затем его использовать в паскале
фантомаз вне форума Ответить с цитированием
Старый 02.06.2010, 19:56   #4
Doholyan
Форумчанин
 
Регистрация: 26.04.2009
Сообщений: 270
По умолчанию

на масме615 ml name.asm /AT
получаеш (*.obj) и (*.com)
Doholyan вне форума Ответить с цитированием
Старый 03.06.2010, 03:33   #5
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

Doholyan
будьте внимательнее, ТС написал "model small" (только почемуто без точки) и окончание программы "mov ah,4Сh/int 21h", зачем ему *.com? тут нужен *.exe
Mikl___ вне форума Ответить с цитированием
Старый 03.06.2010, 03:49   #6
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

А может без всяких obj?
Код:
asm
...
end;
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 03.06.2010, 04:00   #7
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

Alex Cones
Видимо тема "связь ассемблера и языков высокого уровня", процедура объявляется внешней и используется в Паскале, теоретически могут быть программы написанные на C/C++, Prolog и т.д. лишь бы был *.obj который привяжут к основной программе
Mikl___ вне форума Ответить с цитированием
Старый 03.06.2010, 07:43   #8
фантомаз
 
Регистрация: 11.02.2009
Сообщений: 5
По умолчанию

программа на ассемблере работает, только я не знаю как ее переделать, чтобы она была пригодна для использования в Паскале. Я не понимаю, как ассемблер "поймет", что ему нужно "смотреть" новые данные?
фантомаз вне форума Ответить с цитированием
Старый 03.06.2010, 08:23   #9
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

фантомаз
Паскаль, то что пишет? Ошибки какие выдает? Программу на ассемблере уже поняли, что ты не сам написал, разберись для начала, ЧТО там написано, разберешься, начинай подгонять ее под свою задачу, только не пиши что времени нет, за то в армии времени у тебя будет навалом
Mikl___ вне форума Ответить с цитированием
Старый 03.06.2010, 08:25   #10
фантомаз
 
Регистрация: 11.02.2009
Сообщений: 5
По умолчанию

Паскаль ошибки не выдает, он выписывает согласно тому, что введено на ассемблере изначально
фантомаз вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Паскаль = Ассемблер. yurassik Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 23.04.2010 13:50
Ассемблер и Паскаль maziLa Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 05.12.2009 17:50
Модульое програмирование.Паскаль.Ассемблер. maziLa Помощь студентам 1 02.12.2009 05:51
Ассемблер и Паскаль не дружат... Monte-Kristo Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 7 16.06.2009 13:03