Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly INT 10H函数06H移动光标_Assembly_X86 16_Emu8086 - Fatal编程技术网

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
    将移动光标;光标将不再位于左上角,而是位于您姓名的末尾
  • 如果我理解正确,
    clearScr
    将清除屏幕,但不会更改光标位置;这意味着在打印myname后,光标将保持在原来的位置
  • print msg
    在打印消息之前也不会更改光标位置,因此消息将打印到光标位于
    print myname
如果要清除屏幕并将光标移动到角落,则必须执行两个步骤:

  • 清除屏幕(这将而不是将光标移到角落)

  • 将光标移到拐角处(例如,使用
    int 10h
    函数
    AH=2
我看到你打印了《艾哈迈德》,但你没有做cr/lf后记


如果我理解正确,打印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