<<汇编语言>>---王爽 (实验 9)DOS输出彩色闪烁字符


简介 :

编程任务 : 
在屏幕中间分别显示绿色 , 绿底红色 , 白底蓝色的字符串 'Welcome to masm'

代码 :

assume cs:code,ds:data

; 显存地址 : B8000H - BFFFFH
; 显示尺寸 : 80 x 25 个字符
;   其中每一个字符占用两个字节 , 低地址为 ASCII 码 , 高地址为属性
;   也就是说 每一个字符 可以设置的属性有 256 种
;   属性 : 
;       是否闪烁 背景色R 背景色G 背景色B 是否高亮 前景色R 前景色G 前景色B
; 因此一个屏幕总共有 80 x 25 = 2000 个字符 , 需要 4000 个字节来存储 (约为4K)
; 然后系统的显存总共是 32K , 也就是说可以储存 8 个页面 , 默认显示第一个页面

data segment
    db 'Hello world', 33 ; 33 是感叹号的 ASCII 码 
data ends

code segment

    start:
        mov ax, data
        mov ds, ax
        mov ax, 0B800H
        mov es, ax ; 保存显存的段地址
        mov si, 0000H ; 数据段偏移地址
        mov di, 0000H ; 显存偏移地址
        mov cx, 000CH ; 设置循环次数 , "Hello world!" 长度为 12
    print_green:
        mov al, ds:[si] ; 读取数据段中的数据
        mov ah, 00100000B ; 设置字体的属性 (黑底绿字)
        mov es:[di], ax ; 写入显存
        inc si ; 数据段偏移地址自增 1 
        add di, 0002H ; 显存偏移地址自增 2
        loop print_green

    finish:
        mov ax,4cH
        int 21H

code ends

end start

总结 :

这里由于时间关系只实现了向屏幕的起始位置输出 "Hello world!" 的功能
实验要求中的别的功能也是相同的原理 , 只需要改变写入显存的位置以及字符串的属性即可

你可能感兴趣的:(<<汇编语言>>---王爽 (实验 9)DOS输出彩色闪烁字符)