首页 > 解决方案 > INT 10H 功能 06H 移动光标

问题描述

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

为什么会这样?我不想设置/移动光标。

标签: assemblyx86-16emu8086

解决方案


并且clearScr宏似乎正在移动光标

恰恰相反:

clearScr没有移动光标,您希望它被移动。

会发生以下情况:

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

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

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

我看到你 print Ahmed,但你没有做 cr/lf 后记。

如果我理解正确,打印 CR/LF 会导致在清除屏幕后在第二行打印文本。

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


推荐阅读