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

четверг, 8 декабря 2011 г.

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

 
Если выпуск не отображается, вы можете прочесть его на сайте Отказаться от рекламы
  
  
  

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

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

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

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

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

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

Номер выпуска:1494
Дата выхода:08.12.2011, 22:00
Администратор рассылки:Лысков Игорь Витальевич (Старший модератор)
Подписчиков / экспертов:186 / 63
Вопросов / ответов:1 / 2

Консультация # 184656: Уважаемые эксперты! Требуется решить следующую задачку на Assembler (TASM): "В каждой пятерке массива а(15) найти второй по величине элемент, умножьте его на 2. Организовать массив b(3) из этих элементов". Заранее спасибо!...


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

Уважаемые эксперты! Требуется решить следующую задачку на Assembler (TASM):
"В каждой пятерке массива а(15) найти второй по величине элемент, умножьте его на 2. Организовать массив b(3) из этих элементов".
Заранее спасибо!

Дата отправки: 02.12.2011, 22:30
Вопрос задал: Sanek (Посетитель)
Всего ответов: 2
Страница онлайн-консультации »


Консультирует Кривенко Евгений Владимирович (7-й класс):

Здравствуйте, Sanek!
вот решение для 32х битных элементов массива a, в диапазоне от 0 до 2^31 для без знаковых элементов и от -2^30 до 2^30-1 для знаковых:

Приложение:

Консультировал: Кривенко Евгений Владимирович (7-й класс)
Дата отправки: 03.12.2011, 12:44
Рейтинг ответа:

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


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

Здравствуйте, Sanek!
Вот Вам полностью функциональная 16-битная программа со вводом и выводом.

Код :
;В каждой пятерке массива а(15) найти второй по величине элемент,  ;умножьте его на 2. Организовать массив b(3) из этих элементов  code	segment	'code'		;начало сегмента кода 	assume	cs:code,ds:data,ss:stk  main	proc 	mov	ax, data 	mov	ds, ax 	mov	es, ax  Input: 	call	InputA		;вводим массив А 	jz	ToFormB		;проверим размер числа 	lea	dx, sNumError	;число превысило 32767 	mov	ah, 9 	int	21h 	jmp	Input		;на повтор ввода  ToFormB: 	call	FormB		;формируем В 	call	OutputB		;выводим В  PrintAny: 	lea	dx, sAny	;press any key 	mov	ah, 9 	int	21h  	mov	ah, 0 	int	16h		;ждем any key  	mov	ax, 4c00h 	int	21h		;выход в ДОС main	endp  InputA	proc			;вводим А 	lea	dx, sEnterA 	mov	ah, 9 	int	21h		;приглашение на ввод элементов массива A 	 	lea	di, A		;адрес А 	lea	bp, [di+15*2]	;адрес за массивом (для контроля конца) IA_ask: 	lea	dx, sNum	;приглашаем ко вводу 	mov	ah, 0ah 	int	21h 	lea	si, sBuf	;строка с числами, разделенная разделителями 	cld IA_next: 	cmp	di, bp		;массив заполнен? 	je	IA_ok  	call	stoi		;[si] в число  	jc	IA_err		;ошибка разрядности? 	jcxz	IA_newrow	;дошли до конца строки? 	stosw			;сохраняем 	jmp	IA_next		;на следующее число в строке IA_newrow: 	mov	ah, 2 	mov	dl, 0ah 	int	21h		;переход на новую строку 	jmp	IA_ask		;на запрос новой строки IA_err: 	or	ax, 1		;FZ == 0 -> ошибка размерности IA_ok: 	ret			;FZ == 1 -> все ок InputA	endp  FormB	proc			;формируем массив В 	lea	si, A 	lea	di, B 	mov	cx, 3		;3 пятерки GroupsLoop: 	push	cx 	mov	cx, 5		;число элементов в группе 	xor	dx, dx		;максимальное 	xor	bx, bx		;"предмаксимальное" OneGroupLoop: 	lodsw 	cmp	ax, bx		;сравним с предмаксимальным 	jbe	OneGroupNext	;<= - идем дальше 	cmp	ax, dx		;сравним с максимальным 	je	OneGroupNext	;одинаковые пропускаем 	jb	SetPrev		;меньше - сохраняем, как новый предмаксимальный 	mov	bx, dx		;больше - старый максимальный, как предмаксимальный 	mov	dx, ax		;новый, как новый максимальный 	jmp	OneGroupNext SetPrev: 	mov	bx, ax		;новый предмаксимальный OneGroupNext: 	loop	OneGroupLoop 	mov	ax,bx		;предмаксимальный 	shl	ax, 1		;умножаем на 2 	stosw			;сохраняем 	pop	cx 	loop	GroupsLoop 	ret FormB	endp  OutputB	proc			;выводим В 	lea	dx, sResult 	mov	ah, 9 	int	21h		;вывод заголовока из dx 	xor	cx, cx		;счетчик элементов OB_loop: 	lodsw			;очередное значение 	call	itoa		;вывод числовой строки 	inc	cx		;считаем 	cmp	cx, 3		;вывели 3? 	je	OB_ret 	mov	dl, ','		;разделим запятой 	int	21h		;ah = 2 	jmp	OB_loop OB_ret: 	ret OutputB	endp  itoa	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 itoa	endp  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 	test	dx, dx 	pop	dx		;новый 	jnz	stoi_err 	test	ax, ax 	js	stoi_err 	and	dx, 0fh		;'0'-'9' -> 0-9 	add	ax, dx		;добавляем новый разряд 	js	stoi_err 	mov	bx, ax		;сохраняем 	inc	cx		;считаем 	jmp	stoi_next	;продолжаем stoi_sep:			;встретили разделитель 	jcxz	stoi_next	;были только разделители - на продолжение 				; иначе - конец числа и выходим stoi_eol:			; если числа нет и встретили 0dh - конец строки 	mov	ax, bx		;число возвращаем в ax 	dec	si		;шаг назад, чтобы легче было проанализировать 0dh 	clc 	ret stoi_err: 	stc 	ret stoi	endp  code	ends  data		segment sEnterA		db	'Enter A (15 numbers): $' sResult		db	0dh,0ah,'B = $' sNumError	db	0dh,0ah,'Numbers must be < 32768',0dh,0ah,'$' sAny		db	0dh,0ah,'Press any key$',0  sNum		db	80 len		db	? sBuf		db	80 dup (?)  A		dw	15 dup (?) B		dw	3 dup (?) data		ends  stk	segment	stack 	dw	100h dup (?) stk	ends  	end	main 

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

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


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

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

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


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

