У меня есть задание, которое описывается примерно так:
- Reads printable characters (20h-7Fh) from the keyboard without echoing
- Uppercase letters are printed to display
- Lowercase letters are converted to uppercase and then printed to display
- Blank spaces and periods are printed to display; everything else is trashed
- Program ends when period is printed
Моя программа до сих пор такова:
.model small
.8086
.data
.code
start:
mov ax,@data
mov ds,ax
read:
mov ah,8
int 21h
cmp al,61
jl write
cmp al,7fh
jg read
sub al,20h
jmp write
write: cmp al,20h
jl read
mov dl,al
mov ah,2
int 21h
cmp dl,2eh
jne read
exit:
mov ax,4c00h
int 21h
end start
Моя программа успешно преобразует строчные буквы и печатает соответствующие заглавные буквы, но у меня проблемы с уничтожением всего остального.Каков наилучший способ пропустить на дисплей только пробелы, точки и буквы?
Глядя на диаграмму ASCII,
21h - 2Dh can be trashed
2Fh - 40h can be trashed
5bh - 60h can be trashed
7bh - 7fh can be trashed
Может ли кто-нибудь помочь мне найти лучшеелогика для сравнения входных данных с этими значениями, а затем уничтожить те, которые попадают в диапазон выше?Мы оцениваем эффективность, с 0-20 написанными инструкциями награждены полным кредитом.У меня уже есть 20 инструкций, и я не включил сравнения, чтобы найти значения мусора.
РЕДАКТИРОВАТЬ
Вот что я сузил свой код до:
.model small
.8086
.data
.code
read:
mov ah,8
int 21h
cmp al,' '
je write
cmp al,'.'
je write
cmp al,'a'
jl read
cmp al,'Z'
jg convert
convert:
cmp al,'a'
jl read
sub al,20h
write:
mov dl,al
mov ah,2
int 21h
cmp dl,'.'
jne read
exit:
mov ax, 4c00h
int 21h
end read
В настоящее время 21 инструкция!Есть ли в моем коде избыточность, которую можно удалить, чтобы уменьшить ее до 20?