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

среда, 18 апреля 2012 г.

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

 
Если выпуск не отображается, вы можете прочесть его на сайте Отказаться от рекламы
  
  
Спутниковая сигнализация новейшего поколения. Круглосуточный контроль! Скидки на КАСКО до 80%
  
  
  

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

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

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

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

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

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

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

Консультация # 185830: Здравствуйте, уважаемые эксперты! Прошу вас написать программу вот с таким заданием: Программа просит ввести строку. Подсчитать количество слов в строке (слова разделены пробелом). При обработке использовать только команды работы со строками. Обработку оформить в виде процедуры. Результат вывести на экран и записать в файл. Сделать на...


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

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

Программа просит ввести строку. Подсчитать количество слов в строке (слова разделены пробелом). При обработке использовать только команды работы со строками. Обработку оформить в виде процедуры. Результат вывести на экран и записать в файл.

Сделать надо как можно проще

п.с.
Ассемблер : TASM
Написать к каждой строчке комментарии

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

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


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

Здравствуйте, Yankov Dmitry!
Надеюсь, комментариев будет достаточно...
Если что, спрашивайте... smile

Код :
;Программа просит ввести строку.  ;Подсчитать количество слов в строке (слова разделены пробелом).  ;При обработке использовать только команды работы со строками.  ;Обработку оформить в виде процедуры.  ;Результат вывести на экран и записать в файл.  	.model	small 	.data sEnter	db	'Enter string: ',0	;строка приглашения для ввода строки sAny	db	13,10,'Press any key',0	;строка приглашения нажать в конце на клавишу sName	db	'count.txt',0		;имя файла  ;ошибки sOpenError	db	13,10,'Open error',0 sWriteError	db	13,10,'Write error',0  sWords	db	13,10,'Words count = '	;сообщение о числе слов sCount	db	8 dup (0)		;здесь будет число - количество слов 					;буфер для ввода строки для функции 0ah buf	db	80			;максимальный размер len	db	0			;здесь будет реальная длина введенной строки string	db	80 dup (0)		;сама строка  	.code start: 	mov	ax, @data 	mov	ds, ax 	mov	es, ax  	lea	si, sEnter 	call	PrintString	;выведем строку приглашения ввода  	lea	dx, buf 	mov	ah, 0ah 	int	21h		;вводим строку  	lea	si, string 	call	CalcWords	;считаем слова в AX  	lea	di, sCount 	call	IntToString	;преобразуем число AX в строку es:[di]  	lea	si, sWords 	call	PrintString	;выводим сообщение о числе слов  	lea	si, sWords+2	;+2, чтобы обойти 0d0a 	call	WriteToFile	;и в файл  	lea	si, sAny 	call	PrintString	;press any key  	mov	ah, 0 	int	16h		;ждем any key  	mov	ax, 4c00h 	int	21h  PrintString	proc		;вывод строки ds:[si], заканчивающейся нулем 	mov	ah, 2		;ф-я вывода символа из dl PrintStringLoop: 	lodsb			;очередной 	cmp	al, 0		;0? 	je	PrintStringRet	;да - на выход 	mov	dl, al		;нет - выводим на экран 	int	21h 	jmp	PrintStringLoop PrintStringRet: 	ret PrintString	endp  CalcWords	proc		;считаем слова в строке ds:[si], заканчивающейся 0dh 	xor	dx, dx		;число слов CalcWordsStartWord: 	xor	cx, cx		;признак наличия слова CalcWordsLoop: 	lodsb			;очередной 	cmp	al, 0dh		;по 0dh  	je	CalcWordsLast	;на проверку последнего слова 	cmp	al, ' '		;если не пробел 	jne	CalcWordsNotSpace ;то на очередной символ слова 	jcxz	CalcWordsLoop	;повторные пробелы игнорируем 	inc	dx		;считаем слова по первому пробелу после каждого слова! 	jmp	CalcWordsStartWord ;на сброс признака наличия слова CalcWordsNotSpace: 	inc	cx		;не пробел - делаем признак слова ненулем! 	jmp	CalcWordsLoop CalcWordsLast:			;проверим на последнее слово 	jcxz	CalcWordsRet	;=0, когда после пробела, т.е. слов нет 	inc	dx		;!=0, значит было слово, учтем его CalcWordsRet: 	mov	ax, dx		;результат в ax 	ret CalcWords	endp 	 IntToString	proc		;преобразование числа AX в строку es:[di] 	xor	cx, cx		;счетчик цифр 	mov	bx, 10		;будем делить на 10 IntToStringLoop: 	xor	dx, dx		;готовимся к делению 	div	bx		;dx:ax / bx 	push	dx		;остаток - очередную цифру сохраняем в стеке 	inc	cx		;считаем 	test	ax, ax		;циклим, пока частное не нуль 	jne	IntToStringLoop ConvertLoop:			;выведем в обратном порядке 	pop	ax		;очередной разряд 	or	al, 30h		;0-9 -> '0'-'9' 	stosb			;сохраняем 	loop	ConvertLoop	;по всем цифрам 	xor	ax, ax		;закроем строку нулем 	stosb	 	ret IntToString	endp  WriteToFile	proc		;вывод в файл строки ds:[si] 	lea	dx, sName	;имя файла 	xor	cx, cx		;атрибут (без атрибутов) 	mov	ah, 3ch		;ф-я создания файла 	int	21h		;создаем файл 	jc	CreateError	;если ошибка 	mov	bx, ax		;handle файла  	mov	di, si		;найдем длину строки 	mov	al, 0		;будем искать 0 	mov	cx, 32		;длина, большая строки 	repne	scasb		;ищем 	mov	word ptr [di-1], 0a0dh	;добавим конец строки 	lea	cx, [di+1]	;адрес за строкой 	sub	cx, si		;длина строки 	mov	dx, si		;адрес строки ds:[dx] 	mov	ah, 40h		;ф-я вывода в файл 	int	21h		;пишем 	jc	WriteError	;если ошибка 	mov	ah, 3eh		;закрываем файл 	int	21h 	ret CreateError: 	lea	si, sOpenError 	call	PrintString 	ret WriteError: 	mov	ah, 3eh		;закрываем файл 	int	21h 	lea	si, sWriteError 	call	PrintString 	ret WriteToFile	endp  	end	start 

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

