|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 javanetwork 于 2011-8-15 00:24 编辑
- ;编程题
- ;在B8000H~BFFFFH共32KB的内存地址空间,为80*25彩色字符模式的显式缓冲区
- ;分成8页,每页4KB 差不多4000字节
- ;25行,每行80个字符,每个字符占2个字节
- ;其中低位字节存放Ascii码,高位字节存放字符的颜色属性
- ;颜色属性的格式: 从高到低 BL R G B I R G B
- ; 闪烁 背景 高亮 前景
- ;向这个地址写入数据,写入的内容将显示在显示器上
- ;根据以上资料,在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串'Welcome to masm!'
- assume cs:mycode
- mydat segment
- db 'Welcome to masm!'
- dw 0720H,07C0H,0860H;显示三个字符串的起始地址,160*11行+80-16=720H
- db 10001010B;闪烁绿色高亮黑底
- db 00101100B;非闪烁红色高亮绿底
- db 01110001B;非闪烁蓝色非高亮白底
- mydat ends
- mystack segment
- db 16 dup(0)
- mystack ends
- mycode segment
- start:
- mov ax,mydat
- mov ds,ax;数据段
- mov ax,0B800H
- mov es,ax;显存段地址
- mov ax,mystack
- mov ss,ax
- mov sp,10H;以上初始化栈
-
- mov di,10H;显存偏移地址索引
- mov si,16H;颜色索引
- mov cx,3;循环输出三个字符串
- threestr:
- push cx;保存循环计数
- push di
- mov ax,ds:[di];根据索引取得数据段中的显存偏移地址
- mov di,ax;得到显存偏移地址
- mov bx,0;字符串索引
- mov cx,16;16个字符循环16次
- cir:
- mov al,ds:[bx]
- mov es:[di],al;di为显存偏移地址,将字符写入
- mov al,ds:[si]
- mov es:[di+1],al;写入颜色属性
- add di,2;一次循环写入2个字节
- inc bx;一次循环读取1个字符
- loop cir
- pop di
- add di,2
- inc si
- pop cx
- loop threestr
- mov ax,4c00h
- int 21H
- mycode ends
- end start
复制代码
|
|