汇编——在屏幕中间显示不同颜色的字符串

时间:2023-01-03 18:06:53

编程:参考教材实验9,在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串’welcome to masm’。
一、分析
8086CPU中,80x25彩色字符模式显示缓冲区的结构:内存地址空间中,B8000H~BFFFFH共32kb的空间,为80x25彩色字符模式的显示缓冲区。向这个地址空间写入数据,写入的内容将立即出现在显示器上。显示器可以显示25行,每行80个字符,每个字符可以有256种属性。
显示缓冲区分8页,一般情况下,显示第0页的内容。也就是通常情况下,B8000H~B8F9FH中的4000个字节的内容将出现在显示器上。要出现在中间,即出现在11、12、13行,开始的对应的地址分别为6E0H、6E0H+0A0H、6E0H+0A0H+0A0H。 而每列160个字节,要是显示在中间,则字符串第12行首地址为710H。接下来,就要把这些字符显示在显示器了。对了,这里应该注意的一个地方是,在显示缓冲区,偶地址存放字符,奇地址存放字符的颜色属性,所以在寻找列的中间位置的时候要考虑到。160-16*2=96。96/2=48.
二、代码:
assume cs:code
data segment
db ‘Welcome to masm!’
data ends
code segment
start: mov ax,data
mov es,ax
mov ax,0b800h;基地址
mov ds,ax
mov bx,0710h;设置字符串首地址

    mov cx,16;总共16个字符,所以循环16次
    mov si,0
    s:mov ax,es:[si];取出字符
       mov ah,02h;设置属性为绿色
       mov word ptr ds:[bx],ax;把字符输入到需要显示的地址

       mov ah,24h;设置属性为绿底红色、
       mov word ptr ds:[bx+0a0h],ax

       mov ah,71h;设置属性为白底蓝色
       mov word ptr ds:[bx+0a0h+0a0h],ax

       inc si
       add bx,2

       loop s
       mov ax,4c00h
       int 21h
code ends
end start

三、截图汇编——在屏幕中间显示不同颜色的字符串