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

среда, 13 апреля 2016 г.

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

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

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

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

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

Коцюрбенко Алексей aka Жерар
Статус: Мастер-Эксперт
Рейтинг: 357
• повысить рейтинг »
Асмик Гаряка
Статус: Советник
Рейтинг: 119
• повысить рейтинг »
Куликов Роман Евгеньевич
Статус: 1-й класс
Рейтинг: 0
• повысить рейтинг »

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

Номер выпуска:1594
Дата выхода:14.04.2016, 09:51
Администратор рассылки:Лысков Игорь Витальевич (Старший модератор)
Подписчиков / экспертов:17 / 8
Вопросов / ответов:3 / 3

Консультация # 189124: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Написать программу на ассемблере, для решения данного уравнения Программная реализация на TASM, DOS, формат ехе....
Консультация # 189125: Уважаемые эксперты! Пожалуйста, ответьте на вопрос: Доброго времени суток, уважаемые эксперты! Мне нужна ваша помощь! Суть задания заключается в следующем: реализовать программу со строками. Слова в строке могут быть разделены пробелами и знаками препинания. Удалить в каждом слове строки повторяющиеся в нем буквы. Помогите, пожалуйста. ...
Консультация # 1 89126: Здравствуйте! У меня возникли сложности с таким вопросом: Помогите написать программу на языке ассемблер, для решения уравнения ...

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

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

Написать программу на ассемблере, для решения данного уравнения
Программная реализация на TASM, DOS, формат ехе.

Дата отправки: 08.04.2016, 13:07
Вопрос задал: nikolan2012 (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


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

Здравствуйте, nikolan2012!

Смотрите приложение:

Код (Assembler) :: выделить код
model	small  data  a	dw	34  b	dw	260	  c	dw	2  d	dw	170  e	dw	3  f	dw	36  g	dw	8  h	dw	5  i	dw	6  j	dw	7  dbRes	db	10,13,'Result:$'  stack	100h  code  start:	mov	ax,@data  	mov	ds,ax;настраиваем сегмент  ;получаем знаменатель  	mov	ax,h;загружаем 5  	xor	dx,dx;  	mul	i;умножаем на 6  	mov	bx,f;загружаем 36  	add	bx,g;суммируем с 8  	shr	bx,1;делим на 2  	add	bx,ax;суммируем (36+8)/2+5*6  ;  	mov	ax,d;загружаем 170  	xor	dx,dx  	mul	e;умножаем на 3  	mov	cx,b;загружаем 260  	shr	cx,1;делим на 2  	add	ax,cx;суммируем 170*3+260/2  	add	ax,a;суммируем 34+170*3+260/2  ;  	xor	dx,dx  	div	bx;получаем первую дробь  ;(34+170*3+260/2)/((36+8)/2+5*6)  	push	ax;сохраняем в стеке  ;  	mov	ax,i;загружаем 6  	add	ax,j;суммируем с 7  	mov	si,a;загружаем 34  	shr	si,1;делим на 2  	xor	dx,dx  	mul	si;получаем второе число  	pop	bx;востанавливаем первое число  	add	ax,bx;суммируем  ;  	mov	si,10;система счисления  	xor	cx,cx;счетчик в стеке  @@01:	xor	dx,dx  	div	si;получаем младшую цифру  	push	dx;запоминаем в стеке  	inc	cx;считаем  	or	ax,ax;повторяем пока не ноль в ах  	jnz	@@01  	mov	ah,9  	lea	dx,dbRes  	int	21h;выводим сообщение  @@02:	pop	ax;извлекаем цифру  	add	al,'0';переводим в символ  	int	29h;выводим на экран  	loop	@@02  	xor	ax,ax;ожидаем любую клавишу  	int	16h  	mov	ah,4Ch;выход  	int	21h  end	start

Комментариев достаточно, если что спрашивайте в мини-форуме.
Удачи!

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

5
Спасибо, все работает!
-----
Дата оценки: 09.04.2016, 10:10

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

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

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

Уважаемые эксперты! Пожалуйста, ответьте на вопрос:
Доброго времени суток, уважаемые эксперты! Мне нужна ваша помощь!
Суть задания заключается в следующем:
реализовать программу со строками. Слова в строке могут быть разделены пробелами и знаками препинания. Удалить в каждом слове строки повторяющиеся в нем буквы.
Помогите, пожалуйста.
Буду очень благодарен за помощь. Добра и позитива!

Дата отправки: 08.04.2016, 13:10
Вопрос задал: Maxim (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


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

Здравствуйте, Maxim!
Где-то так... Идея такая:
1) ищем слова, состоящие из латинских букв. Все остальное - разделители
2) обнуляем в каждом слове одинаковые буквы
3) сжимаем строку, удаляя из нее нули
Комментариев более чем достаточно. Смотрите. С вопросами - в мини-форум smile

