weizhongyang 发表于 2017-9-20 09:27:12

关于在DOS中显示字符的奇怪问题

这是我写的代码,dos居中显示我定义的字符,代码如下:

assume cs:codsg, ds:datsg

datsg segment
        db 'hello, baiyang          '
        db 'welcome to here         '
        db 'this is a assembly world'
datsg ends

codsg segment
start:         mov ax, datsg
                mov ds, ax
                mov bx, 0
               
                mov ax, 0b800h
                mov es, ax
               
                mov ax, 0
                mov ss, ax
               
                mov ax, 0003h                ;这两条指令为清屏功能
                int 10h

               
                mov si, 0
                mov cx, 24
        s:        mov al,                         ;定位第一行的字符串
                mov ah, 09h;
                mov es:7c2h, al                ;低位存储字符
                mov es:7c3h, ah                ;高位存储字符显示的属性
               
                mov al, 24                ;定位第二行的字符串
                mov ah, 04h
                mov es:861h, al                ;定位第二行显示的字符
                mov es:862h, ah

                mov al, 48                ;定位第三行字符串
                mov ah, 0ch
                mov es:8f8h, al                ;低位存储的字符
                mov es:8f9h, ah                ;高位存储的字符
               
                inc bx
                add si, 2
                loop s

                mov ax, 4c00h
                int 21h
codsg ends
end start


两个奇怪的问题:
1、显示第二行的时候为乱码(但第一、三行可以正常显示)
2、有时候在DOS中运行程序时,什么也不显示,黑屏现象(我用的是虚拟机下的XP系统)。

请教下各位大神们,这是什么情况,有遇到过的吗?
在这先谢谢了!!!!

weizhongyang 发表于 2017-9-20 11:30:11

上面编译程序执行的效果如图

weizhongyang 发表于 2017-9-20 15:16:30

已解决!
mov es:860h, al                ;定位第二行显示的字符
mov es:861h, ah

weizhongyang 发表于 2017-9-20 15:20:06

weizhongyang 发表于 2017-9-20 15:16
已解决!
mov es:860h, al                ;定位第二行显示的字符
mov es:861h, ah

明白了,

奇数位存放字符, 偶数位存储显示字符的属性!{:5_97:}

weizhongyang 发表于 2017-9-21 10:31:34

此问题已解决,结帖了。
页: [1]
查看完整版本: 关于在DOS中显示字符的奇怪问题