javanetwork 发表于 2011-8-14 23:43:56

汇编 实验九 程序优化,两次循环

本帖最后由 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

我挖 发表于 2013-7-2 22:47:52

看帖就要回帖支持下

fishmo 发表于 2013-7-2 23:06:20

看看老帖,支持下
页: [1]
查看完整版本: 汇编 实验九 程序优化,两次循环