Консультация № 67271
16.12.2006, 17:59
0.00 руб.
0 1 1
Здравствуйте, эксперты!!! Условие задачи: В заданной строке заменить каждую группу стоящих рядом точек одной точкой. Подскажите, пожалуйста, где моя ошибка. Спасибо за внимание!

Приложение:
.stack 256.data welc db "vvedite stroku s gruppoy tochek: $" nums db ‘rezultat =$‘ len equ 100 str1 db len dup(20h) str2 db len dup(20h).codestart: mov ax, @data mov ds, ax mov es, ax mov ah, 9 mov dx, offset welc int 21h mov ah, 3fh mov bx, 0 mov dx, offset str1 mov cx, len int 21h mov cx, ax cld lea si,str1 lea di,str2 mov ah,0 mov di,si correct_loop: lodsb cmp al,0 je finish cmp al,‘.‘ jne store_byte cmp ah,al je correct_loop store_byte: mov [di],al inc di mov ah,al jmp correct_loop finish: mov byte ptr[di],0 mov ah, 9 mov dx, offset nums int 21h mov ah, 9 mov dx, offset str2 int 21h mov ax, 4c00h int 21hend start

Обсуждение

Неизвестный
16.12.2006, 18:38
общий
это ответ
Здравствуйте, Oopbl!

(1) зачем вам противоречащие друг другу LEA DI,str2 и MOV DI,SI? Второе нужно убрать, если вы собираетесь выводить в качестве результата str2.
(2) посмотрите, что оказывается в конце введённой строки - 0D0Ah! А вы эти символы без изменений копируете в str2 и выводите с помощью INT 21h AH=09h! Ведь это прерывание требует $ в качестве завершающего символа, а его нет => нужно к получившейся строке дописать 24h.
Остальное вроде ничего (правда, TASM выдал 40 ошибок по оформлению :)
Удачи!
Форма ответа