Код (Assembler) :: выделить код
  ;реализовать программу со строками.   ;слова в строке могут быть разделены пробелами и знаками препинания.   ;удалить в каждом слове строки повторяющиесЯ в нем буквы.    	.model	small  	.data  ;структура для ввода строки по функции 0ah  max	db	80		;максимальная длина строки  len	db	0		;реальная длина введенной строки  string	db	80 dup (0)	;сама строка, заканчивается кодом 0dh    sEnter		db	'Enter string: $'  sResult		db	0dh,0ah,'Result      : $'  sAny		db	0dh,0ah,'Press any key$'    	.code  start:  	mov	ax, @data	;настроим сегментные регистры  	mov	ds, ax  	mov	es, ax    ;ввод строки  ;введенная строка в структуре max,len,string  	call	EnterString    ;решаем задачу	  	call	DelRepeats    ;выводим преобразованную строку	  	lea	dx, sResult	;выведем Result:  	mov	ah, 9  	int	21h    	lea	dx, string	;строка  	mov	ah, 9  	int	21h  	  Exit:				;выход  	lea	dx, sAny  	mov	ah, 9  	int	21h    	mov	ah, 0		;подождем нажатия на любую клавишу  	int	16h    	mov	ax, 4c00h  	int	21h    EnterString	proc		;ввод строки  	lea	dx, sEnter	;выведем приглашение  	mov	ah, 9  	int	21h    	lea	dx, max		;вводим строку  	mov	ah, 0ah  	int	21h  	ret  EnterString	endp    isLetter	proc		;проверка на букву  	cmp	al, 'A'		;считаем, что буквы - только английские!  	jb	not_letter	; большие и маленькие  	cmp	al, 'Z'  	jbe	letter  	cmp	al, 'a'  	jb	not_letter  	cmp	al, 'z'  	ja	not_letter  letter:  	inc	bp		;помечаем, что найдена буква очередного слова  	stc			;помечаем, что буква  	ret  not_letter:  	clc			;не буква  	ret  isLetter	endp    ;поиск и обнуление повторяющихся букв в слове  ;BX - адрес начала слова  ;SI - адрес за словом  isRepeat	proc		  	test	bp, bp		;было ли слово?  	jne	isRepeat_ext_loop  	ret			;повтор разделителей, которые не трогаем  isRepeat_ext_loop:		;будем искать все буквы слова с начала слова  				; во всех последующих  	cmp	bx, si		;дошли до конца слова?  	jae	isRepeat_ret	;на выход  	mov	al, [bx]	;очередная буква  	cmp	al, 0		;уже обнуленную пропускаем  	je	isRepeat_ext_next  	lea	di, [bx+1]	;со следующего адреса  isRepeat_int_loop:  	cmp	di, si		;до конца слова  	jae	isRepeat_ext_next  	cmp	al, [di]	;сравниваем  	jne	isRepeat_int_next  	mov	byte ptr[bx], 0	;одинаковые обнуляем!  	mov	byte ptr[di], 0  isRepeat_int_next:  	inc	di		;на следующий адрес  	jmp	isRepeat_int_loop  isRepeat_ext_next:  	inc	bx		;на адрес следующей буквы, которую будем искать  	jmp	isRepeat_ext_loop  isRepeat_ret:  	xor	bp, bp		;сбросим флаг найденного слова  	ret  isRepeat	endp    DelZeros	proc		;сожмем строку, выбросим все нулевые байты  	lea	si, string	;адрес начала строки  DelZeros_loop:  	mov	al, [si]  	inc	si  	cmp	al, '$'  	je	DelZeros_ret	;дошли до конца строки  	cmp	al, 0  	jne	DelZeros_loop	;ненулевые обходим  	mov	di, si		;адрес за нулевым байтом  DelZeros_shift_loop:		;сдвигаем строку на одну букву назад  	mov	al, [di]	;тем самым затираем нуль  	mov	[di-1], al  	inc	di  	cmp	al, '$'		;до конца строки  	jne	DelZeros_shift_loop  	dec	si		;на одну букву сдвинули назад, поэтому надо проверить  				;  символ на позиции бывшего нуля  	jmp	DelZeros_loop	;на проверку очередного символа  DelZeros_ret:  	ret  DelZeros	endp    DelRepeats	proc		;удаление букв, которые повторяются в словах   	lea	si, string	;адрес начала строки  	xor	bx, bx		;вставим в конец строки символ '$' (для функции 9)  	mov	bl, len		;длина строки  	mov	[bx+si], byte ptr '$'  	xor	bp, bp		;флаг отсутствия слова  words_loop:			;цикл по словам  	mov	bx, si		;запоминаем начало слова  word_loop:			;поиск слова  	mov	al, [si]  	inc	si  	cmp	al, '$'		;дошли до конца  	je	DelRepeat_ret  	call	isLetter	;буква?  	jc	word_loop	;да - ищем небукву  				;нет - конец слова  	dec	si		;si - адрес за разделителем, уменьшим на 1  				; чтобы был адрес за словом  	call	isRepeat	;обнуляем повторы букв в слове (если они есть)  	inc	si		;адрес - за первым разделителем  	jmp	words_loop	;на поиск следующего слова  DelRepeat_ret:			;в конце надо еще проверить на наличие слова перед '$'  	dec	si  	call	isRepeat	;проверяем последнее слово  	call	DelZeros	;удаляем нулевые байты в строке  	ret  DelRepeats	endp    	end	start		;точка входа  

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

