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 如何在16位代码中向下移动光标?_Assembly_Dos_X86 16 - Fatal编程技术网

Assembly 如何在16位代码中向下移动光标?

Assembly 如何在16位代码中向下移动光标?,assembly,dos,x86-16,Assembly,Dos,X86 16,这是我写的代码,我正试图在汇编8086上写,就像在普通键盘上一样,但每次我按下enter键,它就会向下一行,并在RAM中写入第二个字母。我如何在不重置RAM的情况下修复它?RAM允许用户从键盘写入 data segment ; add your data here! msg db ? nxtline db 10,13,'$' ends stack segment dw 128 dup(0) ends code segment start: ; set

这是我写的代码,我正试图在汇编8086上写,就像在普通键盘上一样,但每次我按下enter键,它就会向下一行,并在RAM中写入第二个字母。我如何在不重置RAM的情况下修复它?RAM允许用户从键盘写入

data segment
    ; add your data here! 
    msg db ? 
    nxtline db 10,13,'$'
ends

stack segment
    dw   128  dup(0)
ends

code segment
start:
; set segment registers:
    mov ax, data
    mov ds, ax
    mov es, ax

    ; add your code here
    xor ax,ax
    mov ah,1        
    xor bx,bx 
    mov bx,offset msg
    ifpressed:
    ;pusha 
    mov ah,1
    int 21h   
    cmp al,0Dh  ;check when enter is pressed
    jz nextline
    mov [bx],al
    add bx,2 
    ;popa 
    jmp ifpressed

    nextline:
     lea dx, nxtline
     mov ah, 9
     int 21h
     jmp ifpressed
    reapet:



    mov ax, 4c00h ; exit to operating system.
    int 21h    
ends

end start ; set entry point and stop the assembler.
  `
…但每次我按enter键,它都会向下移动一行

这正是创建该程序的目的。 如果不希望发生这种情况,请从程序中删除以下两行:

cmp al,0Dh  ;check when enter is pressed
jz nextline
或者保留这两行,但更改nxtline的定义(删除13行):


我认为bios中断汇编程序不适合我,它适合dos汇编程序。 通过如下方式更改dl和dh寄存器,尝试手动更改列和行:

Prompt: mov si, PromptChar
         mov ah, 2
         mov dh, 15  # change row to 15
         mov dl, 0   # change column to 0
         int 10h
         lodsb
         mov ah, 9
         int 10h
         jmp short End

不清楚您想要什么,但int21/01是用echo输入的,所以您可能想要不带echo的int21/08。不,我想要用echo输入。唯一的问题是,由于
msg db?
add bx,我写的第二个字母总是在新行的开头返回,2
每输入一个字符都会破坏nxtline中的CR,随后会破坏剩余的内存!
Prompt: mov si, PromptChar
         mov ah, 2
         mov dh, 15  # change row to 15
         mov dl, 0   # change column to 0
         int 10h
         lodsb
         mov ah, 9
         int 10h
         jmp short End