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

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


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

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

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

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

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

Номер выпуска:1487
Дата выхода:09.11.2011, 14:30
Администратор рассылки:Лысков Игорь Витальевич (Старший модератор)
Подписчиков / экспертов:190 / 61
Вопросов / ответов:1 / 2

Консультация # 184374: Здравствуйте! Прошу помощи в следующем вопросе: необходимо написать программу на TASM Массив чисел из диапазона 00000000b..11111111b размерностью [1..N] вводится с клавиатуры, где N – число из диапазона 2..9, вводимое с клавиатуры. Вывести на экран результат побитовой логической операции «ИЛИ» для элементов с индексами 2, N и N div 2, где d...


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

Здравствуйте! Прошу помощи в следующем вопросе:
необходимо написать программу на TASM
Массив чисел из диапазона 00000000b..11111111b размерностью [1..N] вводится с клавиатуры, где N – число из диапазона 2..9, вводимое с клавиатуры. Вывести на экран результат побитовой логической операции «ИЛИ» для элементов с индексами 2, N и N div 2, где div – операция целочисленного деления.

Дата отправки: 04.11.2011, 14:14
Вопрос задал: Невалёный Виталий Владимирович (Посетитель)
Всего ответов: 2
Страница онлайн-консультации »


Консультирует Зенченко Константин Николаевич (Модератор):

Здравствуйте, Невалёный Виталий Владимирович!

Смотрите приложение. Программа Tasm, компилоировать как СОМ-файл.
Будут вопросы обращайтесь в мини-форум.
Удачи!

Приложение:

Консультировал: Зенченко Константин Николаевич (Модератор)
Дата отправки: 04.11.2011, 16:20

5
нет комментария
-----
Дата оценки: 04.11.2011, 18:36

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

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


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

Здравствуйте, Невалёный Виталий Владимирович!
Еще один вариант.
Формируем exe-программу командами
tasm name
tlink name

Примерный вывод:

Код :
Enter N: 3
Enter num[1]: 1111
Enter num[2]: 1010
Enter num[3]: 10101010
Result = 00001010 or 00001111 or 10101010 = 10101111
Press any key

Код :
code	segment	'code'		;начало сегмента кода
	assume	cs:code,ds:data,ss:stk

main	proc	
	mov	ax, data	;адрес сегмента данных
	mov	ds, ax		;в ds
	mov	es, ax		;в es

	lea	dx, sEnterN	;приглашение для ввода N
	mov	ah, 9
	int	21h
repeat:
	mov	ah, 0		;введем один код
	int	16h
	cmp	al, '2'		;ждем число 2-9
	jl	repeat
	cmp	al, '9'
	jg	repeat
	mov	dl, al		;сохраним для вывода
	and	ax, 000fh	;сделаем числом 2-9
	mov	N, ax		;N = AX
	mov	ah, 2		;выведем из dl
	int	21h

	mov	ah, 0		;подождем нажатие (например, на Enter), 
	int	16h		;чтобы сразу не перескакивало дальше
	
	lea	dx, sEOL	;перейдем на новую строку
	mov	ah, 9
	int	21h

	xor	bx, bx		;индекс с 0
enterLoop:
	call	InputBin	;введем байт, как строку бит, результат в al
	mov	sNum[bx], al	;сохраним в буфере
	inc	bx		;увеличиваем индекс
	cmp	bx, N		;ввели все числа
	jl	enterLoop

	lea	dx, sResult	;'Result = '
	mov	ah, 9
	int	21h

	mov	bx, 1		;индекс 2-го элемента (считаем с 0)
	mov	al, sNum[bx]	;элемент
	mov	dl, al		;здесь будем считать
	lea	si, sOr		;строка 'or' за двоичной строко
	call	PrintBin	;выведем

	mov	bx, N		;число элементов
	shr	bx, 1		;пополам
	dec	bx		;-1, т.к. счет с 0
	mov	al, sNum[bx]
	or	dl, al		;операция
	call	PrintBin

	mov	bx, N		;число элементов
	dec	bx		;индекс последнего (счет с 0)
	mov	al, sNum[bx]
	or	dl, al		;операция
	lea	si, sEq
	call	PrintBin

	mov	al, dl		;посчитанный результат
	lea	si, sEOL	;в конце - перевод строки
	call	PrintBin

finish:
	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

InputBin	proc		;ввод строки бит
	push	bx
				;сформируем подсказку
	lea	dx, sEnter	;Enter num[
	mov	ah, 9
	int	21h
	mov	dl, bl		;индекс числа
	add	dl, '1'		;добавляем 1 (чтобы выглядело, как счет с 1)
	mov	ah, 2		; и превращаем в символ, выводим
	int	21h
	lea	dx, sTail	;'] = '
	mov	ah, 9
	int	21h
				;вводим максимум 8 бит
	mov	cx, 8		;число бит
	mov	bl, 0		;здесь будем накапливать число
IB_loop:
	mov	ah, 0		;ждем код
	int	16h
	cmp	al, 0dh		;по Enter-у выходим
	je	IB_ret
	jcxz	IB_loop		;в конце ввода 8 бит ждем только Enter
	cmp	al, '0'		;ждем только 0 или 1
	je	IB_bin
	cmp	al, '1'
	jne	IB_loop
IB_bin:
	mov	dl, al		;сохраним для вывода
	shr	al, 1		;получим в бите FC младший бит (0 или 1)
	rcl	bl, 1		;вдвинем в результат
	mov	ah, 2
	int	21h		;выведем на экран из dl
	loop	IB_loop		;по всем
	jcxz	IB_loop		;ввели все 8, ждем Enter!
IB_ret:
	lea	dx, sEOL	;перейдем на новую строку
	mov	ah, 9
	int	21h
	mov	al, bl		;введенное побитно число
	pop	bx
	ret
InputBin	endp

PrintBin	proc		;вывод байта в al в виде строки бит
	push	dx
	mov	bl, al		;сохраним в bl
	mov	cx, 8		;8 бит
	mov	ah, 2		;ф-я вывода символа из dl на экран
PB_loop:
	shl	bl, 1		;сдвигаем на 1 бит влево. Старший бит в FC
	mov	dl, '0'		;готовим символ
	adc	dl, 0		;сложим с битом FC
	int	21h		;выведем
	loop	PB_loop
	mov	dx, si		;строка для вывода
	mov	ah, 9
	int	21h
	pop	dx
	ret
PrintBin	endp
code	ends

data	segment
sEnterN	db	'Enter N: $'
sEnter	db	'Enter num[$'
sTail	db	']: $'
sResult	db	'Result = $'
sOr	db	' or $'
sEq	db	' = $'
sEOL	db	0dh,0ah,'$'
sAny	db	'Press any key$'
N	dw	?
sNum	db	9 dup(?)
data	ends

stk	segment	stack
	dw	100h dup (?)
stk	ends

	end	main

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

5
нет комментария
-----
Дата оценки: 04.11.2011, 18:42

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

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


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

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

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



В избранное