Вставка подстроки в строку (раздельная компиляция Turbo Pascal и TASM) - Assembler/TASM

Узнай цену своей работы

Формулировка задачи:

В общем, было вот задание написать код в ассемблере и паскале, который будет выполнять следующую функцию:

18. procedure Insert(SubS: string; var S:string; Start:byte). Вставляет подстроку SubS в строку S, начиная с позиции Start. Если Start, больше длины S, то ничего не изменяется. Я написал код и там, и там. прога работает без ошибок, но выполняется лишь часть задуманного. сумел реализовать фичу, где если start>длины SubS , то ничего не меняется. Также написал код, где должна выполняться вставка подстроки S в SubS на разрешенную позицию, но код немного неверный. Помогите, пожалуйста, исправить, ну или переписать код, я не знаю, как исправить that shit. Спасибо Ассемблерский код:
code         segment byte public
 
             assume  cs:code 
             public  SInsert

SInsert      proc    far
             push    bp                
             push    ds                
             mov     bp, sp            
             lds     si, [bp+10]       ; si - object string
             xor     dx,dx
             xor     cx, cx            
             lodsb
             mov     cl, al           
             
             mov     dl, [bp+8]        ; DL=pos
                                        
             cmp     dl, cl
             ja      $end_ins 
             les     di, [bp+14]       ; address of target string              
             mov     bl, es:[di]       ; get current length of target string
             inc     di
             add     al,bl 
             mov     [si-1],al
             add     si,dx             ;adress 1
             push    si
             push    di
             mov     di,si
             add     di,bx             ; adress 2
             sub     cx,dx
             push    ds
             pop     es
             rep     movsb
             mov     cl,bl
             pop     si                ; istochnik podstroka
             pop     di                ; priemnik stroka
             rep     movsb
$end_ins:    pop     ds                ; restore TURBO-Pascal data segment
             pop     bp                ; restore TURBO-Pascal frame pointer
             ret     10                ; return and pop parameters
SInsert      endp

code         ends
 
             end
Паскалевский код:
{$F+}
{$L laba3.obj}
procedure SInsert(SubS:string;var S:string;Start:byte);
external;
 
var
S,SubS:string;
P:byte;
begin
write('vvod stroki: ');
readln(S);
write('vstavlyaemaya stroka: ');
readln(SubS);
write('posiciya: ');
readln(P);
SInsert(SubS,S,P);
Writeln(S);
end.

Решение задачи: «Вставка подстроки в строку (раздельная компиляция Turbo Pascal и TASM)»

textual
Листинг программы
program string6;
 
uses
  crt;
 
  procedure SInsert(SubS: string; var S: string; Start: word); far; external;
  {$L SIns.obj}
 
var
  stroka1, stroka2:  string;
  len1, len2, nomer: integer;
 
begin
  clrscr;
  stroka1 := 'abcdefgh';
  stroka2 := '1234';
  writeln(stroka1);
  writeln(stroka2);
  SInsert(stroka2, stroka1, 3);
  writeln(stroka1);
  writeln(stroka2);
end.

Объяснение кода листинга программы

Код выполняет вставку подстроки в строку с помощью функции SInsert. Список действий:

  1. Объявление переменных:
    • stroka1, stroka2: string;
    • len1, len2, nomer: integer;
  2. Инициализация строк:
    • stroka1 := 'abcdefgh';
    • stroka2 := '1234';
  3. Вывод на экран исходных строк:
    • writeln(stroka1);
    • writeln(stroka2);
  4. Вставка подстроки с помощью функции SInsert:
    • SInsert(stroka2, stroka1, 3);
  5. Вывод на экран измененной строки:
    • writeln(stroka1);
  6. Вывод на экран неизменной строки:
    • writeln(stroka2); Функция SInsert принимает три параметра:
    • SubS: подстрока, которую необходимо вставить;
    • S: строка, в которую необходимо вставить подстроку;
    • Start: смещение от начала строки, где необходимо начать вставку. В данном случае, подстрока '1234' вставляется в строку 'abcdefgh' с 3-го символа.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.2 из 5
Похожие ответы