• 汇编语言 实验9 根据材料编程


    编程任务:在屏幕中间分别显示绿色、绿地红色、白底蓝色的字符串 'welcome to masm!',一共三行。

    根据80x25彩色字符模式可以知道显示器一页显示80x25个彩色字符,想显示什么字符就往B8000H~BFFFFH共32KB的空间显存中写入对应的字符和颜色属性。

    assume cs:code
    data segment
        db 'welcome to masm!'
        db 02h,24h,71h  ; 要求的三个颜色对应的16进制代码
    data ends

    stack segment
        db 16 dup(0)
        ; 也可以是下面的定义法:
        ; dw 8 dup(0)
    stack ends

    code segment

    start: 
            ; 设置data段,以及ds:bx指向data段的第一个单元,
            ; 即ds:[bx]的内容就是data段第一个单元的内容 
            mov ax,data
            mov ds,ax
           
            ;设置显示缓存区段
            mov ax,0b800h ;设置起始缓存
            mov es,ax      
           
            ;设置栈段
            mov ax,stack
            mov ss,ax
            mov sp,10h  ;指向栈顶
           
            ;初始化三个寄存器
            mov bx,780h ; 行 从12-14行(注意:从第1行开始计数)
            mov si,10h ; 颜色的偏移量,三次循环每次
                        ; 增加 1h 指向下一个颜色
           
            mov cx,3    ; 三次循环改变行
        s:  mov ah,ds:[si] ;颜色事先存放在ah中
            push cx    
            push si
           
           
            mov cx,16  ; 16次循环改变列
           
            mov si,64  ; 这里的si的意义是多少列,
                ; 为什么从64列开始呢?
                ; (1)字符串为32字节,16字节ASCLL码,16字节属性
                ; (2)每一行有160列,那么余下有 160-32=128列为空白
                ;    要使得字符串居中显示,那么字符串的左边和右边
                ;   都应该是64字节(128/2),而列数是从0开始计数,
                ; 所以左边的64字节为0-63,所以这里偏移量为64
            mov di,
                       
        s0: mov al,ds:[di] ;将date段中的字符一个一个传入es中
            mov es:[bx+si],al ; 低位存放字符
            mov es:[bx+si+1],ah ; 高位存放颜色
           
            add si,2  ;显示缓存区字符ASCII码偏移量为2
            add di,1  ;data段字符的偏移量,每次加 1
           
            loop s0
           
            pop si 
            pop cx  ;后进先出,先出栈si,再出栈cx
           
            add si,1h  ;指向下一个颜色
            add bx,0a0h ;指向下一行 160=0a0h
            loop s
           
            mov ax,4c00h
            int 21h
    code ends

    end start

  • 相关阅读:
    大数据方向招人难啊!!
    .netcore 急速接入第三方登录,不看后悔
    T-SQL——函数——时间操作函数
    T-SQL——关于XML类型
    机器学习方法
    可读性友好的JavaScript:两个专家的故事
    快速了解 JavaScript ES2019 的五个新增特性
    了解 Vue 的 Compsition API
    使用 JavaScript 操作浏览器历史记录 API
    JavaScript ES 模块:现代化前端编程必备技能
  • 原文地址:https://www.cnblogs.com/fengxing999/p/10796402.html
Copyright © 2020-2023  润新知