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

 更新时间:2021年11月04日 16:10:11   作者:LyncDwight  
这篇文章主要为大家介绍了汇编语言显示功能的实现过程,文中通过问题实例分析来为大家进行详细的描述讲解,有需要的朋友可以借鉴参考下,希望能够有所帮助

问题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: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指向字符串的首地址

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

以上就是汇编语言显示功能实现问题实例详解的详细内容,更多关于汇编语言显示功能的资料请关注脚本之家其它相关文章!

相关文章

  • 汇编程序输出“Hello world”的实现

    汇编程序输出“Hello world”的实现

    这篇文章主要介绍了汇编程序输出“Hello world”的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • 汇编语言基础理解计算机底层技术原理

    汇编语言基础理解计算机底层技术原理

    这篇文章主要为大家介绍了汇编语言基础,理解计算机底层原理,想要成为高级程序员,我们必须要学会汇编语言,汇编语言是非常重要的计算机底层技术,一般用于底层的编写
    2021-11-11
  • 汇编语言AAD,DAA,DAS用法解析

    汇编语言AAD,DAA,DAS用法解析

    这篇文章主要介绍了汇编语言AAD,DAA,DAS用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • 汇编语言MUL指令无符号数乘法的使用

    汇编语言MUL指令无符号数乘法的使用

    这篇文章主要介绍了汇编语言MUL指令无符号数乘法的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • 什么是汇编语言

    什么是汇编语言

    汇编语言(assembly language)是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言
    2020-01-01
  • 汇编语言中cmp指令用法笔记与总结

    汇编语言中cmp指令用法笔记与总结

    这篇文章主要介绍了汇编语言中cmp指令用法,结合实例形式总结分析了汇编语言cmp指令基本功能、使用方法及操作注意事项,需要的朋友可以参考下
    2020-01-01
  • 通过汇编看golang函数的多返回值问题

    通过汇编看golang函数的多返回值问题

    这篇文章主要介绍了通过汇编看golang函数的多返回值问题,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • 汇编 JMP使用详解

    汇编 JMP使用详解

    这篇文章主要介绍了汇编 JMP使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • 汇编语言中DIV指令的具体用法

    汇编语言中DIV指令的具体用法

    本文主要介绍了汇编语言中DIV指令的具体用法
    2024-03-03
  • 汇编语言程序设计之根据输入改变屏幕颜色的代码

    汇编语言程序设计之根据输入改变屏幕颜色的代码

    这篇文章主要介绍了汇编语言中的根据输入改变屏幕颜色的代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03

最新评论