汇编:实验9:在屏幕中间显示彩色字符串

Posted 小杰666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编:实验9:在屏幕中间显示彩色字符串相关的知识,希望对你有一定的参考价值。

题目

在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串 welcome to masm!

这里的屏幕指的是,显卡文本模式下的屏幕,屏幕尺寸 80x25,可以显示彩色、高亮、闪烁的ASCII字符。

文本模式下一个字符由2个字节组成,即 ASCII+属性 = 2字节。属性字节的格式:

属性字节格式

内存地址空间中,b8000h~bffffh 共32KB,是80x25彩色字符模式的显示缓冲区。

显示缓冲区分位8页,每页4KB,每页80x25=2000个字符,2000x2字节=4KB,共8页x4KB=32KB。

汇编程序

绿字属性字节:00000010b

绿底红色:00100100b

白底蓝色:01110001b

代码:

; 屏幕中间显示三行彩色字
; sy9.asm
assume cs:code

data segment
    db 'welcome to masm!' ; 16字节
    db 00000010b          ; 绿字
    db 00100100b          ; 绿底红字
    db 01110001b          ; 白底蓝字
    db 11,12,13,64 ; 三行的位置 (25-3)/2=11 每行开始位置 (80-16)/2*2=64
data ends

stack segment
    dw 8 dup (0)
stack ends

code segment
start:
    mov ax,data
    mov ds,ax
    mov ax,stack
    mov ss,ax
    mov sp,16
    mov cx,3
row:
    mov dx,cx
    mov si,3
    sub si,cx
    mov ch,0
    mov cl,19[si]
    mov bp,0
col:
    add bp,160
    loop col

    mov ah,0
    mov al,ds:[22]
    add bp,ax       ; 每行字符起始位置
    mov si,3
    sub si,dx
    mov ah,16[si]
    mov bx,0
    mov cx,16
fill:
    mov al,[bx]
    push ds
    mov si,0b800h
    mov ds,si
    mov ds:[bp],ax
    pop ds
    inc bx
    add bp,2
    loop fill

    mov cx,dx
    loop row

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

执行结果

  1. 编译连接

masm sy9.asm;
link sy9.obj;

  1. 执行

显示结果

以上是关于汇编:实验9:在屏幕中间显示彩色字符串的主要内容,如果未能解决你的问题,请参考以下文章

汇编实验9

汇编实验九

汇编语言-王爽-实验10

实验九

实验九

实验九根据材料编程