5
нет комментария
-----
Дата оценки: 16.04.2012, 12:37

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

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


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

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

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


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

Прошлые выпуски
RFpro.ru: Ассемблер? Это просто! Учимся программировать    12 апреля 2012, 16:32
RFpro.ru: Ассемблер? Это просто! Учимся программировать    10 апреля 2012, 16:34
RFpro.ru: Ассемблер? Это просто! Учимся программировать    03 апреля 2012, 02:32

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

18 апреля 2012 отмечают:
День воинской славы России — Ледовое побоище (1242)
Международный день памятников и исторических мест
Всемирный день радиолюбителя
Праздник Калачакры (Дуйнхор-хурал)
Перенесение мощей святителя Иова, патриарха Московского и всея Руси

Именины: Георгий, Марк, Николай, Платон
 
 

Subscribe рекомендует
 
Компьютеры и интернет  →   рассылки   и   группы
  
Клуб для людей, у которых дома живут Кошки
Кошка – одно из немногих животных, простое созерцание которого способно приносить огромное эстетическое наслаждение. Музыка без границ Собака в доме Графический фото редактор
Темы: 5916   Участники: 4602
  Создание настроения на день
Создавая рассылку "МентРа" (сокращение от Ментальная Разминка), я столкнулся с тем, что в каталоге Subscribe просто нет подходящей секции для рассылок, ...
Темы: 392   Участники: 3103
  Учимся работать в компьютерных программах
Приветствуем Вас в группе "Учимся работать в компьютерных программах" ! Наша группа поможет каждому обучиться работе на компьютере и в Интернете . Начин...
Темы: 3581   Участники: 22807
 
 
 
Подписан адрес: admin10383.deep@blogger.com
Код этой рассылки: comp.prog.assembler
Архив рассылки
Отписаться:  На сайте  Почтой
Поддержка подписчиков
Убрать рекламу
Другие рассылки этой тематики
Другие рассылки этого автора
 
Рассылка производится: Subscribe.Ru / ЗАО «Интернет-Проекты» / О компании / Политика конфиденциальности

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

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