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

суббота, 10 декабря 2011 г.

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

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

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

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

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

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

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

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

Номер выпуска:1495
Дата выхода:10.12.2011, 21:30
Администратор рассылки:Лысков Игорь Витальевич (Старший модератор)
Подписчиков / экспертов:185 / 63
Вопросов / ответов:1 / 1

Консультация # 184691: Уважаемые эксперты! Пожалуйста, ответьте на вопрос: Необходимо произвести сложение двух десятиразрядных чисел №1 и №2, представленных в двоично-десятичном коде. Для организации сложения следует использовать команды работы со строками. Числа №1 и №2 рассматриваются как цепочки из 5 байтов каждое, записанные в памяти, начиная от младшего байта...


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

Уважаемые эксперты! Пожалуйста, ответьте на вопрос:
Необходимо произвести сложение двух десятиразрядных чисел №1 и №2, представленных в двоично-десятичном коде. Для организации сложения следует использовать команды работы со строками. Числа №1 и №2 рассматриваются как цепочки из
5 байтов каждое, записанные в памяти, начиная от младшего байта
к старшему. Программа должна состоять из сегментов данных, кода
и стека.Числа должны быть в упакованном виде(и желательно что бы программа работала с более сложными числами)
Ассемблер-Tasm.exe Исполняемый файл в формате EXE.
Очень надеюсь, что Вы мне поможете.

