Найти количество вхождений подстроки 8 бит - Assembler
Формулировка задачи:
Найти количество вхождений подстроки в строке. Разрядность данных в массиве, 8 бит.
Помогите пожалуйста написать программу.
Не могу понять как посмотреть результат.
Решение задачи: «Найти количество вхождений подстроки 8 бит»
textual
Листинг программы
; .8086 .MODEL TINY ; CR EQU 0Dh LF EQU 0Ah ; PromptLen EQU 9 BufLen EQU 80 - PromptLen ; .CODE ORG 100h START: JMP EXEC ; lwString DW ? lwSubstr DW ? nbOccur DB ? nbColumn DB ? sdInfo DB "Searches number of occurrences of substring in string", CR, LF DB "emu8086, Fast & Powerful (for example ;o)" sdCrLf DB CR, LF, "$" sdString DB " string: $" sdSubStr DB " substr: $" sdNotFound DB " not found$" sdNoccur DB " Noccur: $" ; EXEC: LEA DX, sdInfo CALL showSd STR_LOOP: ; Input string LEA DX, sdString LEA SI, kbBufStr MOV CX, BufLen ; It's emu (MOV CL,BufLen compiled as MOV CL,[BufLen] ;o) CALL inputSc CALL crLf JCXZ EXIT MOV lwString, CX ; Input substring LEA DX, sdSubStr LEA SI, kbBufSub MOV CX, BufLen CALL inputSc CALL crLf JCXZ STR_LOOP MOV lwSubstr, CX ; CALL searchSubs CALL showResult JMP STR_LOOP EXIT: RET ; searchSubs: ; Used: AX, BX, CX, DX, DI, SI MOV nbOccur, 0 MOV nbColumn, 0 LEA BX, chString MOV DX, lwString sssearchloop: MOV CX, lwSubstr CMP DX, CX JC ssexit ; Compare strings MOV DI, BX LEA SI, chSubstr REPE CMPSB JNE ssnextchar ; INC nbOccur MOV CX, BX SUB CX, Offset chString - PromptLen CALL showPointer SUB DX, lwSubstr ADD BX, lwSubstr JMP sssearchloop ssnextchar: DEC DX INC BX JMP sssearchloop ssexit: RET ; showResult: ; Used: AX, CX, DX MOV AL, nbOccur TEST AL, AL JNZ srshow LEA DX, sdNotFound CALL showSd JMP srexit srshow: CALL crLf LEA DX, sdNoccur CALL showSd AAM MOV CX, AX TEST CH, CH JZ srlowdig MOV DL, CH CALL showDigit srlowdig: MOV DL, CL CALL showDigit srexit: ; crLf: ; Used: DX LEA DX, sdCrLf ; showSd: ; Input: DX = message address PUSH AX MOV AH, 9 INT 21h POP AX RET ; showPointer: ; Input: CX = pointer offset from beg.pos. ; Used: CX PUSH DX SUB CL, nbColumn JCXZ spsetptr MOV DL, " " sploop: CALL showChar INC nbColumn LOOP sploop spsetptr: MOV DL, "^" CALL showChar INC nbColumn POP DX RET ; showDigit: ; Input: DL = digit in range 0-9 ; Used: AH, DL ADD DL, "0" showChar: MOV AH, 2 INT 21h RET ; inputSc: ; Input: DX = address of message ; SI = address of input buffer ; CX = max chars ; Output: CX = number of entered chars ; Used: AH, DX CALL showSd MOV DX, SI MOV [SI], CL MOV AH, 0Ah INT 21h MOV CL, [SI+1] ; String length RET ; kbBufStr LABEL Byte chString EQU kbBufStr + 2 kbBufSub EQU chString + BufLen chSubstr EQU kbBufSub + 2 ; END START ;
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д