我在(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
宏似乎正在移动光标,因为打印在屏幕上的最终文本不是从角落开始的。 为什么会这样呢?我不是要设置/移动光标。
最佳答案
并且clearScr
宏似乎正在移动光标
恰恰相反:clearScr
是而不是用于移动光标,但您希望它被移动。
发生了以下情况:
print myname
将移动光标;光标将不再位于左上角,而是位于名称的末尾。 clearScr
将清除屏幕,但是不会清除来更改光标位置;这意味着光标将保留在之后的位置,print myname
在打印消息之前也不会更改光标位置,因此消息将被打印到print msg
如果要清除和屏幕以将光标移到角落,则必须执行两个步骤:
print myname
函数int 10h
)我看到您打印了
AH=2
,但是您没有做cr / lf后记。如果我理解正确,在清除屏幕后,打印CR / LF会使文本打印在第二行。
仅打印CR会将光标移动到左上角(如果光标已在顶行中)。