Мусор при выводе строки - Assembler
Формулировка задачи:
В общем, вводится строка, а потом выводится... кракозябрами
Вывод строки вроде стандартный...
.model tiny .data sIn db 'Ââåäèòå ñòðîêó: $' sOut db 0dh,0ah,'ГЉГ®Г*ГҐГ·Г*Г*Гї ñðîêГ*: $' buf label byte ; ГЎГіГґГҐГ° äëÿ ïðèåìГ* ñòðîêè Г± ГЄГ«Г*ГўГЁГ*òóðû (ГЇГ® Гґ-ГЁ 0ah) max db 128 ; Г¬Г*ГЄГ±ГЁГ¬Г*ëüГ*Г*Гї äëèГ*Г* ñòðîêè len db 0 ; ðåГ*ëüГ*Г*Гї äëèГ*Г* ââåäåГ*Г*îé ñòðîêè string db 128 dup (?) ; Г±Г*Г¬Г* ñòðîêГ* .code .startup lea dx, sIn mov ah, 9 int 21h ; ïðèãëГ*ГёГҐГ*ГЁГҐ ГўГўГҐГ±ГІГЁ ñòðîêó lea dx, buf mov ah, 0ah int 21h ; ââîäèì ñòðîêó xor bl, bl ; bl - ГґГ«Г*ГЈ òîãî, Г·ГІГ® õîòÿ ГЎГ» 1 ñëîâî Г*Г*éäåГ*Г® xor bh, bh ; bh =1, êîãäГ* ìû óæå äîáГ*âèëè îäèГ* ïðîáåë (Г*Г* ñëó÷Г*Г© ãðóïïû Г°Г*çäåëèòåëåé) lea si, string ; Г±Г*Г¬Г* ñòðîêГ* main_loop: ; îñГ*îâГ*îé öèêë lodsb ; î÷åðåäГ*îé ñèìâîë Гў ðåãèñòð al cmp al, 0dh ; ГЄГ®Г*ГҐГ¶ ñòðîêè ? je print_rezult; Г*Г* ГЄГ®Г*ГҐГ¶ îáðГ*áîòêè cmp al, 30h ; öèôðû ? jb separator ; ìåГ*ГјГёГҐ - Г°Г*çäåëèòåëü cmp al, 39h ; '9' jbe word_found ; Г·Г*Г±ГІГј ñëîâГ* cmp al, 'A' ; áîëüøèå Г«Г*ГІГЁГ*Г±ГЄГЁГҐ ? jb separator ; ìåГ*ГјГёГҐ - Г°Г*çäåëèòåëü cmp al, 'Z' jbe word_found ; Г·Г*Г±ГІГј ñëîâГ* cmp al, 'a' ; Г¬Г*ëûå Г«Г*ГІГЁГ*Г±ГЄГЁГҐ ? jb separator ; ìåГ*ГјГёГҐ - Г°Г*çäåëèòåëü cmp al, 'z' jbe word_found ; Г·Г*Г±ГІГј ñëîâГ* cmp al, 80h ; êèðèëëèöГ* ГЂ-ГЇ jb separator ; ìåГ*ГјГёГҐ - Г°Г*çäåëèòåëü cmp al, 0afh jbe word_found ; Г·Г*Г±ГІГј ñëîâГ* cmp al, 0e0h ; êèðèëëèöГ* Г°-Гї,ВЁ,Вё,ГіГЄГ°Г*ГЁГ*Г±ГЄГЁГҐ,áåëîðóññêèå áóêîâêè jb separator ; ìåГ*ГјГёГҐ - Г°Г*çäåëèòåëü cmp al, 0f7h jbe word_found ; Г·Г*Г±ГІГј ñëîâГ* separator: cmp bl,0 ; ìîæГ*Г® ëè äîáГ*âëÿòü ïðîáåëû? je next ; äîáГ*âëÿòü Г*åëüçÿ cmp bh, 0 ; ïðîáåë ГҐГ№ГҐ Г*ГҐ äîáГ*âëÿëè je add_probel ; äîáГ*âëÿåì ïðîáåë jmp next add_probel: mov bh,1 ; ôèêñèðóåì äîáГ*âëåГ*ГЁГҐ ïðîáåëГ* ; äîáГ*âëÿåì ïðîáåë jmp next word_found: ; ñëîâî mov bl,1 ; õîòÿ ГЎГ» îäГ*Г® ñëîâî Г*Г*éäåГ*Г®,ìîæГ*Г® äîáГ*âëÿòü ïðîáåëû mov bh,0 ; jmp next ; Г*Г* Г·ГІГҐГ*ГЁГҐ î÷åðåäГ*îãî ñèìâîëГ* next: jmp main_loop ; Г*Г* îñГ*îâГ*îé öèêë print_rezult: ; âñòðåòèëè ГЄГ®Г*ГҐГ¶ ñòðîêè ; ГЇГҐГ·Г*ГІГ*ГҐГ¬ ГІГҐГЄГ±ГІ mov ah,09h lea dx,sOut int 21h ;ГЇГҐГ·Г*ГІГ*ГҐГ¬ ñòðîêó mov ah, 09h lea dx, string ; Г°Г*ГўГ*îñèëüГ*Г® mov dx, offset string int 21h ret endp end
Решение задачи: «Мусор при выводе строки»
textual
Листинг программы
add_probel: mov bh,1 ; фиксируем добавление пробела ; добавляем пробел -??? jmp next
Объяснение кода листинга программы
В данном коде выполняется добавление пробела в строку, но в коде присутствуют некоторые непонятные моменты:
- mov bh,1 - здесь переменной
bh
присваивается значение 1. В контексте данной задачи, скорее всего, это означает, что в строку будет добавлен пробел. - ; добавляем пробел -??? - здесь отсутствует реализация добавления пробела. Возможно, это означает, что пробел должен быть добавлен каким-то другим способом, например, через изменение значения другой переменной.
- jmp next - здесь выполняется переход к следующей инструкции, которая, скорее всего, должна быть реализована вне данного блока кода. Вот список выполненных действий:
- Фиксация добавления пробела с помощью переменной
bh
. - Отсутствует реализация добавления пробела.
- Выполняется переход к следующей инструкции.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д