Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

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


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

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

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

Асмик Гаряка
Статус: Академик
Рейтинг: 10376
∙ повысить рейтинг »
Коцюрбенко Алексей aka Жерар
Статус: Академик
Рейтинг: 3897
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 2388
∙ повысить рейтинг »

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

Номер выпуска:1510
Дата выхода:10.04.2012, 16:30
Администратор рассылки:Лысков Игорь Витальевич (Старший модератор)
Подписчиков / экспертов:99 / 40
Вопросов / ответов:1 / 1

Консультация # 185769: Здравствуйте, уважаемые эксперты! Прошу вас написать программу вот с таким заданием: Дана матрица размером m x m. Записать главную диагональ (любую из двух) в обратном порядке. Желательно к каждой строке прописать комментарии. И сделайте пожалуйста без использования процедур и макросов. п.с. Ассемблер : TASM Размер пе...


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

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

Дана матрица размером m x m. Записать главную диагональ (любую из двух) в обратном порядке.

Желательно к каждой строке прописать комментарии.
И сделайте пожалуйста без использования процедур и макросов.

п.с.
Ассемблер : TASM
Размер переменных: Слово
Числа в матрице рандомные
Размер матрицы не будет больше 5x5

Заранее спасибо.

Дата отправки: 07.04.2012, 16:01
Вопрос задал: Yankov Dmitry (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


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

Здравствуйте, Yankov Dmitry!
Предлагаю такую программу.
Для заполнения матрицы использовал несложный генератор псевдослучайных чисел.
Для его инициализации - системное время.
Если что непонятно, спрашивайте.

Код :
	.model	small

N	equ	5		;размерность матрицы
	.data
seed	dw	?		;очередное псевдослучайное число
matrix	dw	5*5 dup (?)	;матрица 5*5 слов

	.code
start:
	mov	ax, @data
	mov	ds, ax
	mov	es, ax

	call	randInit	;инициируем последовательность псевдослучайных чисел

;заполним матрицу псевдослучайными числами 0-99
	lea	di, matrix	;адрес
	mov	cx, N*N		;количество
formMatrixLoop:
	call	rand		;получаем число
	stosw			;пишем в матрицу
	loop	formMatrixLoop	;по всем элементам матрицы

;запишем главную диагональ в обратном порядке
	xor	si, si		;смещение элемента левого верхнего угла матрицы (самого первого)
	mov	di, 2*(N*N-1)	;смещение элемента правого нижнего угла матрицы (самого последнего)
ChangeLoop:			;по элементам главной диагонали
	cmp	si, di		;меняем, пока первый индекс меньше второго
	jae	ChangeEnd	;все сделано - на выход
	mov	ax, matrix[si]	;меняем местами matrix[si] и matrix[di]
	xchg	ax, matrix[di]
	xchg	ax, matrix[si]
	add	si, 2*(N+1)	;смещаем на следующий диагональный
	sub	di, 2*(N+1)	;смещаем на предыдущий диагональный
	jmp	ChangeLoop	;на следующий обмен
ChangeEnd:
	
	mov	ax, 4c00h
	int	21h

;инициализация последовательности псевдослучайных чисел
randInit	proc
	mov	ah, 2ch		;запрашиваем текущее время
	int	21h		;получим: ch - секунды, cl - сотые секунды, dh - часы, dl - минуты
	xor	cx, dx		;сделаем более "случайным"
	xchg	ch, cl		;и чтобы младший байт шел первым
	mov     seed, cx	;сохраним
	ret
randInit	endp

;получение очередного псевдослучайного числа в диапозоне 0-99
rand	proc	near
	mov	ax, seed	;предыдущее случайное число
	mov	dx, 8E45h	;возьмем вот такое число
	mul	dx		;и умножим на него
	inc	ax		;чтобы исключить "зацикливание" на нуле
	mov	seed, ax	;сохраним
	xor	dx, dx		;получим число в диапозоне 0-99
	mov	bx, 100		;для этого разделим на 100
	div	bx
	mov	ax, dx		;и возьмем остаток от деления
	ret
rand	endp
	end	start

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

5
нет комментария
-----
Дата оценки: 09.04.2012, 17:47

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

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


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

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

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



В избранное