24.01.2019, 06:49 [+3 UTC]
в нашей команде: 3 353 чел. | участники онлайн: 9 (рекорд: 20)

:: РЕГИСТРАЦИЯ

:: задать вопрос

:: все разделы

:: правила

:: новости

:: участники

:: доска почёта

:: форум

:: блоги

:: поиск

:: статистика

:: наш журнал

:: наши встречи

:: наша галерея

:: отзывы о нас

:: поддержка

:: руководство

Версия системы:
7.66 (22.01.2019)
JS-v.1.31 | CSS-v.3.35

Общие новости:
01.01.2019, 13:54

Форум:
22.01.2019, 18:16

Последний вопрос:
23.01.2019, 21:30
Всего: 148557

Последний ответ:
24.01.2019, 06:32
Всего: 257637

Последняя рассылка:
23.01.2019, 23:15

Писем в очереди:
0

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
20.02.2012, 12:08 »
Даровко Антон Владимирович
Вы решили задачу отлично! [вопрос № 185468, ответ № 270006]
04.04.2010, 11:06 »
Киселев Сергей
Спасибо F®ost. Учту Ваши пожелания. [вопрос № 177650, ответ № 260572]
20.06.2011, 15:58 »
Julia Mechenaya
Большое спасибо экспертам портала за неоценимую помощь.

РАЗДЕЛ • Assembler

Создание программ на языке Assembler.

[администратор рассылки: Лысков Игорь Витальевич (Старший модератор)]

Лучшие эксперты в этом разделе

Коцюрбенко Алексей aka Жерар
Статус: Мастер-Эксперт
Рейтинг: 664
Зенченко Константин Николаевич
Статус: Старший модератор
Рейтинг: 382
cain52
Статус: 3-й класс
Рейтинг: 267

Перейти к консультации №:
 

Консультация онлайн # 192344
Раздел: • Assembler
Автор вопроса: bukety.sedobnye (Посетитель)
Отправлена: 08.01.2018, 18:33
Поступило ответов: 1

Уважаемые эксперты! Пожалуйста, ответьте на вопрос:
задача: написать программу, находящую максимальный или минимальный символ в исходной строке.
написал код, который вроде как должен найти максимальный символ. пожалуйста, помогите, завтра к утру уже нужно сдавать. правильно ли я вообще написал код? и вывод не пойму как правильно сделать

Приложение:

Состояние: Консультация закрыта

Ответ # 276016 от Лысков Игорь Витальевич (Старший модератор)

Здравствуйте, bukety.sedobnye!
Держите программу, сравните со своей... smile

Код (Assembler) :: выделить код
;написать программу, находящую максимальный или минимальный символ в исходной строке.
	.model	small
	.stack	100h
	.data
	szStr		EQU	250
	msg1		db	'Stroka:',10,13, '$'	
	NextLine	db     13,10,'$'
	MsgMax		db	'Max = $'
	MsgMin		db	13,10,'Min = $'
	MsgPustaya	db	'Net stroki!$'
	Stroka		db	szStr dup(?) 	; строка
	.code
start:	
	mov	ax, @data	
	mov	ds, ax	
	mov	es, ax

; вывод 1-го сообщения
	mov	ah, 09h
	mov	dx, offset msg1
	int	21h 

; ввод строки 
	mov	ah, 3fh				;функция DOS для чтения с ручного ввода
	mov	bx, 0				;описание стандартного ввода
	mov	cx, szStr			;считываем строку до максимально установленной длины
	mov	dx, OFFSET Stroka
	int	21h				;в AX - длина введенной строки, в конце коды 0dh,0ah

; следующая строка   
	lea	dx, nextLine
	mov	ah, 9
	int	21h  

; ищем символ 
	lea	si, Stroka
	mov	bx, 00ffh			;bh - max, bl - min (сначала самые большой и маленький код!)

