Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.03.2012, 11:47   #1
RikkiTan
Пользователь
 
Аватар для RikkiTan
 
Регистрация: 15.11.2011
Сообщений: 62
По умолчанию Вычисление выражения (найти сумму ряда) (Ассемблер)

Доброго времени суток.
Написал программу для поиска суммы.Она все правильно считает, но трехзначный результат не выводит.Помогите, пожалуйста, вывести результат.
Вот код:
Код:

masm
model small
org	100h
stack 256
.data
a	db	n dup(?)
summa	dw	0
fact	dw	4
vvod	db	0ah,0dh,"BBog: ",'$'
vivod	db	0ah,0dh,"Pe3yJIbTaT: ",'$'
.code
main:	mov	ax,@data
	mov	ds,ax
	mov	cx,n
	lea	si,a
	
	mov	ah,09h
	lea	dx,vvod
	int	21h
	
								    
cycl1:	mov	ah,01h						    
	int	21h                                                							
	mov	bh,al						   	
	int	21h						   	
	mov	bl,al						   	
	mov	ax,bx 						    
	and	ax,0f0fh					 
	aad							  	
	mov	byte ptr[si],al					   
	inc	si						    
	mov	ah,02h						   	
	mov	dl,' '						   
	int	21h						    
	loop	cycl1 						    	


	xor	bx,bx
	xor	ax,ax
	mov	cx,n-3
	lea	si,a+2
		
cycl2:	
	mov	dx,fact
	mov	al,byte ptr[si]
	inc	dx
	mov	fact,dx
	cmp	al,8
	inc	si
	jl	cycl2
	mul	al
	mov	bx,ax
	xor	ax,ax
	mov	al,1
	mov	bh,2
                           
factory:
	mul	bh         
	inc	bh
	dec	dx
	cmp	dx,0	
	jne	factory
		
	add	ax,bx
	add	summa,ax
	loop	cycl2
		

	xor	ax,ax
	mov	ah,09h
	lea	dx,vivod
	int	21h
	xor	dx,dx
	xor	cx,cx
	xor	ax,ax	


								        
       	mov 	ax,summa						
      	aam 							        
        add	ax,3030h 					        
      	mov 	dl,ah 						        
      	mov 	dh,al                                                   
      	mov 	ah,02h						        
      	int 	21h 					  	        
       	mov 	dl,dh				   	        
	mov	ah,02h
       	int 	21h                                                     
	                                                                
	                                                                
exit:	mov	ax,4c00h                                                
	int	21h                                                     
end	main



___________
1) Название темы должно адекватно отражать суть решаемой задачи/проблемы.
На первый раз я исправил.
В дальнейшем темы с подобным названием будут закрываться/удаляться,
а автор такой темы получать штрафы.

2) Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)

Не забывайте об этом!

Модератор.
Изображения
Тип файла: bmp Условие.bmp (118.9 Кб, 166 просмотров)

Последний раз редактировалось Serge_Bliznykov; 23.03.2012 в 13:54.
RikkiTan вне форума Ответить с цитированием
Старый 23.03.2012, 14:52   #2
RikkiTan
Пользователь
 
Аватар для RikkiTan
 
Регистрация: 15.11.2011
Сообщений: 62
По умолчанию

Прошу прощения за неправильное оформление.
RikkiTan вне форума Ответить с цитированием
Старый 23.03.2012, 16:28   #3
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
AAM ASCII-коррекция регистра АХ после умножения
Команда aam используется вслед за операцией умножения двух неупакованных двоично-десятичных чисел. Команда не имеет параметров. Она преобразует результат умножения, являющийся двоичным числом, в правильное неупакованное двоично-десятичное (BCD) число, младший разряд которого помещается в AL, а старший - в АН. Команда воздействует на флаги SF, ZF и PF.

Пример
Код:
mov AL,08h ;Неупакованное BCD 8 
mov CL,07h ;Неупакованное BCD 7
mul CL ;AX=0038h=56 
aam ;AX=0506h, BCD 56
как видно из примера, больше двух десятичных разрядов такой способ просто не сумеет обработать

http://www.realcoding.net/article/view/1771#3
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 25.03.2012, 12:53   #4
RikkiTan
Пользователь
 
Аватар для RikkiTan
 
Регистрация: 15.11.2011
Сообщений: 62
По умолчанию

Всем спасибо, задачу сделал.Если кому интересно выводил трехзначное число таким образом:
Код:
 	mov 	ax,summa		  				
	mov	cx,ax			  
	div	ten			  
					  
	aam				  
	or	ax,3030h		 
	mov	bl,al			  
	mov	bh,ah			  
	mov	dl,bh			  
	mov	ah,2			  
	int	21h			  	
	mov	dl,bl			  
	int	21h    			 
					 
	mov	ax,cx			  	
	div	ten			  
					  
	or	ax,3030h		  
	mov	dl,ah			  	
	mov	ah,2		   	  	
	int	21h
Трехзначное число вначале находилось в переменной summa.Переменная ten равна 10(ten db 10)
RikkiTan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Информатика. Visual Basic. Вычисление выражения, задачи и суммы ряда. Tyler^ Помощь студентам 0 28.09.2011 18:21
Найти сумму ряда Александр Бутырин Общие вопросы C/C++ 3 13.04.2011 22:11
найти сумму ряда в си fidot Помощь студентам 3 30.03.2011 22:28
Найти сумму ряда 11111 Помощь студентам 14 01.11.2010 19:55
Найти сумму ряда с точностью e, если дан общий член этого ряда JiLiYa Общие вопросы C/C++ 2 18.02.2009 11:11