24.01.2018, 12:36 [+3 UTC]
в нашей команде: 2 496 чел. | участники онлайн: 3 (рекорд: 21)

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

:: консультации

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

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

:: правила

:: новости

:: участники

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

:: форум

:: блоги

:: поиск

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

:: наш журнал

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

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

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

:: поддержка

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

Версия системы:
7.42 (30.12.2017)

Общие новости:
02.01.2018, 09:46

Форум:
23.01.2018, 17:49

Последний вопрос:
24.01.2018, 11:08

Последний ответ:
24.01.2018, 11:21

Последняя рассылка:
24.01.2018, 02:15

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

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

Наша кнопка:

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

Отзывы о нас:
18.04.2012, 13:48 »
Arman Muratuly
Очень профессионально, ещё и помогли с переводом. Спасибо. [вопрос № 185844, ответ № 270562]
07.03.2012, 11:06 »
Александр
немного с ценой не соответствие, хорошо что было два варианта [вопрос № 185553, ответ № 270154]
17.12.2010, 14:08 »
lamed
Спасибо, Александр Львович! Хороших выходных! [вопрос № 181406, ответ № 264844]

РАЗДЕЛ • Assembler

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

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

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

Коцюрбенко Алексей aka Жерар
Статус: Мастер-Эксперт
Рейтинг: 617
Лысков Игорь Витальевич
Статус: Старший модератор
Рейтинг: 376
Зенченко Константин Николаевич
Статус: Модератор
Рейтинг: 362

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

Консультация онлайн # 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.15146 сек.

© 2001-2018, Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.42 от 30.12.2017