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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.06.2009, 22:58   #1
Monte-Kristo
Пользователь
 
Регистрация: 03.03.2009
Сообщений: 27
По умолчанию Ассемблер и Паскаль не дружат...

Задание такое: ввести в паскале строку, потом отослать эту строку в заранее созданный модуль в ассемблере и удалить 10 символов, начиная со второго включительно.
И все бы ничего, но после обработки строки в ассемблеровском модуле строка возвращается с потерей первого символа.

Пример: дана строка abcdefghijklmn, после обработки должно вернуться almn, а возвращается lmn (можно конечно сделать, чтоб вернулось и klmn, но вот чтоб первая а осталась нетронутой - у меня не получается сделать). Если кто знает в чем ошибки, исправьте плз... Выкладываю код модуля и код паскалевской проги?

Ассемблеровский модуль:
Код:
.model  large,pascal
.data
extrn  s1:byte, s2:byte, d:word
.code
public sdf
sdf proc far

lea     si,s1
lea	di,s2
inc	si
mov	bl,[si]
mov	[di],bl
sub	d,11
mov     cx,d
add	si,1

m:	
add	si,10	
mov	bl,[si]
sub	si,10
inc	di
mov	[di],bl
inc	si
loop	m
ret
sdf endp
end
Паскальевская программа:
Код:
{$L sdf}
uses crt;
var s1,s2:string[20];
d:word;
procedure sdf;far;external;
 begin
  clrscr;
  s1:='abcdefghijklmn';
  writeln(s1);
  writeln;
  d:=length(s1);
  sdf;
  writeln('В Ассемблере:');
  writeln(s2);
  readln;
 end.
Monte-Kristo вне форума Ответить с цитированием
Старый 15.06.2009, 23:01   #2
Monte-Kristo
Пользователь
 
Регистрация: 03.03.2009
Сообщений: 27
По умолчанию

Пс. Я не удаляю, а переношу нужные символы в другую строку...
Monte-Kristo вне форума Ответить с цитированием
Старый 15.06.2009, 23:19   #3
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Наверно так.
Код:
lea     si,s1
lea	di,s2
mov	bl,[si]
mov	[di],bl
sub	d,11
mov     cx,d
inc       di
add si,11

m:	
mov	bl,[si]
mov	[di],bl
inc	di
inc	si
loop	m
ret
sdf endp
end
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4

Последний раз редактировалось Goodwin98; 15.06.2009 в 23:22.
Goodwin98 вне форума Ответить с цитированием
Старый 15.06.2009, 23:31   #4
Monte-Kristo
Пользователь
 
Регистрация: 03.03.2009
Сообщений: 27
По умолчанию

Неа, все равно первый символ глатается...
Monte-Kristo вне форума Ответить с цитированием
Старый 15.06.2009, 23:58   #5
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Может паскаль хранит строки по другому.. Попробуй так.
Код:
lea     si,s1
lea	di,s2
inc di
inc si
mov	bl,[si]
mov	[di],bl
sub	d,11
mov     cx,d
inc       di
add si,11

m:	
mov	bl,[si]
mov	[di],bl
inc	di
inc	si
loop	m
ret
sdf endp
end
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 16.06.2009, 00:01   #6
Monte-Kristo
Пользователь
 
Регистрация: 03.03.2009
Сообщений: 27
По умолчанию

Так вообще не пашет... Я знаю, что в паскале нулевой байт отводится под информацию о строке. Может это с этим связано?
Monte-Kristo вне форума Ответить с цитированием
Старый 16.06.2009, 00:22   #7
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Ну может тода так
Код:
lea     si,s1
lea	di,s2
mov	bl,[si]
mov	[di],bl
inc si
inc di
mov	bl,[si]
mov	[di],bl
sub	d,11
mov     cx,d
inc       di
add si,11

m:	
mov	bl,[si]
mov	[di],bl
inc	di
inc	si
loop	m
ret
sdf endp
end
В нулевом байте вроде должна содержаться длина строки, но если первая прога нормально выводила результат, то и это должно сканать.
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4

Последний раз редактировалось Goodwin98; 16.06.2009 в 00:26.
Goodwin98 вне форума Ответить с цитированием
Старый 16.06.2009, 13:03   #8
airyashov
Форумчанин
 
Регистрация: 02.04.2008
Сообщений: 358
По умолчанию

что гадать, программирование не та дисциплина
из 1 поста программа не работает, так как пишет во вторую строку с 0 байта, поэтому пропадает 1 символ и получаются иероглифы
из 5 длина строки второй не меняется = 0 поэтому ничего не выводит
Код:
.model  large,pascal
.data
extrn  s1:byte, s2:byte, d:word
.code
public sdf
sdf proc far

lea     si,s1[1]
lea     di,s2[1]
mov bl,[si]
mov [di],bl
sub d,11
mov cx,d
mov s2[0],cl
inc s2[0]
inc di
add si,11

m:
mov     bl,[si]
mov     [di],bl
inc     di
inc     si
loop    m
ret
sdf endp
end
неплохо пишу на ассемблере для 80х86
icq: 3(один)7748666
mail: airyashov(а)inbox.ru
airyashov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ассемблер farxad Помощь студентам 6 11.09.2016 14:19
Ассемблер SWEET_15 Помощь студентам 3 06.09.2016 08:45
Ассемблер InTest Фриланс 1 12.12.2007 02:05