Консультация № 183348
25.05.2011, 14:31
0.00 руб.
0 6 1
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: требуется написать 3 варианта заданной подпрограммы ( на встроенном ассемблере, с использованием модели памяти PASCAL
(листинг) и без использования директивы MODEL (листинг)). Программу, вызывающую эти подпрограммы с указанием автора и варианта задания (5-ый). Задание- копирование строк. АСС- TASM. Очень рассчитываю на Вашу помощь ...

Обсуждение

Неизвестный
25.05.2011, 16:02
общий
на чем писать, Pascal под DOS?
давно
Посетитель
7438
7205
25.05.2011, 16:21
общий
Раз упоминается "АСС- TASM", то явно ДОС
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
26.05.2011, 10:34
общий
Ну так как, ответите?
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
26.05.2011, 11:30
общий
Адресаты:
на встроенном ассемблере
это от паскаля или Си, строки тоже разные могут быть, пусть уточнят
давно
Посетитель
7438
7205
26.05.2011, 11:44
общий
Уточните, пожалуйста, речь идет о программе на С или Паскале?
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Старший Модератор
31795
6196
26.05.2011, 14:16
общий
это ответ
Здравствуйте, Canijke!

Программа на паскале(ТР7):
[code р=100]var
a,b,c,d:string;
procedure CopyStrA(var x,y:string);external;
{$L q183348a}
procedure CopyStrB(var x,y:string);external;
{$L q183348b}
procedure CopyStrC(var x,y:string);
begin
asm
cld
lds si,dword ptr x
les di,dword ptr y
lodsb
stosb
mov cl,al
xor ch,ch
rep movsb
end
end;
begin
Writeln('Canijke');
repeat
write('Enter string:');
readln(d)
until length(d)>0;
CopyStrA(d,a);
writeln('Result A:',a);
CopyStrB(d,b);
Writeln('Result B:',b);
CopyStrC(d,c);
writeln('Result C:',c);
readln;
end.[/code]

С директивой MODEL и упрощенным описанием сегментов:
[code р=100]model small,pascal
.code
public CopyStrA
proc CopyStrA
push bp
mov bp,sp
cld
mov di,[bp+04]
mov es,[bp+06]
mov si,[bp+08]
mov ds,[bp+10]
lodsb
stosb
mov cl,al
xor ch,ch
rep movsb
pop bp
ret 8
endp
end[/code]

Полное описание сегмента:
[code р=100]_TEXT segment word public 'CODE'
public CopyStrB
assume cs:_TEXT
proc CopyStrB
push bp
mov bp,sp
cld
mov di,[bp+04]
mov es,[bp+06]
mov si,[bp+08]
mov ds,[bp+10]
lodsb
stosb
mov cl,al
xor ch,ch
rep movsb
pop bp
ret 8
endp
_TEXT ends
end[/code]

Компилятор TASM 2.0.
вопросы задавайте в минифорум
Удачи!
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа