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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.03.2009, 00:34   #1
ELL
Пользователь
 
Регистрация: 13.04.2008
Сообщений: 28
По умолчанию Комментарии к коду

Привет всем !!! Кому не трудно, пожалуйста объясните этот код:
Код:
		
                      .MODEL	Tiny
		.STACK	100h

		.DATA
	;Msg1	DB	'‚ўҐ¤ЁвҐ бва®Єг:',13,10,'$'
	;Msg2	DB	'ђҐ§г«мв*в:',13,10,'$'	
	buf	DB	80 DUP (?)
	leng	DW	(0)	
		.CODE
		mov	ax, @Data
		mov	ds, ax

		mov	ah, 9
		mov	dx, OFFSET Msg1
		int	21h

		mov	ah, 3fh
		mov	bx, 0
		mov	dx, OFFSET buf
		mov	cx, 80
		int	21h
		mov	cx, ax
		mov	leng, ax		

		sub	ax, 2
		mov	cx, ax
		mov	bx, OFFSET buf
		add	si, ax
		dec	si

Tupac:		mov	al, [bx]
		cmp	al, 'a'
		jb	dogg
		cmp	al, 'z'		
		ja	dogg		
		sub	al, 020h	
		mov	[bx], al
dogg:		
		inc	bx
		loop	Tupac
	
		mov	ah, 9
		mov	dx, OFFSET Msg2
		int	21h

		mov	cx, leng
		mov	ah, 40h
		mov	bx, 1
		mov	dx, OFFSET buf
		int	21h

		mov	ax, 4C00h
		int	21h

		END
Зарание спасибо !!!
ELL вне форума Ответить с цитированием
Старый 08.03.2009, 01:29   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

прежде всего - это вообще не будет компилироваться!
Кто-то закомментировал идентификаторы сообщений (MSG1 / MSG2)

Код:
		mov	ax, @Data
		mov	ds, ax
Для работы с данными грузим адрес секции @Data.
Теперь сегмент данных (DS) показывает на секцию данных @Data
Код:
		mov	ah, 9
		mov	dx, OFFSET Msg1
		int	21h
Выдать на экран сообщение Msg1

Код:
		mov	ah, 3fh
		mov	bx, 0
		mov	dx, OFFSET buf
		mov	cx, 80
		int	21h
ввести к клавиатуры строчку символов и запомнить её в буфер.

дальше цикл - из всех маленьких английских буковок из кода прямо в области памяти buf вычитается шестнадцатиричное 20 ( sub al, 020h)
таким образом получаем ПРОПИСНЫЕ буквы.

Потом выводим сообщение MSG2 ('Результат:')
и содержимое buf

конец.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.03.2009, 18:34   #3
ELL
Пользователь
 
Регистрация: 13.04.2008
Сообщений: 28
По умолчанию

Пожалуйста можно поконкретнее по этому кусочку кода:
Код:
	
                      sub	ax, 2
		mov	cx, ax
		mov	bx, OFFSET buf
		add	si, ax
		dec	si

Tupac:		mov	al, [bx]
		cmp	al, 'a'
		jb	dogg
		cmp	al, 'z'		
		ja	dogg		
		sub	al, 020h	
		mov	[bx], al
dogg:		
		inc	bx
		loop	Tupac
ELL вне форума Ответить с цитированием
Старый 09.03.2009, 11:50   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Код:
         ; т.к. в ax длина введённой строки, включая символы 
         ;     перевода строки CR LF (0Dh 0Ah) - их не берём в обработку
         ;     для этого уменьшаем счётчик введённым символов на 2
                sub     ax, 2  
                mov     cx, ax ; количество символов -> CX
                mov     bx, OFFSET buf ; в BX адрес начала строки
;                add     si, ax  <- не нужно
;                dec     si      <- не нужно

Tupac:          mov     al, [bx] ; очередной символ строки в AL
                cmp     al, 'a'  ; сравнить с символом 'a'
                jb      dogg     ; переход, если символ в AL больше
                cmp     al, 'z'  ; сравнить с символом 'z'
                ja      dogg     ; переход, если символ в AL меньше       
                sub     al, 020h ; вычитаем из кода 20h - получаем прописную букву       
                mov     [bx], al ; возращаем символ "на место" - в строку  
dogg:           
                inc     bx       ; увеличиваем индекс для обработки сл.символа
                loop    Tupac    ; если строку не закончили - повторить цикл
Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.03.2009, 16:01   #5
ELL
Пользователь
 
Регистрация: 13.04.2008
Сообщений: 28
По умолчанию

Serge_Bliznykov, Большое тебе спасибо!
ELL вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Комментарии к коду Juhn Паскаль, Turbo Pascal, PascalABC.NET 6 24.12.2007 20:29
Комментарии к коду Ярослав Помощь студентам 4 23.11.2007 16:57
Написать комментарии к коду. Delphi. Дарюха Помощь студентам 1 21.11.2007 16:05