Заменить заглавные буквы строчными в данном слове - Assembler

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

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

Здравствуйте, помогите пожалуйста исправить код так, чтобы надпись 'HELLO, MY NAME IS NASTYA’ оставалась заглавными буквами, а имя NASTYA начиналось с заглавной а все последующие были строчными:
.model tiny
.data
Mystr db ‘HELLO, MY NAME IS NASTYA’ , 13, 10, ‘$’
.code
.startup
Mov ah, 9
Lea dx, MyStr
Int 21h
Cld
Lea si, Mystr
Mov d1, ‘ ’
Mov ah, 2
Next:
Lodsb
Cmp  AL, ‘$’
Je Finish
Cmp al, ‘A’
Jb Skip 
Cmp al, ‘z’
Ja Skip
Cmp al, ‘Z’
Jbe Letter
Cmp al, ‘a’
Jb skip
And al, not 20h
Letter:
Cmp dl, ‘ ’
Je skip
Or al, 20h
Skip:
Mov dl, al
Int 21h
Jmp next
Finish:
Int 20h
 end
или этот:
CODESG ENDS
DATASG SEGMENT PARA
    MYTEXT DB   'HELLO, MY NAME  NASTYA' ,13,10, '$'
DATASG ENDS
STACKSG SEGMENT 'Stack'     
    DB 12 DUP(?)
STACKSG ENDS
CODESG SEGMENT PARA 'Code'  
BEGIN PROC FAR
    ASSUME SS:STACKSG, CS:CODESG, DS:DATASG
    PUSH DS             ; сохраняем сегмент данных в стек
    SUB AX, AX              ; Обнуляем AX
    PUSH AX             ; сохраняем содержимое АХ в стек
    MOV AX, DATASG      ; заносим в сегментный
    MOV DS, AX          ; регистр DS адрес сегмента данных
    LEA BX, MYTEXT      ; заносим в BX адрес начального символа переменной Mytext
    MOV CX, 19H         ; Вносим в СХ значение 17Н - параметр цикла 
    MOV AH, 09H         ;
    MOV DX, OFFSET MYTEXT   ;
    INT 21H             ; вывода на экран
 
MT1:    
MOV AH, [BX]    ; Метка1: заносим в АН код первого символа переменной Mytext
CMP AH, 41H ; Сравниваем значения регистра AH и кода символа 41Н (символа A)
JB MT2  ; преход к метке 2 если код, лежащий в AH больше 41H (символ старше A в таблице ASCII)
CMP AH, 5AH ; Сравниваем значения регистра AH и кода символа 5АН (символа Z)
JA MT2  ; преход к метке 2 если код, лежащий в AH меньше 5АH (символ младше Z в таблице ASCII)
CALL COR            ; вызов процедуры COR
 
MT2:
INC BX          ; Метка 2: увеличиваем значение в BX на 1
LOOP MT1; Цикл с параметром, лежащим в СХ, передающий управление коду под меткой 1.
LEA DX, MYTEXT  ; Заносим в DX адрес переменной MYTEXT для вывода на экран
MOV AH, 09H     ; оформляем функцию DOS
INT 21H         ; вывода на экран
RET             ; воврат        
BEGIN ENDP
COR PROC NEAR           ; Начало процедуры COR
    NOP             ; пауза
    ADD AH, 20H ; прибавляем к коду символа смещение 20H по таблице ASCII
    MOV [BX], AH; занесение в ячейку с адресом, лежащим в BX, кода символа из AH
    RET                 ; воврат 
COR ENDP                    ; завершение процедуры
CODESG ENDS
END BEGIN

Решение задачи: «Заменить заглавные буквы строчными в данном слове»

textual
Листинг программы
.model small
 
.data
mystr db 'HELLO, MY NAME IS NASTYA$'
 
.code
start:
mov ax,@data
mov ds,ax
 
cld
lea si,mystr+19
next:
lodsb
 
cmp al,'$'
je finish
 
cmp al,'A'
jb skip 
 
cmp al,'z'
ja skip
 
cmp al,'Z'
jbe letter
 
cmp al,'a'
jb skip
 
letter:
or al,20h
 
skip:
mov byte ptr [si-1],al
 
jmp next
 
finish:
mov ah,09h
lea dx,mystr
int 21h
 
mov ah,4Ch
mov al,00h
int 21h
end start

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

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