汇编 实验九 程序优化,两次循环
本帖最后由 javanetwork 于 2011-8-15 00:24 编辑;编程题
;在B8000H~BFFFFH共32KB的内存地址空间,为80*25彩色字符模式的显式缓冲区
;分成8页,每页4KB 差不多4000字节
;25行,每行80个字符,每个字符占2个字节
;其中低位字节存放Ascii码,高位字节存放字符的颜色属性
;颜色属性的格式: 从高到低 BL R G BI R GB
; 闪烁背景高亮 前景
;向这个地址写入数据,写入的内容将显示在显示器上
;根据以上资料,在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串'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:;根据索引取得数据段中的显存偏移地址
mov di,ax;得到显存偏移地址
mov bx,0;字符串索引
mov cx,16;16个字符循环16次
cir:
mov al,ds:
mov es:,al;di为显存偏移地址,将字符写入
mov al,ds:
mov es:,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
看帖就要回帖支持下 看看老帖,支持下
页:
[1]