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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.04.2013, 18:33   #1
abstractionhawk
Пользователь
 
Регистрация: 01.11.2012
Сообщений: 26
По умолчанию Программа которая проверяет введена заглавная или малая буква

Здравствуйте. Задали написать программу, которая проверяет введеный символ, если он является малой латинской буквой и выводит ее эквивалент в верхнем регистре или сообщение "error"
Подскажите пожалуйста, как сделать проверку. На данный момент написал вот какой код:
Код:
 .model small
.stack 100h
.data
var  db  ?     ;вводимый символ
mes  db  10,13,'Vvedite simvol:',10,13,'$' ;приглашение к вводу
error db 10,13,'error','$'  ;сообщение об ошибке 

.code

mov ax, @data
mov ds,ax     ;в сегментный регистр ds заносим адрес начала сегмента
ne_probel:     ;метка позволяет зациклить выполнение программой пока не будет введен пробел


mov ah,09h
lea dx,mes
int 21h      ;выводим на экран приглашение к вводу

mov ah,1     ;читаем символ
int 21h
mov var, al     ;сохраняем введеный символ в переменной var

start:

cmp var, 'a'     ;проверяем если введный символ входит в диапозон 
jbe m3      ;если нет, то переходим к m3

cmp var, 'z'     ;проверяем если введный символ входит в диапозон
jae m3      ;если нет, то переходим к m3

sub var, 20h     ;если символы совпали, то преобразуем ‘t’ в ‘T’
mov ah, 2     ;выводим новый символ на экран
mov dl, var
int 21h
jmp sfarsit

m3:
mov ah,9
lea dx,error
int 21h
jmp ne_probel

jmp sfarsit

sfarsit:
mov  ah, 4ch       ;регистр dx содержит начальный адрес выводимой строки
int 21h       ; завершение программы
end
Посидел чуть и поигрался, и вот что вышло. Не хочет переводить в верхний регистр, если вводим маленькую и все равно выводит error
UPD: Ура, я сделал это. Только вот не могу разобрать как сделать так, чтобы символ, в верхнем регистре, выводился с новой строки, а не рядом

Последний раз редактировалось abstractionhawk; 21.04.2013 в 19:40.
abstractionhawk вне форума Ответить с цитированием
Старый 21.04.2013, 21:50   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Я просто не понимаю с чем мне сейчас сравнивать введеный символ.
ну да. так Вы же в программе и пытаетесь сравнить попадание символа в диапазон..
только у z код 7Ah (или десятичное 122) (вы ошибочно написали 122h)
кстати, в этой же строке Вы забыли ещё и запятую написать...

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

да и с зацикливанием программы,
Цитата:
Код:
ne_probel:     ;метка позволяет зациклить выполнение программой пока не будет введен пробел
что-то не очень видно, где это Вы обеспечиваете...

Последний раз редактировалось Serge_Bliznykov; 21.04.2013 в 21:54.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.04.2013, 22:02   #3
abstractionhawk
Пользователь
 
Регистрация: 01.11.2012
Сообщений: 26
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
ну да. так Вы же в программе и пытаетесь сравнить попадание символа в диапазон..
только у z код 7Ah (или десятичное 122) (вы ошибочно написали 122h)
кстати, в этой же строке Вы забыли ещё и запятую написать...

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

да и с зацикливанием программы,
что-то не очень видно, где это Вы обеспечиваете...
Так я ведь уже обновил сообщение. Сейчас уже все работает и исправлено. Вот только он когда выводит символ в верхнем регистре, то выводит на той же строке что и начальный символ. как можно сделать чтобы на следующей строке выводилось?
abstractionhawk вне форума Ответить с цитированием
Старый 21.04.2013, 22:32   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

нужно перевести позицию ввода на новую строку.
Думаю, что достаточно будет вывести символы 13, 10

вот так, например:

Код:
var  db  ?     ;вводимый символ
mes  db  13,10, 'Vvedite simvol:'   ;приглашение к вводу
mes_endline db 13,10,'$'             ; перевод строки (и окончание сообщения приглашения!) 
error db 10,13,'error','$'  ;сообщение об ошибке 
....

cmp var, 'z'     ;проверяем если введный символ входит в диапозон
jae m3      ;если нет, то переходим к m3

mov ah,9
lea dx, mes_endline
int 21h

sub var, 20h     ;если символы совпали, то преобразуем ‘t’ в ‘T’
mov ah, 2     ;выводим новый символ на экран
mov dl, var
int 21h
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.04.2013, 22:50   #5
abstractionhawk
Пользователь
 
Регистрация: 01.11.2012
Сообщений: 26
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
нужно перевести позицию ввода на новую строку.
Думаю, что достаточно будет вывести символы 13, 10

вот так, например:

Код:
var  db  ?     ;вводимый символ
mes  db  13,10, 'Vvedite simvol:'   ;приглашение к вводу
mes_endline db 13,10,'$'             ; перевод строки (и окончание сообщения приглашения!) 
error db 10,13,'error','$'  ;сообщение об ошибке 
....

cmp var, 'z'     ;проверяем если введный символ входит в диапозон
jae m3      ;если нет, то переходим к m3

mov ah,9
lea dx, mes_endline
int 21h

sub var, 20h     ;если символы совпали, то преобразуем ‘t’ в ‘T’
mov ah, 2     ;выводим новый символ на экран
mov dl, var
int 21h
Спасибо большое вам. За ассемблер только сейчас взялся по чуть-чуть, т.к. сильнот отстал от группы начиная с января =), а сейчас вот накопилось долгов и нужно все срочно осваивать
abstractionhawk вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как проверить имеется ли заглавная буква в строке? aks Помощь студентам 10 28.07.2013 15:27
Функция,которая определяет, встречается ли заданная буква, которая передается в функцию как параметр harvey Помощь студентам 1 31.03.2013 00:15
Написать программу, которая проверяет(Pascal) xhatex Паскаль, Turbo Pascal, PascalABC.NET 1 23.11.2012 00:57
Программа, определяющую, какая цифра введена – четная или нечетная. JustinTI Помощь студентам 6 21.12.2008 12:03