#assembly #x86 #emu8086 #microprocessors
# #сборка #x86 #emu8086 #микропроцессоры
Вопрос:
Для этого вопроса я очистил экран как единственный для (5,10 и 20,70), как указано в вопросе, и установил курсор на (5,10).) Но он будет печатать все символы за пределами определенного окна (вид переполнения). Я хотел напечатать все символы только внутри определенного окна. Как я могу этого добиться??
Вот мой код:
.model small
.stack 64
.data
.code
main proc far
mov ax, @data
mov ds, ax
mov ax, 0600h
mov bh, 17h
mov ch, 5
mov cl, 10
mov dh, 20
mov dl, 70
int 10h
mov ah, 02h
mov bh, 00h
mov dh, 05h
mov dl, 0ah
int 10h
mov ah, 02h
mov dx, 32
l1: int 21h
inc dx
cmp dx, 127
jne l1
mov ax, 4c00h
int 21h
main endp
end main
Спасибо!
Ответ №1:
Ни BIOS ( int 10h
), ни DOS ( int 21h
) не останутся в окне, которое вы очистили до WhiteOnBlue . Вы должны управлять своими собственными переводами строк.
Задача просит вас напечатать 96 символов (127 — 32 1 ) всего (коды ASCII от 32 до 127).
В окне, которое простирается от 10 слева до 70 справа, можно ли разместить 61 символ (70 — 10 1 ).
Конечно, есть много хороших решений для такой задачи. Ниже приведен один из них.
Я решил напечатать полную строку из 61 символа, а затем напечатать оставшиеся 35 символов в строке ниже. Для этого мне пришлось установить курсор во второй раз.
mov bh, 00h ; DisplayPage
mov dx, 050Ah ; Leftside (10) on 1st row (5) in the window
mov ah, 02h ; BIOS.SetCursor
int 10h
mov ax, 0E20h ; BIOS.Teletype starting at ASCII 32
T1: int 10h
inc al
cmp al, 93
jb T1
mov dx, 060Ah ; Leftside (10) on 2nd row (6) in the window
mov ah, 02h ; BIOS.SetCursor
int 10h
mov ax, 0E5Dh ; BIOS.Teletype starting at ASCII 93 == 32 61
T2: int 10h
inc al
cmp al, 128
jb T2
Дополнительные примечания:
- Избегайте использования таких меток, как
l1
. Букву smallcapsl
легко спутать с цифрой1
. - Попробуйте написать несколько значимых комментариев в своих программах. Посмотрите, что я написал. Особенно числа, для которых вы не добавили комментарий, быстро классифицируются как магические числа, и это мало кому нравится!