INT 10H 函数 06H 移动光标

INT 10H function 06H moves the cursor

我运行下面的汇编代码在(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 宏似乎在移动光标,因为屏幕上打印的最终文本不是从角开始的。

为什么会这样?我不是要 set/move 光标。

and the clearScr macro seems to be moving the cursor

正好相反:

clearScr 不是 移动光标,但您希望移动它。

发生以下情况:

  • print myname 将移动光标;光标将不再位于左上角,而是位于您姓名的末尾。
  • 如果我没理解错的话,clearScr会清除屏幕但不会改变光标位置;这意味着光标将保持print myname
  • 之后的位置
  • print msg 也不会在打印消息之前更改光标位置,因此消息将打印到光标在 print myname
  • 之后的位置

如果要清除屏幕将光标移动到角落,则必须执行两个步骤:

  • 清除屏幕(这将不会将光标移动到角落)
  • 将光标移动到角落(例如使用int 10h函数AH=2

I see you print Ahmed, but you don't do a cr/lf afterwords.

如果我没理解错的话,打印 CR/LF 会导致清屏后文本打印在第二行。

仅打印 CR 会将光标移动到左上角如果光标已经在顶行。