Перевод в заглавные буквы Assembler
Формулировка задачи:
Здравствуйте, не ругайте косорукого,подскажите ,пожалуйста, почему не работает перевод ... ( И как найти символ по середине слова... Был в других темах, но не понял код
.model small
.stack 100h
.data
string db 256 dup ('$')
.code
start:
string1 EQU string[2]
mov ax, @data
mov ds, ax
xor dx,dx
mov ah,0Ah
mov [string], 253
lea dx,string
int 21h
lea si,string1
L1:
mov bl, [si]
cmp bl, 64
jbe konec
cmp bl, 90
ja stroki
add bl, 32
mov [si], bl
jmp konec
stroki:
cmp bl, 97
jb konec
cmp bl, 122
ja konec
mov [si], bl
konec:
inc si
loop L1
mov bl, byte ptr '$'
mov [si], bl
mov ah, 09h
lea dx, [si]
int 21h
mov ax,4c00h
int 21h
end startРешение задачи: «Перевод в заглавные буквы Assembler»
textual
Листинг программы
.model small
.386
.data
string db 255,0,255 dup('$')
.stack
db 255 dup(?)
.code
start:
mov ax,@data
mov ds,ax
mov ah,0Ah
lea dx,string
int 21h
lea si,string[2]
l1:
mov bl,byte ptr [si]
cmp bl,64
jbe konec
cmp bl,90
ja stroki
add bl,32
mov byte ptr [si],bl
jmp konec
stroki:
cmp bl,97
jb konec
cmp bl,122
ja konec
and bl,11011111b
mov byte ptr [si],bl
konec:
inc si
loop l1
mov byte ptr [si],'$'
mov ah,02h
mov dl,0Dh
int 21h
mov ah,02h
mov dl,0Ah
int 21h
mov ah,09h
lea dx,string[2]
int 21h
mov ah,4Ch
mov al,00h
int 21h
end start
Объяснение кода листинга программы
- Объявлены две переменные в сегменте данных: string (строка) и stack (стек).
- Начальный адрес стека установлен в 255,0,255 (для примера, заглавные буквы не переводятся).
- Код начинается с сегментации регистров.
- Далее выполняется проверка символа в строке на возможность перевода в заглавную букву.
- Если символ меньше или равен 90 (U), то он переводится в заглавную букву.
- Если символ больше 90 (U), но меньше или равен 122 (z), то он переводится в строчную букву.
- Если символ больше 122 (z), то он остается без изменений.
- В конце строки добавляется символ '$'.
- Выполняется вывод строки на экран.
- Выполняется вывод символа возврата каретки и символа перевода строки.
- Выполняется вывод строки на экран с использованием функции 9 (D).
- Выполняется выход из программы.