马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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
|