Вопрос № 178852: Здравствуйте уважаемые эксперты! Интересует как в паскале передать строку на обработку в ассемблерную вставку, делаю следующее: asm mov di, offset strr mov ah, [di] end; strr типа string. При этом в ah записыв...
Вопрос № 178925: Уважаемые эксперты. Помогите мне исправить или подредактировать программу, для нахождения значение интегралла методом Трапеции. для интеграла ∫1/ sqrt(2*x*x+0.3) a=0.7 b= 1.3 (это граница) ξ=10-3 ответ должен получитьс...
Вопрос № 178852:
Здравствуйте уважаемые эксперты! Интересует как в паскале передать строку на обработку в ассемблерную вставку, делаю следующее: asm mov di, offset strr mov ah, [di] end; strr типа string. При этом в ah записывается 0, собственно интересуют варианты передачи строки на обработку в ассемблерную вставку для строки типа string или символьного массива типа char. Заранее спасибо.
Вот пример того, как это сделать в разных случаях:
Код:
{ передать строку на обработку в ассемблерную вставку } program q178852;
{ обращение к строке, передаваемой как VAR-параметр в функцию передается сегмент:смещение } procedure strcpy(
var dest, src: string ); begin asm lds si,src les di,dest xor cx,cx cld lodsb stosb mov cl,al rep movsb end; end;
{ Обращение к строке, передаваемой по значению и к локальной переменной. Переменная находится в стеке. } procedure display( s1: string ); var s2: string; begin asm push DS lea si,s1 lea di,s2 mov ax,SS mov DS,ax mov ES,ax {можно также (на 2 байта
короче, но медленнее): push SS push SS pop DS pop ES } xor cx,cx cld lodsb stosb mov cl,al rep movsb pop DS end; writeln( s2 ); end;
var str1, str2: string;
begin str1 := '1234567890'; { обращение к строке как к глобальной переменной } asm lea si,str1 lea di,str2 push DS { переменные в сегменте данных } pop ES xor cx,cx cld lodsb stosb mov cl,al rep movsb end; writeln(
str2 );
По просьбе автора
-----
∙ Отредактировал: Victor Pyrlik, Модератор
∙ Дата редактирования: 08.06.2010, 17:57 (время московское)
Ответ отправил: amnick, Студент
Ответ отправлен: 04.06.2010, 15:46
Номер ответа: 261876
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 261876
на номер 1151 (Россия) |
Еще номера »
Вопрос № 178925:
Уважаемые эксперты. Помогите мне исправить или подредактировать программу, для нахождения значение интегралла методом Трапеции. для интеграла ∫1/ sqrt(2*x*x+0.3) a=0.7 b= 1.3 (это граница) ξ=10-3
ответ должен получиться 0,404258493. у меня почему то не получается. Помогите пожалуйста.
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.