5
нет комментария
-----
Дата оценки: 08.04.2016, 19:39

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

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

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

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

Дата отправки: 08.04.2016, 13:10
Вопрос задал: vitya-titya (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


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

Здравствуйте, vitya-titya!

Смотрите приложение:

Код (Assembler) :: выделить код
model   small  data  a	dw	123  b	dw	4  c	dw	6  d	dw	3  e	dw	5  f	dw	36  g	dw	34  dbRes   db   10,13,'Result:$'   stack   100h  code   start:   mov   ax,@data      mov   ds,ax;настраиваем сегмент  ;считаем числитель дроби числителя  	mov	ax,a;  	sub	ax,b;  	xor	dx,dx  	mul	b;(123-4)*4  	push	ax  	mov	ax,c;  	sub	ax,d;  	xor	dx,dx;  	mul	e;(6-3)*5  	pop	bx  	add	bx,ax;  ;считаем знаменатель дроби числителя  	mov	ax,b  	xor	dx,dx  	mul	e;5*4  	xchg	ax,bx  	xor	dx,dx  	div	bx;((123-4)*4+(6-3)*5)/(5*4)  	mov	bx,ax  ;считаем знаменатель  	mov	ax,b;  	xor	dx,dx;  	mul	d;4*3  	add	ax,f;36+4*3  	xchg	bx,ax;  	div	bx;((123-4)*4+(6-3)*5)/(5*4))/(36+4*3)  	sub	ax,g;((123-4)*4+(6-3)*5)/(5*4))/(36+4*3)-34  ;  	xor	di,di  	test	ax,8000h  	jz	@@00  	mov	di,1  	not	ax  	inc	ax  @@00:	mov	si,10;система счисления   	xor	cx,cx;счетчик в стеке   @@01:	xor	dx,dx   	div	si;получаем младшую цифру   	push	dx;запоминаем в стеке   	inc	cx;считаем   	or	ax,ax;повторяем пока не ноль в ах   	jnz	@@01   	mov	ah,9   	lea	dx,dbRes  	int	21h;выводим сообщение   	or	di,di  	jz	@@02  	mov	al,'-'  	int	29h  @@02:	pop	ax;извлекаем цифру   	add	al,'0';переводим в символ   	int	29h;выводим на экран   	loop	@@02   	xor	ax,ax;ожидаем любую клавишу   	int	16h  	mov	ah,4Ch;выход   	int	21h  end   start

Удачи!

Консультировал: Зенченко Константин Николаевич (Модератор)
Дата отправки: 11.04.2016, 12:37
Рейтинг ответа:

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


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

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

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

 
     Прошлые выпуски
RFpro.ru: Ассемблер? Это просто! Учимся программироватьRFpro.ru: Ассемблер? Это просто! Учимся программироватьRFpro.ru: Ассемблер? Это просто! Учимся программироватьВсе выпуски рассылки
 
 
Subscribe.Ru / АО «Интернет-Проекты» / О компании / Политика конфиденциальности

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

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