Дата отправки: 05.12.2011, 21:25
Вопрос задал: Дмитрий (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


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

Здравствуйте, Дмитрий!

Захотелось вывести в виде столбика smile

Код :
;сложение двух десятиразрядных чисел №1 и №2, представленных  ;в двоично-десятичном коде. Для организации сложения следует использовать  ;команды работы со строками. Числа №1 и №2 рассматриваются как цепочки из  ;5 байтов каждое, записанные в памяти, начиная от младшего байта  ;к старшему. Программа должна состоять из сегментов данных, кода  ;и стека.Числа должны быть в упакованном виде(и желательно что бы  ;программа работала с более сложными числами) ;Ассемблер-Tasm.exe Исполняемый файл в формате EXE.  	.186 code	segment	'code'		;начало сегмента кода 	assume	cs:code,ds:data,ss:stk  main	proc	 	mov	ax, data 	mov	ds, ax 	mov	es, ax  ;выведем пример 	lea	si, n1		;адрес первого слагаемого 	mov	bx, len		;длина в байтах 	call	PrintBCD	;вывод со смещением в 2 символа  	lea	dx, sPlus	;в следующей строке знак + 	mov	ah, 9 	int	21h  	lea	si, n2		;второе слагаемое 	mov	bx, len 	call	PrintBCD 				;нарисуем в следующей строке черту 	lea	dx, sEOL	;переход на новую строку 	mov	ah, 9 	int	21h 	mov	ah, 2 	mov	dl, ' '		;вначале один пробел 	int	21h 	mov	cx, len		;длина исходных чисел в байтах 	shl	cx, 1		;на каждый байт - два числа 	inc	cx		;плюс 1 на перенос LineLoop: 	mov	dl, '-'		;рисуем черту 	int	21h 	loop	LineLoop 	lea	dx, sEOL	;переход на новую строку 	mov	ah, 9 	int	21h  	call	AddBCD		;складываем!  	lea	si, n		;сумма 	mov	bx, len+1	;длина на 1 больше 	call	PrintBCD1	;выведем с первой позиции (для переноса)  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  ;вывод 1 десятичной цифры ;незначащие нули заменяем пробелом OneBCD	proc 	push	dx		;сохраним считанную пару цифр 	jcxz	PrintSpace	;ch - признак вывода, cl - очередная цифра 				;если cx = 0, то заменяем пробелом 	or	ch, 1		;встретилась цифра не 0, помечаем обязательный вывод 	or	cl, '0'		;делаем символом 	jmp	PrintSymbol PrintSpace: 	mov	cl, ' '		;незначащие нули меняем на пробел PrintSymbol: 	mov	dl, cl		;для вывода 	int	21h 	pop	dx 	ret OneBCD	endp  ;вывод BCD-числа ;bx - длина числа в байтах ;si - адрес начала PrintBCD	proc 	mov	ah, 2		;для выравнивания сначала выведем пару пробелов 	mov	dl, ' ' 	int	21h 	int	21h PrintBCD1:			;точка входа для вывода без пробелов 	xor	cx, cx		;ch = 0 - нули не выводить 	mov	ah, 2		;функция вывода PrintBCDHiLoop:			;по байтам BCD 	mov	dl, [bx+si-1]	;читаем с конца (сначала старший) 	mov	cl, dl 	shr	cl, 4		;старшая тетрада 	call	OneBCD		;выводим 	mov	cl, dl 	and	cl, 0fh		;младшая тетрада 	call	OneBCD 	dec	bx		;смещаемся к началу 	cmp	bx, 1		;все, кроме первого  	ja	PrintBCDHiLoop 				;младший байт отдельно 	mov	dl, [bx+si-1]	;читаем 	mov	cl, dl 	shr	cl, 4		;старшая тетрада 	call	OneBCD 	mov	cl, dl 	or	ch, 1		;младшую выводим в любом случае 	and	cl, 0fh		;младшая тетрада 	call	OneBCD 	ret PrintBCD	endp  AddBCD	proc			;сумма 	lea	di, n		;адрес суммы 	mov	cx, len		;длина чисел в байтах 	lea	si, n1		;первое слагаемое 	lea	di, n2		;второе слагаемое 	lea	bx, n		;сумма 	clc			;для первой команды adc AddBCDLoop: 	lodsb			;байт первого слагаемого 	mov	ah, al		;сохраним 	xchg	si, di		;si - второе слагаемое, di - первое 	lodsb			;байт второго слагаемого 	xchg	di, bx		;di - сумма, bx - первое слагаемое 	adc	al, ah		;складываем с байтом первого + перенос 	daa			;десятичная коррекция! 	stosb			;сохраняем в сумме 	xchg	si, bx		;si - первое слагаемое, bx - второе 	xchg	di, bx		;di - второе слагаемое, bx - сумма 	loop	AddBCDLoop 	mov	al, 0		;учтем перенос 	adc	al, 0 	mov	di, bx		;сумма 	stosb			;сохраним переполнение в дополнительный байт 	ret AddBCD	endp  code	ends  data		segment n1	db	89h,67h,45h,12h,30h	;первое слагаемое len	equ	$-n1			;длина слагаемых n2	db	12h,34h,00h,00h,99h	;второе sPlus	db	0dh,0ah,'+' sEOL	db	0dh,0ah,'$' sAny	db	0dh,0ah,'Press any key$' n	db	len+1 dup (?)		;сумма, на 1 байт больше data		ends  stk	segment	stack 	dw	100h dup (?) stk	ends  	end	main 

Вывод программы
Код :
   3012456789 +   9900003412  -----------  12912460201 Press any key

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

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


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

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

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


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

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

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

11 декабря 2011 отмечают:
Международный день гор
Международный день танго
День благотворительности на Украине
Третье воскресенье Адвента
День памяти священномученика митрополита Серафима (Чичагова)

Именины: Алексей, Павел, Петр, Сергей, Степан, Тимофей, Федор, Андрей, Анна, Василий, Григорий, Даниил, Иван, Константин, Николай
 
 

Subscribe рекомендует
 
Компьютеры и интернет  →   рассылки   и   группы
  
Полезные статьи о строительстве
Уважаемые друзья! Группа предназначена для людей, которые делают ремонт в своей квартире/доме, а так же для компаний которые продают качественные строит...
Темы: 2086   Участники: 3996
  Секреты здорового долголетия
Как сохранить здоровье, как сохранить память, умственную способность, как сохранить молодость? Как оставаться независимым? Как оставаться полезным своим...
Темы: 1355   Участники: 4825
  Откровенно и с юмором о сетевом бизнесе
А некдоты и юмор о себе и не только. В ыявление и преодоление недостатков в бизнесе. Т резвый взгляд в будущее. О бмен опытом между коллегами разных компаний. Правила публикаций здесь Блог администратора Блог модератора.
Темы: 313   Участники: 1979
 
 
 
Подписан адрес: admin10383.deep@blogger.com
Код этой рассылки: comp.prog.assembler
Архив рассылки
Отписаться:  На сайте  Почтой
Поддержка подписчиков
Убрать рекламу
Другие рассылки этой тематики
Другие рассылки этого автора
 
Рассылка производится: Subscribe.Ru / ЗАО «Интернет-Проекты» / О компании / Политика конфиденциальности

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

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