Ошибка вывода строки - Assembler
Формулировка задачи:
имееться вот такой код
РАБОТАЕТ ОН ИСПРАВНО ИМЕННО ПО САМОЙ АРИФМИТИЧЕСКОЙ ЧАСТИ
ошибка лишь заключаеться в выводе ответа
почему то удаляються первые элементы строки
заметил что ошибка происходит имеенно при выполнении действия выделенного красным цветом
вот что выводит
;Дан текст 20 символов. Определить кол-во повторений ;сочетаний "op" в тексте и заменить его символом "!" data segment req db 10,13,'Enter string:$' res db 10,13,'result string:$' quantity db 10,13,'Kolichestvo:$' inpbuf db 20 len db ? buf label byte ends stack segment dw 128 dup(0) ends code segment start: mov ax, data mov ds, ax mov es, ax ;вывод чисто сообщения MOV AH,09h ;output lines of the DS: DX. LEA DX,req INT 21h ;ввод строки MOV AH,0Ah ;enter a string DS: DX LEA DX,inpbuf ;buffer address INT 21h LEA SI,buf MOV DI, SI XOR CH, CH XOR AX, AX MOV CL,byte ptr len m1: lodsb cmp al, 'o' jnz m2 cmp [si], 'p' jnz m2 mov al, '!' stosb inc si inc ah jmp m3 m2: stosb m3: loop m1 mov al,'$' stosb PUSH AX MOV AH,09h ;output lines of the DS: DX. LEA DX,quantity INT 21h POP AX MOV DL, AH ADD DL, '0' MOV AH,02h INT 21h MOV AH,09h ;output lines of the DS: DX. LEA DX,res INT 21h [COLOR="Red"][B] MOV AH,09h MOV DX,buf int 21h[/B][/COLOR] mov ax, 4c00h int 21h ends end start
Решение задачи: «Ошибка вывода строки»
textual
Листинг программы
;Дан текст 20 символов. Определить кол-во повторений ;сочетаний "op" в тексте и заменить его символом "!" .model small .stack .data req db 10,13,'Enter string:$' res db 10,13,'result string:$' quantity db 10,13,'Kolichestvo:$' inpbuf db 20 len db ? buf db 20 dup(?) ; .code start: mov ax, @data mov ds, ax mov es, ax ;вывод чисто сообщени MOV AH,09h ;output lines of the DS: DX. LEA DX,req INT 21h ;ввод строки MOV AH,0Ah ;enter a string DS: DX LEA DX,inpbuf ;buffer address INT 21h LEA SI,buf MOV DI, SI XOR CH, CH XOR AX, AX MOV CL,[len] m1: lodsb cmp al, 'o' jnz m2 cmp byte ptr [si], 'p' jnz m2 mov al, '!' stosb inc si inc ah dec cx ; <--- jmp m3 m2: stosb m3: loop m1 mov al,'$' stosb PUSH AX MOV AH,09h ;output lines of the DS: DX. LEA DX,quantity INT 21h POP AX mov al, ah or al, '0' int 29h MOV AH,09h ;output lines of the DS: DX. LEA DX,res INT 21h MOV AH,09h lea DX,buf int 21h mov ax, 4c00h int 21h end start