| 
							sersad
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 «  : 27-12-2008 11:11 »   | 
								
								 | 
							  
							 
							Добрый день, поистине неисповедимы пути ассемблера, при написании этой программы хотелось что бы был найден максимальный элемент и показан на экране, и как результат на экране не то что нужно, подскажите что не так.
  begin:   jmp setup     mass db 1,2,3,4,5     max db'максимальный$' setup:       mov cl,4       lea bx,mass       mov al,[bx]       inc bx       m2: cmp al,[bx]       jnc m1       mov al,[bx]       m1: inc bx       dec cl       jnz m2       mov max ,al       mov ah,09       lea dx,max       int 21h       xor ax,ax       int 16h       int 20h
  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							4y4z
							
								Участник 
								
								 
								  Offline
								Младший саппорт
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #1 : 03-01-2009 17:13 »   | 
								
								 | 
							  
							 
							Если бы это был код на С и других языках высокого уровня, то после каждой операции по изменению содержимого переменных(а таковыми в данном случае естественно будут все регистры после выполнения mov) то  нужно было бы вывести на печать содержимое измененной переменной. Но в данном случае нужно пропустить программу через отладчик. Увидите как меняется содержимое регистров, чтобы проверить правильно ли она работает. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Ищу работу. (разработка/тестирование/отладка) 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							SAVC
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #2 : 04-01-2009 16:25 »   | 
								
								 | 
							  
							 
							Насколько я понял, ты на TASM пишешь. И линкуешь в COM файл. Давно уже ничего не делал для x86 Но по старой памяти написал бы вот так: 	mov	si,offset mass 	mov	cl,5
  	lodsb m1:	mov	ah,al m2:	dec	cl 	jz	m3 	lodsb 	cmp	ah,al 	jc	m1 	jmp sort m2
  m3:	mov	byte ptr max,ah 	mov	ah,9 	mov	dx,offset max 	int	21h 	mov	ah,0 	int	16h 	int	20h
  max:	db	'  максимальный$' mass:	db	1,2,3,4,5
  jmp short m2  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 04-01-2009 18:00 от RXL »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							sersad
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #3 : 08-01-2009 10:12 »   | 
								
								 | 
							  
							 
							Не могли бы вы подсказать что за команда    jmp sort m2  а то программа пишет что такого она не знает 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Алексей++
							
								глобальный и пушистый 
								Глобальный модератор
								
								 
								  Offline
								
								Сообщений: 13
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #4 : 08-01-2009 10:31 »   | 
								
								 | 
							  
							 
							а так )
  jmp  m2   
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Sla
							
						 | 
						
							
								  | 
								
									
									 « Ответ #5 : 08-01-2009 10:40 »   | 
								
								 | 
							  
							 
							jump sort = jump short ? 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Мы все учились понемногу... Чему-нибудь и как-нибудь. 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							sersad
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #6 : 12-01-2009 20:46 »   | 
								
								 | 
							  
							 
							Доброго времени суток присланная прога от SAVC, выдает такое же сообщение как и мой вариант, не ищет она число и не выводит его на экран, а выводит надпись " максимальный" 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Sla
							
						 | 
						
							
								  | 
								
									
									 « Ответ #7 : 13-01-2009 07:32 »   | 
								
								 | 
							  
							 
							sersad, ну правильно не выводит    числа, зато ищет   а если сделать m3:	mov	byte ptr max,ah 	mov	ah,9 	mov	dx,offset max 	int	21h ; теперь нужно вывести максимальное число, которое лежит, кажется в ah, ;предварительно преобразовав в символ и добавить знак $
   
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Мы все учились понемногу... Чему-нибудь и как-нибудь. 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							sersad
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #8 : 13-01-2009 12:28 »   | 
								
								 | 
							  
							 
							Sla, получилось вот так  begin:   jmp setup     mass db 1,2,3,4,5     max db'0$' setup:       mov cl,4       lea bx,mass       mov al,[bx]       inc bx       m2: cmp al,[bx]       jnc m1       mov al,[bx]       m1: inc bx       dec cl       jnz m2       mov max ,al       mov ah,09       add max,48       lea dx,max       int 21h       xor ax,ax       int 16h       int 20h пришлось несколько переделать программу , пришлось отказаться от записи "максимальный" потому как не понимаю почему но не подменяется это сообщение тем числом которое прога вычислила , очевидно что не хватает ему места, а как это сделать пока не знаю.И еще не считает она почему то числа более 9. Подскажите . 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Sla
							
						 | 
						
							
								  | 
								
									
									 « Ответ #9 : 13-01-2009 12:40 »   | 
								
								 | 
							  
							 
							вообще-то оно не будет работать с числами больше 15 почему? Думаю, что сам ответишь
  а вот почему не выводилось так ты ж пред выводом строки запихнул в ah код функции,тем самім затерев результат 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Мы все учились понемногу... Чему-нибудь и как-нибудь. 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Sla
							
						 | 
						
							
								  | 
								
									
									 « Ответ #10 : 13-01-2009 12:41 »   | 
								
								 | 
							  
							 
							sersad, и...  оформляй код тегами [code][/code] 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Мы все учились понемногу... Чему-нибудь и как-нибудь. 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							sersad
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #11 : 15-01-2009 14:01 »   | 
								
								 | 
							  
							 
							Sla, не то чтобы больше 15 оно и больше 10 не считает(правильно подмечено "оно") у меня пока только это и получается,если вы про эту команду mov max ,al   --   так ты ж пред выводом строки запихнул в ah код функции,тем самім затерев результат-- если можно то конкретно ткните где что не так , не особенно понял. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Sla
							
						 | 
						
							
								  | 
								
									
									 « Ответ #12 : 15-01-2009 14:27 »   | 
								
								 | 
							  
							 
							sersad, слухай, откоментируй этот код, на каждую строчку begin:	jmp setup 	mass db 1,2,3,4,5 	max db'0$' setup: 	mov cl,4		;количество чисел  	lea bx,mass	;загрузить указатель 	mov al,[bx]	;al=mass[0] 	inc bx		;увеличить индекс массива m2: 	cmp al,[bx] 	jnc m1 	mov al,[bx] m1: 	inc bx 	dec cl 	jnz m2 	mov max ,al
   
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Мы все учились понемногу... Чему-нибудь и как-нибудь. 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							sersad
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #13 : 16-01-2009 11:51 »   | 
								
								 | 
							  
							 
							begin:   jmp setup     mass db 1,2,3,4,5     max db'0$' setup:       mov cl,4        счетчик количества цифр       lea bx,mass     загружаем в регистр bx       mov al,[bx]     первое число в al       inc bx          следующее число         m2: cmp al,[bx] сравниваем новое число с тем что в al       jnc m1          смотрим флаг переход на m1       mov al,[bx]     следующее число в al       m1: inc bx      следующее число       dec cl          уменьшаем счетчик       jnz m2          смотрим флаг переход на m2       mov max ,al     запись результата работы проги в al       mov ah,09       вывод числа на экран       add max,48      сложить значения max с 48       lea dx,max      переслать max  в регистр dx       int 21h         прерывание        xor ax,ax       очистить регистр ax       int 16h         прерывание       int 20h         завешение программы но есть для меня и здесь не ясные команды так на пример мне не понятен смысл add max,48 ;      xor ax,ax ; потому  как если эти значения не вводить то не остается открытым окно проги, а так хотелось его увидеть. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Sla
							
						 | 
						
							
								  | 
								
									
									«  Ответ #14 : 16-01-2009 12:05 »    | 
								
								 | 
							  
							 
							sersad, 48 добавляем чтобы вывести число на экран поэтому у тебя и  выводятся числа от 0 до 9, а реально - тебе доступно для сортировки числа размерностью al (0...255)
  зы... я тебя просил оформи свой код тегами  [code] [/code]
    
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Мы все учились понемногу... Чему-нибудь и как-нибудь. 
						 | 
					 
				 
			 |  
		 
	 | 
	 |