阅读 104

汇编语言显示功能实现教程详解

这篇文章主要为大家介绍了汇编语言显示功能的实现过程,文中通过问题实例分析来为大家进行详细的描述讲解,有需要的朋友可以借鉴参考下,希望能够有所帮助

目录
  • 问题1

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

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

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

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

    •  问题2:

      • 分析:

      问题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)

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      assume cs:code,ds:data
      data segment
          db 'Welcome to masm!'  
      data ends
        
      code segment
      start:              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 ends
      end start

       问题2:

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

      分析:

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

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

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

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      assume cs:code,ds:data
      data segment
          db 'Welcome to masm!',0
      data ends
       code segment
      start:              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:         retf
      code ends
      end start

      以上就是汇编语言显示功能实现问题实例详解的详细内容

      原文链接:https://blog.csdn.net/hc1151310108/article/details/82744472


      文章分类
      版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
      相关推荐