ниже - программа, которая делает первую букву каждого предложения в верхнем регистре. Тем не менее, мне нужно изменить эту программу, чтобы она делала любые другие строчные буквы в нижнем регистре. Кроме того, может быть много предложений. До сих пор я заметил, что программа не очень хорошо работает на моем ПК, но, вероятно, это не ошибка моей программы. В любом случае, у меня много проблем, чтобы выяснить, как правильно изменить эту программу, чтобы соответствовать требованиям. Большое вам спасибо заранее!Как преобразовать первую букву каждого предложения в верхний регистр и все остальные буквы в нижний регистр (Сборка)?
.model small
.stack 100h
.data
BUFSIZE EQU 4096 ; constant - the size of the buffer
input db 'data.txt',0 ; default input file
output db 'result.txt',0 ; default output file
msg1 db 'Choose data file [data.txt]: $'
msg2 db 10,13,'Choose result file [rezult.txt]: $'
msg3 db 10,13,'Error, the file could not be found, working with default file: data.txt $'
string1 db 11 dup (?) ; the name of input file
string2 db 11 dup (?) ; the name of result file
handle1 dw ? ; file handles
handle2 dw ?
buffer db BUFSIZE dup (' ') ; buffer
.code
mov ax, @data ; loading data segment
mov ds,ax
sub cx,cx
mov si, 80h
mov cl,es:[si]
cmp cx, 0
mov bx,0
je label1
inc si
inc si
dec cx
read: mov al,es:[si]
cmp al,' '
je second
mov string1[bx],al
inc si
inc bx
loop read
second:
mov string1[bx],0
mov bx,0
dec cx
looper: inc si
mov al,es:[si]
mov string2[bx],al
inc bx
loop looper
mov string2[bx],0
mov bx,100h
push bx
jmp open
label1: mov ah, 9
mov dx, offset msg1
int 21h
named: mov ah, 1h
int 21h
cmp al, 13
je eof1
mov string1[bx],al
inc bx
jmp named
eof1: mov string1[bx],00h
open: mov ah, 3dh
mov al, 2
mov dx, offset string1
int 21h
mov handle1, ax
mov ah, 59h
int 21h
cmp al, 2
je deflt
jmp cont
deflt: mov ah,9
mov dx,offset msg3
int 21h
mov ah, 3dh
mov al, 2
mov dx,offset input
int 21h
mov handle1,ax
cont: pop bx
cmp bx,100h
je creat2
mov ah, 9
mov dx, offset msg2
int 21h
mov bx,0000h
label2: mov ah, 1h
int 21h
cmp al, 13
je eof2
mov string2[bx],al
inc bx
jmp label2
eof2: mov string2[bx],0
cmp bx, 0
je creat1
jmp creat2
creat1: mov ah, 3ch
mov cx, 0
mov dx, offset output
int 21h
mov handle2, ax
mov ah, 3eh
mov bx, handle2
int 21h
mov ah, 3dh
mov al, 2
mov dx, offset output
int 21h
mov handle2, ax
jmp read_s
creat2: mov ah, 3ch
mov cx, 0
mov dx, offset string2
int 21h
mov handle2, ax
mov ah, 3eh
mov bx, handle2
int 21h
mov ah, 3dh
mov al, 2
mov dx, offset string2
int 21h
mov handle2, ax
doin:
read_s: mov ah, 3fh
mov bx, handle1
mov cx, BUFSIZE
mov dx, offset buffer
int 21h
cmp ax, 0
je theend
mov bx,ax
cmp buffer[0], 'z'
ja searching
cmp buffer[0], 'a'
jb searching
sub buffer[0], 32
dec bx
cc:
edit: cmp buffer[bx], '?'
je higher
cmp buffer[bx], '!'
je higher
cmp buffer[bx], '.'
je higher
jmp searching
higher: cmp buffer[bx+1], 'a'
jae lower
jmp searching
lower: cmp buffer[bx+1], 'z'
jbe changing;
jmp searching
changing: sub buffer[bx+1], 32
searching: dec bx ;
jnz cc
mov cx, ax
mov ah, 40h
mov bx, handle2
mov dx, offset buffer
int 21h
jmp doin
theend: mov ah, 3eh
int 21h
mov bx, handle1
int 21h
mov ah, 4ch
int 21h
end