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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.06.2011, 15:36   #1
VARVAR_GIO
 
Регистрация: 09.06.2011
Сообщений: 2
По умолчанию программа недоработана. из больших букв делать маленькие

программа должна из всех больших букв делать маленькие
вывода на экран нет, и задержку поставить норм не могу.

Код:
	model	tiny
	.code
	org	100h

Start:
	mov	si, 0
M1:			
        mov	al, InpStr[si]	; Читаем очередной символ строки.
	cmp	al, 'A'		; Сравниваем с кодом символа A.
	jb	M5		; Не входит ни в один букв. диапаз.-просто копир.
	cmp	al, 'Z'		; Сравниваем с кодом символа Z.
	ja	M2		; Не входит в диапазон A..Z - проверяем дальше.
	add	al, 32		; Преобразовние A..Z -> a..z.
	jmp	M5
M2:	cmp	al, 'А'		; Сравниваем с кодом символа А.
	jb	M5		; Не входит ни в один букв. диапаз.-просто копир.
	cmp	al, 'П'		; Сравниваем с кодом символа П.
	ja	M3		; Не входит в диапазон А..П - проверяем дальше.
	add	al, 32		; Преобразовние А..П -> а..п.	
	jmp	M5
M3:	cmp	al, 'Я'		; Сравниваем с кодом символа Я.
	ja	M4		; Не входит в диапазон Р..Я - проверяем дальше.
	add	al, 80		; Преобразовние Р..Я -> р..я.	
	jmp	M5	
M4:	cmp	al, 'Ё'		; Сравниваем с кодом символа Ё.
	jne	M5		; Не входит ни в один букв. диапаз.-просто копир.
	mov	al, 'ё'		; Преобразовние Ё -> ё.	
M5:	mov	OutStr[si], al	; Запис. символ(возможно преобр.)в выходн. стр.
	inc	si		; Команды завершения тела цикла.
        cmp	si, N
	jb	M1
	ret

N	dw	70      	; Длина строки InpStr
InpStr	db	'ODNAJDI V STUDENUIU ZIMNIUIU PORU '
	db	'BIL MOROS...'
OutStr	db	70 dup(0)

end	Start


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

Последний раз редактировалось Serge_Bliznykov; 09.06.2011 в 16:17.
VARVAR_GIO вне форума Ответить с цитированием
Старый 09.06.2011, 16:31   #2
vadimych
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 325
По умолчанию

Достаточно одной строки.
Код:
	.model	tiny
	.code
	org	100h

Start:
mov dx,offset InpStr
mov ah,9
int 21h
push dx
push ax
	mov	si, 0
M1:			
        mov	al, InpStr[si]	; Читаем очередной символ строки.
	cmp	al, 'A'		; Сравниваем с кодом символа A.
	jb	M5		; Не входит ни в один букв. диапаз.-просто копир.
	cmp	al, 'Z'		; Сравниваем с кодом символа Z.
	ja	M2		; Не входит в диапазон A..Z - проверяем дальше.
	add	al, 32		; Преобразовние A..Z -> a..z.
	jmp	M5
M2:	cmp	al, 'А'		; Сравниваем с кодом символа А.
	jb	M5		; Не входит ни в один букв. диапаз.-просто копир.
	cmp	al, 'П'		; Сравниваем с кодом символа П.
	ja	M3		; Не входит в диапазон А..П - проверяем дальше.
	add	al, 32		; Преобразовние А..П -> а..п.	
	jmp	M5
M3:	cmp	al, 'Я'		; Сравниваем с кодом символа Я.
	ja	M4		; Не входит в диапазон Р..Я - проверяем дальше.
	add	al, 80		; Преобразовние Р..Я -> р..я.	
	jmp	M5	
M4:	cmp	al, 'Ё'		; Сравниваем с кодом символа Ё.
	jne	M5		; Не входит ни в один букв. диапаз.-просто копир.
	mov	al, 'ё'		; Преобразовние Ё -> ё.	