Прошлые выпуски
RFpro.ru: Ассемблер? Это просто! Учимся программировать    07 декабря 2011, 21:34
RFpro.ru: Ассемблер? Это просто! Учимся программировать    06 декабря 2011, 21:04
RFpro.ru: Ассемблер? Это просто! Учимся программировать    21 ноября 2011, 01:33

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

9 декабря 2011 отмечают:
День Героев Отечества в&nbsp;России
Международный день борьбы с&nbsp;коррупцией
Фестиваль Эскаляд

Именины: Афанасий, Петр, Юлиан, Яков, Василий, Георгий, Даниил, Иван, Илья, Иннокентий, Назар, Николай
 
 

Subscribe рекомендует
 
Компьютеры и интернет  →   рассылки   и   группы
  
Единство всего мира и понимание его
Единство всего мира - это идея признанная наукой экологией более полувека. Однако, впервые эта идея была обнародована более 3300 лет тому назад в пятикн...
Темы: 517   Участники: 927
  Семейное право и права детей в России
Получение и обмен информацией, свободное консультирование по темам семейного права, жилищного права супругов, наследственного права, прав детей и всех аспектов правового регулирования семейных отношений и социальной политики
Темы: 26   Участники: 414
  Уникальные новости от Свободного Журналиста
Я - свободный журналист. Моя работа - дать Вам пищу для ума. Испытываете инфо-голод? Вкусности здесь! Цель создания группы: публикация качественной, инт...
Темы: 64   Участники: 769
 
 
 
Подписан адрес: admin10383.deep@blogger.com
Код этой рассылки: comp.prog.assembler
Архив рассылки
Отписаться:  На сайте  Почтой
Поддержка подписчиков
Убрать рекламу
Другие рассылки этой тематики
Другие рассылки этого автора
 
Рассылка производится: Subscribe.Ru / ЗАО «Интернет-Проекты» / О компании / Политика конфиденциальности

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

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