简介 :
编程任务 :
在屏幕中间分别显示绿色 , 绿底红色 , 白底蓝色的字符串 '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!" 的功能
实验要求中的别的功能也是相同的原理 , 只需要改变写入显存的位置以及字符串的属性即可