我在 (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
宏似乎在移动光标,因为屏幕上打印的最终文本不是从角落开始的。
为什么会这样?我不是要设置/移动光标。
最佳答案
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 会将光标移动到左上角如果光标已经在顶行。
关于assembly - INT 10H 函数 06H 移动光标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59797082/