Нужно написать проверочный код на ассемблере для Insert, не знаю как сделать - Assembler
Формулировка задачи:
Без понятия, как написать проверочную прогу на ассемблере для процедуры Insert (вставка подстроки в строку на заданную позицию) . код прилагаю:
laba3.asm laba3.pasПомогите, пожалуйста, завтра сдавать надо, а я сам никак не сделаю
CODE SEGMENT BYTE PUBLIC ASSUME CS:CODE PUBLIC SInsert SInsert PROC FAR PUSH BP ; save TURBO-Pascal framepointer PUSH DS ; save TURBO-Pascal data segment MOV BP, SP ; make new framepointer LDS SI, [BP+16] ; address of object string XOR CX, CX ; clear msb of length of object string OR CL, [SI] ; get length of object string JZ $end_ins ; exit, if length of object string zero MOV DX, [BP+8] ; DX=pos MOV AX, [BP+10] ; AX=maximum length of target string LES DI, [BP+12] ; address of target string MOV BL, ES:[DI] ; get current length of target string MOV BH, CH ; clear msb of length of target string cmp bx, dx jb $end_ins DEC DX ; pos - 1 CMP DH, 80h ; is pos-1 < 0 ? SBB BP, BP ; BP = FFFF if pos-1 > 0, else BP = 0 AND DX, BP ; if pos-1 < 0 then set pos-1 = 0 (pos=1) SUB DX, BX ; pos-1 - targetlength SBB BP, BP ; BP = FFFF, if result negative, else 0 AND DX, BP ; pos-1 - targetlength (0, if res. pos) ADD DX, BX ; pos-1, if result neg., else target len. MOV BP, AX ; maximum length of target string SUB BP, DX ; (maximum length - pos + 1) <= 0 ? JBE $end_ins ; yes, don't insert SUB BP, CX ; maximum length - pos + 1 - objectlength CLD ; select auto-increment JA $make_gap ; jump, if result positiv STOSB ; new targetlength will be maximum length ADD CX, BP ; adjust length of object string ADD DI, DX ; object string inserted after this char JMP $fill ; insert object $make_gap: MOV DX, CX ; save length of object string ADD CX, BX ; new targetlength = objectlen+targetlen SUB CX, AX ; new targetlength - maximum length SBB BX, BX ; BX=FFFF, if result negative, else BX=0 AND CX, BX ; new targetlength - maximum length ADD AX, CX ; new targetlength = Min(TargLen, MaxLen) STOSB ; store it DEC DI ; correct pointer ADD CX, BP ; new targetlength - objectlength - pos+1 ADD DI, AX ; this will be the last char in target XCHG AX, SI ; save offset of adress of object string MOV SI, DI ; now calculate SUB SI, DX ; the starting position PUSH DS ; save segment of address of objectstring MOV BX, ES ; let both segment register point MOV DS, BX ; to the segment containing targetstring STD ; auto-decrement REP MOVSB ; create gap MOV DI, SI ; object will be inserted after this char MOV CX, DX ; get length of object string MOV SI, AX ; get offset of address of object string POP DS ; get segment of address of object string INC DI ; object string will be inserted here CLD ; auto-increment $fill: INC SI ; first char of object string SHR CX, 1 ; number of chars to move odd ? JNC $even_ins ; no MOVSB ; yes, move a single byte $even_ins: REP MOVSW ; move the rest $end_ins: POP DS ; restore TURBO-Pascal data segment POP BP ; restore TURBO-Pascal frame pointer RET 12 ; return and pop parameters SInsert ENDP ALIGN 4 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.
Решение задачи: «Нужно написать проверочный код на ассемблере для Insert, не знаю как сделать»
textual
Листинг программы
var s1, s2: string; ....... s1:=s; s2:=s; SInsert(SubS,s1,P); Insert(SubS,s2,P); if s1=s2 then writeln('Ok') else writeln('ploho');
Объяснение кода листинга программы
В данном коде:
- Объявлены две переменные типа string: s1 и s2.
- Значение переменной s1 присваивается переменной s.
- Значение переменной s2 присваивается переменной s.
- Вызывается функция SInsert с аргументами SubS, s1, P.
- Вызывается функция Insert с аргументами SubS, s2, P.
- Если s1 равно s2, то выводится
Ok
. - Если s1 не равно s2, то выводится
ploho
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д