千家信息网

汇编语言显示功能实现方法是什么

发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,本篇内容主要讲解"汇编语言显示功能实现方法是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"汇编语言显示功能实现方法是什么"吧!问题1在屏幕中间分别显示
千家信息网最后更新 2025年01月20日汇编语言显示功能实现方法是什么

本篇内容主要讲解"汇编语言显示功能实现方法是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"汇编语言显示功能实现方法是什么"吧!

    问题1

    在屏幕中间分别显示绿底,绿底红色,白底蓝色的字符串"Welcome to masm!"

    分析:

    1 如何确定字符要显示的位置

    在80*25的彩色字符模式显示缓冲区在内存地址的B8000H~BFFFFH共32KB的空间中

    在该模式下,显示器可以显示25行,80列

    所以在一行中就有80个字符,共占据160个字节,每个字符低位字节存储字符的ASCII码,高位字节存储字符的颜色属性

    偏移0000~009F对应的就是显示器上的第一行;

    偏移0A00~13F0对应的就是显示器上的第二行;......依次类推

    确定3行字符在每一行的起始位置

    因为显示的在屏幕的中间,共需要32个字节,屏幕中一行共160个字节,所以开始字节为(160 - 32)/ 2 = 64

    确定3行字符在屏幕中的哪一行

    因为屏幕中一共25行,要显示3行字符串,一行有160个字符串,则第一行的开始位置是(25 - 3)/ 2 * 160 = 6E0H

    第二行的开始位置是6E0H + 160 = 780H

    第三行的开始位置是780H + 160 = 820H

    2 如何确定字符要显示的颜色属性

    每个字符的颜色属性占据一个字节,每一位表示的不同的颜色属性,则共有256种颜色属性

    属性字节的格式:

    7 (6 5 4) 3 (2 1 0)

    BL (R G B) I (R G B)

    闪烁 背景 高亮 前景

    绿底黑色:0 010 0 000B (20H)

    绿底红色:0 010 0 100B (42H)

    白底蓝色:0 111 0 001B (71H)

    assume cs:code,ds:datadata segment        db 'Welcome to masm!'    data ends code segmentstart:                  mov ax,data                        mov ds,ax                        mov bx,0                   ;ds:bx指向数据段起始位置                         mov ax,0B800H                              mov es,ax                  ;设置显示内存空间的起始位置                         mov si,64                  ;设置字符串在一行中的中间位置                                                mov cx,16                  ;设置循环的次数为字符串的长度 s:                      mov al,ds:[bx]                                                             mov ah,20H                 ;设置第一行的开始位置和颜色                        mov es:[si+6E0H],ax                                                mov ah,42h                 ;设置第二行的开始位置和颜色                        mov es:[si+780H],ax                                                mov ah,71h                 ;设置第三行的开始位置和颜色                        mov es:[si+820H],ax                         inc bx                                ;设置字符串的偏移                        add si,2                   ;设置下一次循环的写入位置                         loop s                         mov ax,4c00h                        int 21h code endsend start

    问题2:

    设计一个子程序,使调用者决定显示的位置,内容和颜色

    分析:

    要实现的功能:在指定的位置,用指定的颜色,显示一个用0结束的字符串

    指定的参数:行号-dh(取值范围0~24),列号-dl(取值范围0~79),取值范围主要是根据显示器屏幕的大小

    颜色-cl,ds:si指向字符串的首地址

    assume cs:code,ds:datadata segment        db 'Welcome to masm!',0data ends code segmentstart:                  mov dh,8                        mov dl,3                        mov cl,2                   mov ax,data                        mov ds,ax                        mov si,0                   ;ds:si指向数据段首地址                         call show_str                   mov ax,4c00h                        int 21h show_str:               mov ax,0B800H                        mov es,ax          ;es指向显示内存空间的段地址                         mov ax,160                        dec dh                        mul dh                        mov dh,0                        dec dl                        add dl,dl                        add ax,dx                        mov di,ax          ;设置di指向字符串要显示的偏移地址                        mov ah,cl show:                   mov cx,ds:[si]                        jcxz ok                    ;设置在遇到字符0的时候退出                        mov al,ds:[si]                        mov es:[di],ax                        add di,2                        inc si                        loop show ok:                     retfcode ends end start

    到此,相信大家对"汇编语言显示功能实现方法是什么"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

    0