WMmail.ru - сервис почтовых рассылок

среда, 22 мая 2013 г.

RFpro.ru: Ассемблер? Это просто! Учимся программировать

 
Если выпуск не отображается, вы можете прочесть его на сайте Отказаться от рекламы
  
  
Конференция Digitale пройдет в СПб Конференция Digitale пройдет в СПб
3 и 4 июня состоится конференция по маркетингу Digitale

  Курс "Практическая психология" Курс "Практическая психология"
Дистанционно в ЕШКО. Первый месяц обучения всего 170 руб. Скачайте пробный урок бесплатно!

  Туфли Cinque Туфли Cinque
Купить за 4330 руб. Подробнее...

 
  

  Мои подписки      Мои группы      Мои новости     
        Автор 
Калашников О.А.
      
  
Компьютеры и интернет   →   Софт   →   Программирование   →   RFpro.ru: Ассемблер? Это просто! Учимся программировать
  
RFpro.ru: Ассемблер? Это просто! Учимся программировать
 
 

Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты по данной тематике

Асмик Гаряка
Статус: Советник
Рейтинг: 10909
• повысить рейтинг »
Коцюрбенко Алексей aka Жерар
Статус: Советник
Рейтинг: 3991
• повысить рейтинг »
Абаянцев Юрий Леонидович aka Ayl
Статус: Профессионал
Рейтинг: 1761
• повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / Assembler (Ассемблер)

Номер выпуска:1542
Дата выхода:22.05.2013, 19:30
Администратор рассылки:Лысков Игорь Витальевич (Старший модератор)
Подписчиков / экспертов:57 / 20
Вопросов / ответов:1 / 1

Консультация # 187354: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: С клавиатуры вводится матрица элементов (чисел) размерности 5x5 Необходимо вывести на экран максимальный номер столбца, в котором все числа - двузначные. Если такого столбца нет, вывести соответствующее сообщение. Задача для TASM, model small Прошу как мож...


Консультация # 187354:

Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:

С клавиатуры вводится матрица элементов (чисел) размерности 5x5
Необходимо вывести на экран максимальный номер столбца, в котором все числа - двузначные. Если такого столбца нет, вывести соответствующее сообщение.

Задача для TASM, model small
Прошу как можно подробнее расписать комментарии к программе. Заранее благодарен.

Дата отправки: 19.05.2013, 18:46
Вопрос задал: Козлов Олег Николаевич (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


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

Здравствуйте, Козлов Олег Николаевич!
Вот Вам программа.
Числа можно вводить разделенными, например, пробелами, по несколько штук в строке.
Удобнее всего, по 5.

Код :
;С клавиатуры вводится матрица элементов (чисел) размерности 5x5 ;Необходимо вывести на экран максимальный номер столбца, в котором все числа -  ;двузначные. Если такого столбца нет, вывести соответствующее сообщение.  	.model	small  	.data sMatrix	db	'Enter matrix 5x5 (row by row):',0dh,'$';приглашение для ввода элементов sSource	db	0ah,0ah,'Source matrix:',0dh,0ah,'$' sColumn	db	0dh,0ah,'Founded column: $' sNotFound db	0dh,0ah,'Column not found!$' sPress	db	0dh,0ah,0ah,'Press any key for exit$'  N	equ	5		;размерность матрицы  	.data? matrix	dw	N*N dup(?)	;матрица 5х5 ;буфер для ввода числовой строки (для функции 0ah) sNum	db	?		;максимальный размер буфера sCount	db	?		;реальный размер строки sBuf	db	80 dup (?)	;сама строка  	.code start: 	mov	ax, _DATA	;настроим сегментные регистры 	mov	ds, ax		;на сегмент данных 	mov	es, ax	  	call	GetMatrix 	;введем матрицу  	lea	dx, sSource	;заголовок 	call	PrintMatrix	;выведем исходную матрицу  	call	GetResult	;найдем то, что требуется 	cmp	ax, -1		;-1 значит не найдено 	je	not_found  	inc	ax		;сделаем счет с 1 	push	ax		;сохраним номер столбца 	lea	dx, sColumn 	mov	ah, 9 	int	21h		;выведем строку 	pop	ax		;и число 	call	PrintNum 	jmp	print_press	;на "Press any key" not_found: 	lea	dx, sNotFound	;не найдено 	mov	ah, 9 	int	21h print_press: 	lea	dx, sPress	;Press any key 	mov	ah, 9 	int	21h  	mov	ah, 0		;ждем "any key" 	int	16h  	mov	ax, 4c00h	;выход 	int	21h  PrintMatrix	proc		;вывод матрицы NxN 	mov	ah, 9 	int	21h		;вывод заголовока из dx  	lea	si, matrix	;адрес массива 	mov	cx, N		;число строк PrintRowLoop:			;вывод строк 	push	cx		;сохраним счетчик строк 	mov	cx, N		;чисо столбцов PrintColLoop:			;вывод одной строки 	lodsw			;очередное значение 	call	PrintNum	;вывод числовой строки 	mov	dl, 9		;разделим табуляцией 	int	21h		;ah = 2 	loop	PrintColLoop 	mov	dl, 0dh		;переход на новую строку 	int	21h 	mov	dl, 0ah 	int	21h 	pop	cx		;восстановим счетчик строк 	loop	PrintRowLoop 	ret PrintMatrix	endp  PrintNum	proc		;вывод беззнакового числа из ax 	push	cx		;сохраним счетчик колонок 	mov	bx, 10		;будем делить на 10 	xor	cx, cx		;счетчик цифр DivLoop: 	xor	dx, dx		;готовимся к делению dx:ax / bx 	div	bx		;ax - частное, dx - остаток=очередной младшей цифре 	push	dx		;сохраним цифру в стеке 	inc	cx		;посчитаем 	test	ax, ax		;продолжим, пока не 0 	jnz	DivLoop 	mov	ah, 2		;функция вывода PrintLoop:			;будем выводить в обратном порядке,  				; начиная со старшей шифры 	pop	dx		;восстановим очередной разряд 	or	dl, '0'		;превратим в символ 	int	21h		;выведем 	loop	PrintLoop 	pop	cx 	ret PrintNum	endp  GetMatrix	proc		;ввод матрицы 	lea	dx, sMatrix 	mov	ah, 9 	int	21h		;приглашение на ввод элементов матрицы  	lea	di, matrix	;адрес массива  	mov	ax, N		;адрес за массивом (для контроля конца) 	mul	ax 	shl	ax, 1 	add	ax, offset matrix 	mov	bp, ax		;сохраним для сравнения на конец GM_ask: 	mov	ah, 2 	mov	dl, 0ah 	int	21h		;переход на новую строку  	mov	sNum, 80 	lea	dx, sNum 	mov	ah, 0ah 	int	21h 	lea	si, sBuf	;строка с числами, разделенная разделителями  GM_next: 	cmp	di, bp		;массив заполнен? 	je	GM_ret  	call	stoi		;[si] -> ax 	jcxz	GM_ask		;дошли до конца строки? 	stosw			;сохраняем 	jmp	GM_next		;на следующее число в строке GM_ret: 	ret GetMatrix	endp  GetResult	proc		;поиск максимального столбца с двуразрядными числами 	mov	di, -1		;считаем пока, что не найдено 	xor	bx, bx		;адрес первого элемента первого столбца 	mov	cx, N		;количество столбцов  SearchAllColumnLoop:		;цикл по столбцам 	push	cx		;сохраним счетчик столбцов 	xor	si, si		;смещение первого элемента в столбце 	mov	cx, N		;количество строк в столбце SearchOneColumnLoop:		;цикл по строкам в столбце 	mov	ax, matrix[bx+si] ;очередной элемент 	cmp	ax, 10		;проверим на 10<=ax<=99 (на двузначность) 	jb	SearchAllColumnNext 	;не попадает - на следующий столбец 	cmp	ax, 99 	ja	SearchAllColumnNext 	;не попадает - на следующий столбец 	add	si, 2*N			;переход на следующую строку столбца 	loop	SearchOneColumnLoop	;цикл по элементам столбца 	mov	di, bx		;прошли весь столбец, значит, все элементы - двузначные 	shr	di, 1		;запоминаем его индекс,  				; разделив на 2 двубайтное смещение SearchAllColumnNext:		;переходим на следующий столбец 	pop	cx		;восстановим счетчик столбцов 	inc	bx		;переходим на следующий столбец 	inc	bx 	loop	SearchAllColumnLoop	;по всем колонкам 	mov	ax, di		;результат поиска вернем в ax 	ret GetResult	endp  ;функция преобразовывает числовую строку в число ;преобразование заканчивается по любому разделителю или концу строки (0dh) ;признаком конца строки является cx = 0 stoi	proc			;преобразование строки [si] в беззнаковое число AX 	xor	bx, bx		;здесь будем стоить число 	xor	cx, cx		;счетчик разрядов stoi_next: 	lodsb			;очередной символ 	cmp	al, 0dh		;конец стоки? 	je	stoi_eol 	cmp	al, '0' 	jb	stoi_sep	;любая нецифра - разделитель 	cmp	al, '9' 	ja	stoi_sep 	push	ax		;сохраним новый разряд 	mov	ax, 10 	mul	bx		;умножим старшие на 10 	pop	dx		;новый 	and	dx, 0fh		;'0'-'9' -> 0-9 	add	ax, dx		;добавляем новый разряд 	mov	bx, ax		;сохраняем 	inc	cx		;считаем 	jmp	stoi_next	;продолжаем stoi_sep:			;встретили разделитель 	jcxz	stoi_next	;были только разделители - на продолжение 				; иначе - конец числа и выходим stoi_eol:			; если числа нет и встретили 0dh - конец строки 	mov	ax, bx		;число возвращаем в ax 	dec	si		;шаг назад, чтобы легче было проанализировать 0dh 	ret stoi	endp  	end	start

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

5
нет комментария
-----
Дата оценки: 20.05.2013, 01:22

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

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка  |  восстановить логин/пароль

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!


 
 
Комментировать выпуск
     В избранное

Прошлые выпуски
RFpro.ru: Ассемблер? Это просто! Учимся программировать    05 мая 2013, 21:33
RFpro.ru: Ассемблер? Это просто! Учимся программировать    18 апреля 2013, 12:03
RFpro.ru: Ассемблер? Это просто! Учимся программировать    15 апреля 2013, 20:03

Все выпуски рассылки

23 мая 2013 отмечают:
Всемирный день черепахи
День работников Министерства экологии и&nbsp;природных ресурсов Азербайджана
День труда на&nbsp;Ямайке
Возвещение Баба
Гран-при Монако

Именины: Василий, Кирилл, Таисия
 
 

Subscribe рекомендует
 
Компьютеры и интернет  →   рассылки   и   группы
  
Элитариум: Психология и экономика жизненного успеха
Личное благополучие и благосостояние. Профессиональный и личностный рост, здоровье и финансы. Ясные и краткие практические материалы. Корпоративная рассылка экспертного сообщества.
Подписчиков: 46596
  Ключи для NOD32. Регулярное обновление
Всегда свежие TRIAL ключи для NOD32 в вашем почтовом ящике, действуют месяц, потом можно заменить на новый и т.д. Рассылка раз в неделю
Подписчиков: 13136
  Создание блогов
Достижение своей мечты с помощью создания собственного блога или сайта. Здесь я пошагово расскажу о самых оптимальных способах и методах создания сайта или блога. Узнаем что такое блоговедение, раскрутка сайта, большая посещаемость и другое.
Подписчиков: 1
 
 
 
Подписан адрес: admin10383.deep@blogger.com
Код этой рассылки: comp.prog.assembler
Архив рассылки
Отписаться:  На сайте  Почтой
Поддержка подписчиков
Убрать рекламу
Другие рассылки этой тематики
Другие рассылки этого автора
 
Рассылка производится: Subscribe.Ru / ЗАО «Интернет-Проекты» / О компании / Политика конфиденциальности

Комментариев нет:

Отправить комментарий