Изменение маленьких букв на большие и наоборот - Assembler/TASM

Узнай цену своей работы

Формулировка задачи:

Задача: Написать на языке ассемблер exe-программу, которая выведет на экран "Input string". После введения строки необходимо все прописные буквы перевести в строковые, а строковые в прописные. Проблема заключается в том, что я перевожу маленькие в большие, но не нашел инфы как из заглавной переделать на прописную
.model tiny
.code 
org 100h
.startup
 
mov dx, offset vvedite
mov ah,09h
int 21h ;запрос ввода строки
 
mov dx, offset stroka ;устанавливаем указатель на строку
mov ah,0ah
int 21h ;вводим строку
 
mov cx,[bx + 1] ;устанавливаем счетчик
lst: ;начало цикла
mov di,cx
cmp stroka [di + 1], 60h ;проверка, маленькая ли буква
jl next ;если большая - идем дальше
sub stroka [di + 1], 20h ;если маленькая - меняем ее
 
next:
loop lst ;переход на начало цикла
 
mov dx, offset stroka + 2 ;конец цикла, установить указатель на строку
mov ah,09h
int 21h
 
ret
 
stroka db 255 dup ("$") 
vvedite db "vvedite stroku $"
end
P.S. Я не силен в Assembler

Решение задачи: «Изменение маленьких букв на большие и наоборот»

textual
Листинг программы
.model small
.386
 
.stack 100h
 
.data
        CrLf            db      0Dh, 0Ah, '$'
        msgPressAnyKey  db      0Dh, 0Ah, 'Press any key to exit...', '$'
        msgPrompt       db      0Dh, 0Ah, 'Enter the string:', 0Dh, 0Ah, '$'
 
        KeyBuf          db      80, 0, 81 dup(0)
.code
 
main    proc
        ;инициализация сегментного регистра ds адресом сегмента данных
        mov     ax,     @data
        mov     ds,     ax
 
        ;ввод строки
        mov     ah,     09h
        lea     dx,     [msgPrompt]
        int     21h
        mov     ah,     0Ah
        lea     dx,     [KeyBuf]
        int     21h
        mov     ah,     09h
        lea     dx,     [CrLf]
        int     21h
 
        ;обработка строки
        movzx   cx,     [KeyBuf+1]
        jcxz    @@Skip
        lea     si,     [KeyBuf+2]
        mov     di,     si
        push    es
        mov     ax,     ds
        mov     es,     ax
        @@For:
                lodsb
                cmp     al,     'A'
                setb    bl
                cmp     al,     'Z'
                seta    bh
                or      bl,     bh
 
                cmp     al,     'a'
                setb    bh
                and     bl,     bh
                cmp     al,     'z'
                seta    bh
                or      bl,     bh
 
                cmp     bl,     1
                sbb     bl,     bl
                and     bl,     (1 SHL 5)
 
                xor     al,     bl
                stosb
        loop    @@For
        pop     es
        @@Skip:
 
        ;вывод строки
        mov     ah,     40h
        mov     bx,     1
        movzx   cx,     [KeyBuf+1]
        lea     dx,     [KeyBuf+2]
        int     21h
 
        ;ожидание нажатия любой клавиши
        mov     ah,     09h
        lea     dx,     [msgPressAnyKey]
        int     21h
 
        mov     ah,     00h
        int     16h
 
        mov     ax,     4C00h
        int     21h
main    endp
 
end     main

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.083 из 5
Похожие ответы