首页 文章

没有回车的新行汇编语言

提问于
浏览
1

我在dosbox程序集上做一个程序,我在对角线上打印0到9 . 这是我目前的代码

code segment
assume cs:code, ds:code
org 100h

start:
mov ah, 02h
mov dl, 30h
mov ch, 30h
int 21h

again:
inc dl  ;output next number
mov bl, dl
mov dl, 0ah ;new line
int 21h
mov dl, 20h ;space
int 21h
mov dl, bl
int 21h

inc ch  ;increment counter
cmp ch, 39h ;if counter is at 9 end program
je terminate    
loop again


terminate:
mov ax, 4c00h
int 21h
code ends
end start

问题是当我添加一个新行时,光标会返回到下一行的开头,因此无法对角打印 . 有没有办法可以打印新行,但光标停留在当前位置?我已经读过某个地方'换行'可以解决我的问题,但它已被改为'新线',在添加新线后,光标自动返回起始位置ala自动'回车'


编辑:谢谢大家查看这个问题 . 我们不知道他们的代码中有2/3,主要是关于again2和jump循环 . 代码:https://pastebin.com/Vji29VL3 .

1 回答

  • 1

    BIOS功能的替代方案是直接写入视频 .

    mov     al, 30H
          mov     cx, B800H
          mov     es, cx
          xor     di, di               ; Change if you don't want to start at top/left.
          mov     cx, 161              ; STOSB has already incremented by one.
    
    Loop:
          stosb
          add     di, cx
          inc     al
          cmp     al, 9
          jbe     Loop
    

    当然,这会做一些假设,尤其是您正在写入第0页并且属性设置为实际显示的内容 . 如果您愿意,也可以在AH中 Build 属性,然后使用STOSW并且每次仅向DI添加160 .

相关问题