Assembly INT 10H函数06H移动光标
我在Assembly INT 10H函数06H移动光标,assembly,x86-16,emu8086,Assembly,X86 16,Emu8086,我在(emu8086)上运行以下汇编代码: 而clearcr宏似乎在移动光标,因为屏幕上打印的最终文本不是从角落开始的 为什么会这样?我没有试图设置/移动光标 而clearcr宏似乎正在移动光标 恰恰相反: clearcr不是移动光标,而是希望移动光标 发生的情况如下: print myname将移动光标;光标将不再位于左上角,而是位于您姓名的末尾 如果我理解正确,clearScr将清除屏幕,但不会更改光标位置;这意味着在打印myname后,光标将保持在原来的位置 print msg在打印消息
(emu8086)
上运行以下汇编代码:
而clearcr
宏似乎在移动光标,因为屏幕上打印的最终文本不是从角落开始的
为什么会这样?我没有试图设置/移动光标
而clearcr
宏似乎正在移动光标
恰恰相反:
clearcr
不是移动光标,而是希望移动光标
发生的情况如下:
将移动光标;光标将不再位于左上角,而是位于您姓名的末尾print myname
- 如果我理解正确,
将清除屏幕,但不会更改光标位置;这意味着在打印myname后,光标将保持在原来的位置clearScr
在打印消息之前也不会更改光标位置,因此消息将打印到光标位于print msg
print myname
- 清除屏幕(这将而不是将光标移到角落)
- 将光标移到拐角处(例如,使用
函数int 10h
)AH=2
如果我理解正确,打印CR/LF将导致文本在清除屏幕后打印在第二行
如果光标已经在顶行,只打印CR会将光标移动到左上角。
int 10h
功能06h
只是“向上滚动窗口”,因此您还需要将光标位置重置到第一列。@默认情况下,它已经设置为第一列。在这里它向前移动,我的问题是为什么“默认设置为第一列”-是什么让你这么认为?我看到你打印了《艾哈迈德》,但你没有做cr/lf后记。这不是意味着你被定位在第6列吗?“打印CR/LF会导致文本打印在第二行”-嗯?如果打印“Ahmed”,则光标位置为6。如果打印“Ahmed\r\n”,则光标位置为1。如果光标位置为6,并且向上滚动屏幕(这是ah=06
所做的),则光标位置仍然为6。如果光标位置为1且滚动,光标位置仍为1。@DavidWohlferd打印“Ahmed”,光标位置为(列,行)=(6,1)。打印“\r\n”,光标位置为(1,2)。据我所知,ah=6
不会改变光标位置,因此光标位置仍然是(1,2)。但是转角应该是(1,1)。我现在明白了,这非常清楚。非常感谢:+1:
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