王爽《汇编语言》实验9详解

实验9 根据材料编程
在屏幕中间分别显示绿色,绿底红色,白底蓝色的字符串“welcome to masm!”。
材料:
内存地址空间中,B8000H~BFFFFH共32K的空间,为80*25彩色字符模式的显示缓冲区。向这个地址空间写入数据,写入的内容将立即出现在显示器上。
在80*25彩色字符模式下,显示器可以显示25行,每行80个字符,每个字符可以有256种属性(背景色、前景色、闪烁、高亮等组合信息)。
这样,一个字符在显示缓冲区中就要占两个字节,分别存放字符的ASCII码(低位)和属性(高位)。80*25模式下,一屏的内容在显示缓冲区中共占4000个字节。
显示缓冲区分为8页,每页4KB,显示器可以显示任意一页内容。一般情况下,显示第0页内容。也就是通常情况下,B8000~B8F9F中的4000个字节将出现在屏幕上。
属性字节的格式:
7 6 5 4 3 2 1 0
BL(闪烁) R(背景) G(背景) B(背景) I(高亮) R(前景) G(前景) B(前景)

assume cs:codesg,ds:data,ss:stack

;定义三个段,分别是代码段codesg,数据段data,栈段stack

data segment
        db 'welcome to masm!'
        db 2,24h,71h
data ends

;数据段有两组数据,分别是需要显示的字符和颜色。期中2,24h,71h分别表;示绿字02h,绿底红字24h,白底蓝字71h  

stack segment
        db 16 dup(0)
stack ends
;大小为16字节,全部初始化为0
codesg segment

start:
        mov ax,stack  ;定义栈,多重循环需用到栈
        mov ss,ax
        mov sp,0
;初始化栈顶      
        mov ax,data     ;定义数据区
        mov ds,ax
    ;data表示段地址      
        mov cx,3     
        mov ax,0B800H  ;缓冲区的第一页首地址
        mov es,ax
        mov si,10h     ;si偏移至存储颜色的地址        
        mov ax,0        

 s:
       mov ah,ds:[si]       ;用ah保存字符颜色
      push cx      ;将cx,si入栈保存
      push si   
      mov cx,16
      mov si,0
      mov bx,0
      mov di,1

 inputCh:              ;输出一行welcome to masm!
        mov al,[bx]
        mov es :[bx + si],al   ;写字符
        ;其中al表示的是字符
        mov es:[bx + di],ah    ;写字符颜色,其中ah表示的是
        ;一种颜色
        inc bx          ;遍历字符串
        inc si
        inc di
    loop inputCh

        pop si      ;si出栈
        inc si     ;指向下一个颜色
        pop cx
        mov dx,es   ;接下来三条指令将es指向下一行
        add dx,0ah  
        mov es,dx

    loop s

    s1:                 ;最初程序执行太快,看不到现象,加一个死循环,用于看结果
        jmp short s1

codesg ends
end start
  • 1
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值