• 汇编-实验9


    一、编程目标:

    在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串'welcome to masm!'。

    二、程序分析

    在屏幕中显示字符即是向显示缓冲区的对应区域写入字符。

    1、定位屏幕输出位置

    字符串长度为16,屏幕每行总共为80个字符的输出宽度。要使得居中,则字符左右要各空32个字符位置。即字符串首字符位于每行的第33个字符位,字符串占第33列到第48列。

    屏幕每页为25行,输出目标为3行,即三个字符串占第12、13、15行。

    即第一个字符串在显示缓冲区内起始位置为:(B8000H+11*80*2+32*2);

    第二行的起始地址为在第一行基础上加上80*2;

    第三行类推。

    2、字符信息的设置

    字符本身的写入可通过每行分别写入单个字符,也可以设置一个数据段存放原始字符串,通过loop指令逐个写入。

    字符属性是单个字符占据两字节中的高字节部分,可在写入时候逐个写入,但通过loop指令更方便。

    3、思路

    设置一个数据段,存放原始字符串。

    设置一个数据段,存放各行的属性值。

    对每行进行循环,赋值原始字符串,并写入该行属性值,共16次。更新目标区域及相关数值,进行下一行的循环,类推,共计3次。

    三、程序代码

    assume cs:code,ds:string,es:color,ss:stack
    string segment
        db 'welcome to masm!'
    string ends
    
    color segment
        db 2,36,113
    color ends
    
    stack segment
        db 16 dup (0)
    stack ends
    
    code segment
    start:
        mov ax,string
        mov ds,ax
        mov bx,0         ;初始指向string首地址
        mov si,16         ;初始指向color首地址
    
        mov ax,stack
        mov ss,ax
        mov sp,16         ;设置初始栈顶指向
    
        mov ax,0b800h 
        mov es,ax
        mov bp,0720h         ;设置首行字符串首地址
        mov cx,3
    
    s1:
        mov di,0         ;游标初始指向写入区每行首地址
        push cx             ;保护外循环数
        mov cx,16
    s2:
        mov al,[bx]
        mov es:[bp+di],al
        mov al,[si]
        mov es:[bp+di+1],al
        add di,2          ;指向写入区下一字符
        inc bx              ;指向读入区下一字符
        loop s2
    
        mov bx,0          ;每次循环初始指向string首地址
        inc si              ;指向字符属性区下一属性
        add bp,160          ;指向下一写入行首
    
        pop cx              ;取出外循环数
        loop s1
    
        mov ax,4c00h
        int 21h
    
    code ends
    end start
    
    	
    	



  • 相关阅读:
    python第七十九天--第十四周作业
    python第七十七天---HTML
    python第七十六天--堡垒机完成
    python第七十一天---堡垒机
    python第六十八天--第十二周作业
    XmlHepler(拿去就能用)
    .NET中代理服务器WebProxy的各种用法
    XML VS DataSet
    C#操作XML方式
    C#读取XML方式
  • 原文地址:https://www.cnblogs.com/tsembrace/p/3267150.html
Copyright © 2020-2023  润新知