Функция INT 10H 06H перемещает курсор - PullRequest
3 голосов
/ 18 января 2020

Я запускаю следующий код сборки на (emu8086):

clearScr macro
         mov ah, 06h
         mov al, 00h
         mov bh, 71h
         mov cx, 0000h
         mov dx, 184fh
         int 10h
clearScr endm

print macro string
    mov ah, 09h    
    lea dx, string
    int 21h        
print endm

.model small
.stack 100h

.data
    msg    db 'Hello, world!', '$'  
    nl     db 0AH, 0DH, '$' 
    myname db 'Ahmed', '$'

.code                   
    main    proc
        mov ax, @data
        mov ds, ax

        print myname
        clearScr
        print msg

        mov ax, 4c00h
        int 21h
    main    endp

, и макрос clearScr, кажется, перемещает курсор, поскольку окончательный текст, выводимый на экран, не начинается с угла . figure 0

Почему это происходит? Я не пытаюсь установить / переместить курсор.

1 Ответ

5 голосов
/ 18 января 2020

и макрос clearScr, кажется, перемещает курсор

С точностью до наоборот:

clearScr равно не перемещение курсора, но вы хотите, чтобы он был перемещен.

Что происходит следующим образом:

  • print myname переместит курсор; курсор больше не будет находиться в верхнем левом углу, но будет находиться в конце вашего имени.
  • Если я правильно понял, clearScr очистит экран, но не изменить положение курсора; это означает, что курсор останется в том положении, в котором он был после print myname
  • print msg, также не изменит позицию курсора до печати сообщения, таким образом, сообщение будет напечатано в положение, в котором курсор находился после print myname

Если вы хотите очистить экран и , чтобы переместить курсор в угол, вы нужно сделать два шага:

  • Очистить экран (это будет не переместить курсор в угол)
  • Переместить курсор в угол (например, с помощью функции int 10h AH=2)

Я вижу, что вы печатаете Ahmed, но вы не выполняете cr / lf afterwords.

Если я правильно понимаю, печать CR / LF приведет к тому, что текст будет напечатан во второй строке после очистки экрана.

Печать только CR будет перемещать курсор в верхний левый угол если курсор уже находится в верхней строке.

...