王爽 汇编语言第二版 实验9 根据材料编程 代码及分析

通过阅读教材资料我们能获取的信息如下:
1、显示器默认显示的缓冲区是:B8000~B8F9F,低字节放字符,高字节放属性
2、存放字符的地址:第一行:B8000~B809F,第二行:B80A0~B813F 第三行:B8140 ~ B81DF
3、即偶数字节放字符,奇数字节放属性
4、如何显示:只要把字符依次放入缓冲区即可
5、颜色属性怎么表示:绿色:0000 0010 (02h),绿底红字:0010 0100(24h),白底蓝字(71h)

我只写了在显示器起始处显示三行,至于在屏幕中间显示,只要加一个偏移量就好了,运行结果如下:
这里写图片描述
自己写的代码如下,请参考,不知道还能不能再优化一下:

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

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

stack segment
        db 16 dup(0)
stack ends

codesg segment

start:
        mov ax,stack  ;定义栈,多重循环需用到栈
        mov ss,ax
        mov sp,0

        mov ax,data     ;定义数据区
        mov ds,ax

        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   ;写字符
        mov es:[bx + di],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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值