如何以16位代码将光标向下移动一行?

问题描述 投票:1回答:2

[这是我尝试在程序集8086上编写的代码,就像在普通键盘上一样,但是每次我按Enter时,它都会下降一行并在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.
  `
assembly dos x86-16
2个回答
2
投票

...但是每当我按Enter时,它就会下降一行...

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

cmp al,0Dh  ;check when enter is pressed
jz nextline

或保留这两行,但更改nxtline的定义(删除13):

nxtline db 10,'$'

0
投票

它对我的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
© www.soinside.com 2019 - 2024. All rights reserved.