Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .model small
- .data ; Программа меняет маленькие и большие буквы на одни большие
- string1 db 'Unchanged string:',10,13,'$'
- string2 db 'New string:',10,13,'$'
- string db 'HELLowoRldazAZ',10,13,'$' ; Программа работает со строкой, которую мы заранее указали, при этом, в переменную symbol записали кол-во элементов в нашей строке
- symbol db 14
- probel db '',10,13,'$'
- .code
- start:
- push @data
- pop ds
- mov ah, 9h ; Вывод строк
- lea dx, string1
- int 21h
- mov ah, 9h
- lea dx, string
- int 21h
- mov ah,9h
- mov dx, offset probel
- int 21h
- mov ah,9h
- mov dx, offset string2
- int 21h
- mov ah,2h ; В регистр 2h - вывод символа по его ASCII коду
- mov si,0 ; si - регистр - счётчик. В программе играет роль какого-то элемента строки. В данном случае нулевого
- again: ; Метка, которая предназначена для прогона всей строки и проверке символов на прописные и заглавные
- cmp symbol,0 ; Сравниваем наше оставшееся кол-во символов. Если кол-во (symbol) = 0, то jne игнорируется. Jump not equal
- jne Next ; Если symbol не равен 0, то то осуществляется переход по метке Next
- jmp Konec ; Если symbol = 0, то это означает, что мы прошлись по всей строке, и программу можно завершать. Переход по метке Konec в конец программы
- Next: ; Просто метка :)
- sub symbol,1 ; Уменьшаем кол-во проверенных символов на 1
- mov al,[string][si] ; Заносим в регистр al, который работает только со строками и значениями ASCII кодов символов, код si-го элемента из строки string
- mov cx,32 ; По таблице ASCII, нам нужно проверить диапазон чисел от 90 до 122 (от символа Z до z). Разность кодов этих символов = 122 - 90 = 32. cx - кол-во повторений цикла Begin
- Begin: ; Начало цикла Begin
- cmp al,122 ; Начинаем наше сравнение символов, сравниваем коды si-го элемента нашей строки с кодом максимально возможного элемента, а именно z
- jne skip ; Если значения не равны, то переход по метке skip
- mov al,[string][si] ; Если в ходе цикла условие al = 122 выполнилось, значит мы имеем дело с маленькой буквой. Заносим в al изначальное значение ASCII кода si-го элемента строки string
- sub al,32 ; Уменьшаем его код на 32, то есть меняем букву с маленькой на большую, и выводим её на экран через регистр dl (2h работает только с dl)
- mov dl,al
- int 21h
- add si,1 ; Берём следующий элемент со строки и проводим с ним такие же манипуляции, происходит переход по метке again
- jmp again
- skip: ; Значения не равны. Увеличиваем значение ASCII кода символа, уменьшаем кол-во проходов по циклу на 1 и повторяем цикл Begin по новой, пока cx не станет = 0
- add al,1
- sub cx,1
- jnz Begin ; Конец тела цикла. Начинается по новой (С Begin)(Если cx > 0)
- ; Если cx = 0, то происходит выход из цикла. Значит наша буква - большая. Её мы должны просто вывести. Ниже показана операция вывода, и увеличения si на 1
- mov al,[string][si]
- mov dl,al
- int 21h
- add si,1
- jmp again ; Переход к метке again
- Konec: ; Метка - конец программы
- mov ax, 4c00h
- int 21h
- end start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement