我试图在程序集中以图形模式打印消息,但控制台d:\仍在那里

时间:2017-04-16 08:43:23

标签: assembly graphics x86-16 tasm dosbox

这是我写的代码完美无缺的代码,除了我无法弄清楚如何删除控制台的东西(d:\)。 代码在屏幕中间打印hello。

    IDEAL
MODEL small
STACK 100h
DATASEG
; --------------------------
msg db 'hello'
; --------------------------
CODESEG
start:
    mov ax, @data
    mov ds, ax
; --------------------------
;fullscreen
MOV AL, 13H
MOV AH,0
INT 10H

mov si,@data;moves to si the location in memory of the data segment

mov ah,13h;service to print string in graphic mode
mov al,0;sub-service 0 all the characters will be in the same color(bl) and cursor position is not updated after the string is written
mov bh,0;page number=always zero
mov bl,00001111b;color of the text (white foreground and black background)
;     0000             1111
;|_ Background _| |_ Foreground _|
;

mov cx,5;length of string
;resoultion of the screen is 244x126
mov dh,63;y coordinate
mov dl,122;x coordinate
mov es,si;moves to es the location in memory of the data segment
mov bp,offset msg;mov bp the offset of the string
int 10h








; --------------------------

exit:
    mov ax, 4c00h
    int 21h
END start

中间有黑色背景,中间有白色文字但左上角有d:\

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

当程序完成显示消息时,您可以使用DOS函数4Ch返回操作系统。这意味着DOS将再次将其提示放在屏幕上。那是" d:\"你正在看到的。

要有足够的时间查看邮件,您需要推迟返回DOS 只需等待用户按任意键:

mov ah, 07h   ;Input from keyboard without echo to the screen
int 21h
mov ax, 4C00h ;Terminate
int 21h
;resoultion of the screen is 244x126
mov dh,63;y coordinate
mov dl,122;x coordinate

我不知道你在哪里得到这个特殊的分辨率数据 您使用的屏幕13h的图形分辨率为320x200,但您用于显示文本的BIOS功能13h需要DL和{{中的光标坐标 1}}寄存器。列的范围为0到39,行的范围为0到24 要显示文字"你好"在屏幕中间,您需要:

DH