Нужно реализовать смену регистров букв - Assembler
Формулировка задачи:
Ребят, помогите пожалуйста. Нужно вводить строку с клавиатуры, менять регистры местами ( большие буквы на маленькие и наоборот) и выводить уже обработанную строку. Я смог сделать так, что бы маленькие буквы менялись на большие. Большие буквы начинаются с 41, а меленькие с 61. Т.е. если буква маленькая (больше 61 ) я отнимаю 20 и все работает, но как реализовать обратное?
0 1 2 3 4 5 6 7 8 9 A B C D E F
2 ! " # $ % & ' ( ) * + , - . /
3 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
4 @ A B C D E F G H I J K L M N O
5 P Q R S T U V W X Y Z [ \ ] ^ _
6 ` a b c d e f g h i j k l m n o
7 p q r s t u v w x y z { | } ~
model tiny .code .startup mov ax,3 int 10h mov dx,offset testm mov ah,09h int 21h mov dx, offset Sos mov ah,0Ah int 21h mov cx,[bx + 1] lst: mov di,cx cmp Sos[di+1],60h jl next sub Sos[di+1],20h next: loop lst mov ax,3 int 10h mov dx, offset Sos + 2 mov ah,9 int 21h mov ah,0 int 16h ret Sos db 20 dup("$") testm db "Input string:$" end
Решение задачи: «Нужно реализовать смену регистров букв»
textual
Листинг программы
model tiny .code .startup mov ax,3 int 10h mov dx,offset testm mov ah,09h int 21h mov dx,offset Sos mov ah,0Ah int 21h lea bx,sos mov cx,[bx] xor ch,ch xor di,di add di,2 lst: cmp Sos[di],'A' jb next cmp Sos[di],'z' ja next cmp Sos[di],'Z' jbe nxt cmp Sos[di],'a' jb next nxt: xor Sos[di],20h next: inc di loop lst mov byte ptr Sos[di],'$' mov word ptr Sos,0D0Ah mov dx,offset Sos mov ah,9 int 21h mov ah,0 int 16h ret testm db 10,13,'Input string:$' szBuf equ 30 Sos db szBuf szSos db ?,szBuf dup("$") end
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д