sleduiushii_simvol:  
	mov	al, [si]
	inc	si
	cmp	al, 0dh				;при вводе при помощи ф-и 3fh в конце строки будут коды 0dh и 0ah!
	je	konez
						; сравниваем символы
	cmp	al, bl 				;сравним с минимальным
	jae	cmp_max				;если больше или равно, то на сравнение с максимальным
	mov	bl, al				;сохраним, как новый минимальный
cmp_max:
	cmp	al, bh				;сравним с максимальным
	jbe	sleduiushii_simvol		;если меньше или равно, то на чтение следующего символа
	mov	bh, al				;иначе - сохраним, как максимальный
	jmp 	sleduiushii_simvol

konez:						;выведем результат
	cmp	bx, 00ffh			;сначала сравним, была ли введена строка
	je	Pustaya_stroka			;если макс и мин не изменились, то ничего введено не было!
	
	mov	dx, offset MsgMax
	mov	ah, 9
	int	21h				;сообщение и макс символе
	mov	dl, bh				;значение
	mov	ah, 2
	int	21h				;выводим символ
	
	mov	dx, offset MsgMin		;аналогично для минимального
	mov	ah, 9
	int	21h
	mov	dl, bl
	mov	ah, 2
	int	21h

	lea	dx, nextLine
	mov	ah, 9
	int	21h  
	
; завершение программы   
exit:	
	mov	ah, 0				;подождем нажатие на клавишу, чтобы окно сразу не закрылось
	int	16h
	
	mov	ah, 04Ch	
	int	21h

Pustaya_stroka:
	mov	dx, offset MsgPustaya
	mov	ah, 9
	int	21h
	jmp	exit
	end	start


Консультировал: Лысков Игорь Витальевич (Старший модератор)
Дата отправки: 08.01.2018, 19:59

5
Огромное спасибо! Теперь вижу, что делал неправильно
-----
Дата оценки: 08.01.2018, 20:31

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Мини-форум консультации № 192344

Лысков Игорь Витальевич
Старший модератор

ID: 7438

# 1

= общий = | 08.01.2018, 18:52 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
bukety.sedobnye:

Так максимальный или минимальный символ надо искать?

=====
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен

Лысков Игорь Витальевич
Старший модератор

ID: 7438

# 2

= общий = | 08.01.2018, 18:59 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
bukety.sedobnye:

Любопытно, приготовили буфер для ввода строки с помощью функции 0ah,
а вводите при помощи функции чтения ah = 3fh (bx=0). Вы бы определились... smile

=====
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен

bukety.sedobnye
Посетитель

ID: 401611

# 3

= общий = | 08.01.2018, 19:11 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

Нужно найти и тот, и другой. Очень плохо разбираюсь. У преподавателя вопросов не возникало, поэтому делаю как получается, плохо конечно не разбираться...

Лысков Игорь Витальевич
Старший модератор

ID: 7438

# 4

= общий = | 08.01.2018, 19:18 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
bukety.sedobnye:

Если будем вводить при помощи 3fh, то надо убрать лишнее (нужное для 0ah) smile
Ух, был бы я у Вас преподом... Уж я бы назадавал вопросов... smile

=====
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен

Лысков Игорь Витальевич
Старший модератор

ID: 7438

# 5

= общий = | 08.01.2018, 19:20 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
bukety.sedobnye:

Кстати, с чего Вы взяли, что в конце введенного текста будет 0?

=====
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен

bukety.sedobnye
Посетитель

ID: 401611

# 6

= общий = | 08.01.2018, 19:46 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

0 - знак конца строки

Лысков Игорь Витальевич
Старший модератор

ID: 7438

# 7

= общий = | 08.01.2018, 19:53 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
bukety.sedobnye:

© Цитата:
0 - знак конца строки
Это замечательно, но в конце введенной строки по 3fh нуля нет.
Будет добавлена пара 0dh, 0ah

-----
Последнее редактирование 08.01.2018, 20:02 Лысков Игорь Витальевич (Старший модератор)

=====
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен

 

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Яндекс Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.15230 сек.

© 2001-2019, Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.66 от 22.01.2019
Версия JS: 1.31 | Версия CSS: 3.35