M5:	mov	InpStr[si], al	; Запис. символ(возможно преобр.)в выходн. стр.
	inc	si		; Команды завершения тела цикла.
        cmp	si, N
	jb	M1
pop ax
pop dx
int 21h
xor ax,ax
int 16h
	ret

InpStr	db	'ODNAJDI V STUDENUIU ZIMNIUIU PORU '
	db	'BIL MOROS...',0ah,'$'
N	=	$-InpStr-2      	; Длина строки InpStr

end	Start
vadimych вне форума Ответить с цитированием
Старый 09.06.2011, 16:34   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

так, основной алгоритм не трогал..

длину строки реальную сделал, ну и вывод результирующей строки добавил....
Код:
        model   tiny
        .code
        org     100h

Start:
        mov     si, 0
M1:                     
        mov     al, InpStr[si]  ; Читаем очередной символ строки.
        cmp     al, 'A'         ; Сравниваем с кодом символа A.
        jb      M5              ; Не входит ни в один букв. диапаз.-просто копир.
        cmp     al, 'Z'         ; Сравниваем с кодом символа Z.
        ja      M2              ; Не входит в диапазон A..Z - проверяем дальше.
        add     al, 32          ; Преобразовние A..Z -> a..z.
        jmp     M5
M2:     cmp     al, 'А'         ; Сравниваем с кодом символа А.
        jb      M5              ; Не входит ни в один букв. диапаз.-просто копир.
        cmp     al, 'П'         ; Сравниваем с кодом символа П.
        ja      M3              ; Не входит в диапазон А..П - проверяем дальше.
        add     al, 32          ; Преобразовние А..П -> а..п.   
        jmp     M5
M3:     cmp     al, 'Я'         ; Сравниваем с кодом символа Я.
        ja      M4              ; Не входит в диапазон Р..Я - проверяем дальше.
        add     al, 80          ; Преобразовние Р..Я -> р..я.   
        jmp     M5      
M4:     cmp     al, 'Ё'         ; Сравниваем с кодом символа Ё.
        jne     M5              ; Не входит ни в один букв. диапаз.-просто копир.
        mov     al, 'ё'         ; Преобразовние Ё -> ё. 
M5:     mov     OutStr[si], al  ; Запис. символ(возможно преобр.)в выходн. стр.
        inc     si              ; Команды завершения тела цикла.

        cmp     InpStr[si], 0   ; 0 признак окончания строки!
        jne      M1

        mov     OutStr[si], '$' ; занесём символ конца строки для вывода

        ; выведем результирующую строку на экран
        mov    ah, 9h
        lea    dx, OutStr
        int    21h

        ; выведем надпись о нажатии любой клавиши
        mov    ah, 9h
        lea    dx, PressAny
        int    21h

        ; ожидание нажатия любой клавиши для выхода
        xor ah,ah
        int 16h

        ret

InpStr  db      'ODNAJDI V STUDENUIU ZIMNIUIU PORU '
        db      'BIL MOROS...',0
OutStr  db      71 dup(?)

PressAny db 13,10,'Press any key...',13,10,'$'

end     Start
Добавлено
когда писал ответ vadimych ещё не видел..
но зато теперь у TC целых ДВА рабочих решения

Последний раз редактировалось Serge_Bliznykov; 09.06.2011 в 16:36.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определить процент больших и маленьких букв ко всему тексту Kirra Паскаль, Turbo Pascal, PascalABC.NET 3 08.12.2011 05:46
Задача на замену больших букв маленькими [Паскаль] sk8blind Помощь студентам 2 02.12.2010 08:52
Вывод на экран букв больших размеров Teor Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 27.10.2010 13:22
Не работает программа, что делать? St1mkA Помощь студентам 6 28.04.2010 20:22
поменять большие буквы на маленькие и маленькие на большие в си++ Барби Помощь студентам 4 08.04.2008 01:25