实验9 根据材料编程《汇编语言》- 王爽

news2024/11/24 14:02:41

1. 需求

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

2. 分析

(1)材料中提到,一个在屏幕上显示的字符,具有前景(字符色)和背景(底色)两种颜色,字符还可以以高亮和闪烁的方式显示。前景色、背景色、闪烁、高亮等信息被记录在属性字节中,字节属性中,每位表示的含义如下

76543210
BLRGBIRGB
闪烁背景(底色)高亮前景(字符色)

其中,R:红色,G:绿色,B:蓝色

可以按位设置属性字节,从而配出各种不同的前景色和背景色。

红底绿字,属性字节为:01000010b

红底闪烁绿字,属性字节为:11000010b

红底高亮绿字,属性字节为:01001010b

黑底白字,属性字节为:00000111b

白底蓝字,属性字节为:01110001b

所以,从以上材料的描述,我们可以得到

绿字的属性字节为:00000010b

绿底红色的属性字节为:00100100b

白底蓝色的属性字节为:01110001b

其次,材料中提到,在显示器中0行0列显示红底高亮闪烁绿色的字符串'ABCDEF'

(红底高亮闪烁绿色,属性字节为:11001010b,即CAh)

显示缓冲区的内容为:

000102030405060708090A0B0C0D0E0F
B800:000041CA42CA43CA44CA45CA46CA....

所以,一个字在显示缓冲区中,是用2个字节描述的,偶数字节是这个字的assii码,奇数字节是这个字的属性。

(2)材料中提到,B8000h ~ BFFFFh 共32kb空间,是80 x 25 彩色字符模式的显示缓冲区。显示缓冲区分为8页,每页 4kb(约等于 4000字节),显示器可以显示任意一页的内容。一般情况下,显示第0页的内容,也就是说,B8000h ~ B8F9Fh 这4000个字节的内容会显示在显示器上。

所以,从以上材料的描述,我们可以让显示缓冲区的段地址为:B8000h

其次,在一页显示缓冲区中,

偏移地址 000h ~ 09Fh 对应显示器上第1行(共160个字节,80个字(每个字用2个字节描述,底字节:assii码,高字节:字的属性))

偏移地址 0A0h ~ 13Fh 对应显示器上第2行

。。。

。。。

偏移地址 F00h ~ F9Fh 对应显示器上第25行(最后一行)

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

  • 在第12行的中间,偏移地址为:160*11 + 160/2 - 32/2 = 1824 处开始写入绿色字符串: 'welcome to masm!'
  • 在第13行的中间,偏移地址为:160*12 + 160/2 - 32/2 = 1984 处开始写入绿底红色字符串: 'welcome to masm!'
  • 在第14行的中间,偏移地址为:160*13 + 160/2 - 32/2 = 2144 处开始写入白底蓝色字符串: 'welcome to masm!'

3. 数据结构设计

我们可以用 C语言 数据结构的思想来组织需求中需要的数据

大概如C语言描述的如下结构

struct STR_8025 {
	unsigned char str[16];
	unsigned char attrs[3];
};

用汇编语言描述如下

data segment
    db 'welcome to masm!'   ;16个字节
    db 00000010b            ;1字节(绿色字)
    db 00100100b            ;1字节(绿底红色字)
    db 01110001b            ;1字节(白底蓝色字)
data ends

4. 代码

assume cs:code, ds:data, ss:stack
data segment
    db 'welcome to masm!'   ;16个字节, 看成C语言中的 uchar 类型字符
    db 00000010b            ;1字节(绿色字)
    db 00100100b            ;1字节(绿底红色字)
    db 01110001b            ;1字节(白底蓝色字)
data ends
stack segment
    db 16 dup (0)           ;16个db类型数据,并且初始化为0
stack ends
code segment
start:
    ;初始化数据段
    mov ax, data
    mov ds, ax
    ;初始化栈段
    mov ax, stack
    mov ss, ax
    mov sp, 16              ;设置栈顶

    mov ax, 0B800h          ;B8000h ~ BFFFFh 共32kb空间,是80 x 25彩色字符模式的显示缓冲区
    mov es, ax              ;设置显示缓冲区的段地址在es寄存器上

    mov si, 1824    ;在第12行的中间,偏移地址为:160*11 + 160/2 - 32/2 = 1824 处开始写入
    mov cx, 3       ;需要写的行数
    mov di, 0       ;字属性数据,10h[0], 10h[1], 10h[2]
rows:
    push cx         ;rows标号循环中的cx入栈
    mov bx, 0
    mov cx, 16      ;'welcome to masm!' 有16个字节
columns:
    mov al, [bx]        ;低字节存储字符对应的assii码编码值
    mov ah, 10h[di]     ;高字节存储字属性
    mov es:[si], ax     
    inc bx              ;移到下一个字 
    add si, 2           ;移到下一个字开始写的地址
    loop columns

    pop cx              ;恢复rows标号循环中的cx
    sub si, 32          ;每行写数据的首地址
    add si, 160         ;移到下一行
    inc di              ;移到下一行属性
    loop rows

    mov ax, 4c00h
    int 21h
code ends
end start

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2044379.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[000-01-030].第7节:Zookeeper工作原理

1.Zookeeper工作原理: 1.1.Zookeeper的工作机制 1.Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架;2.Zookeeper负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的…

来了,秋天的第一个POC

立秋就这么水灵灵地过了 又到了“秋天的第一杯奶茶”刷屏的时刻 而我们要追求的是“秋天的第一个POC” 做好变强的准备了吗 Yak POC编写,这一篇就够了 文章中指代的POC仅指使用 Yaklang 编程语言编写的POC 在此篇文章中就详细描述 Yaklang 语法的学习了&#x…

【昱合昇天窗】消防排烟天窗设计使用需注意问题

消防排烟天窗在设计和使用过程中,需要避免出现以下三个问题,以免影响其排烟效果和安全性。1、只关注价格 很多人在选择消防排烟天窗时,只关心天窗的价格,不重视天窗型号、配置选择是否满足厂房需求。这样做的坏处在于安装的天窗可…

还在画恐怖片?局部重绘,艺术再创造 —— Stable diffusion inPainting功能详解与实战指南

前言 在AI绘画的世界里,我们常常面临这样的困境:一幅作品,除了手部姿势、面部表情其他都很完美;这时候,如果要重新生成整幅画,不仅效率低下,而且可能会破坏原本满意的部分。幸好,St…

JAVA毕业设计|(免费)ssm视康眼镜网店销售系统的包含文档代码讲解

收藏点赞不迷路 关注作者有好处 编号:ssm538 ssm视康眼镜网店销售系统的 开发语言:Java 数据库:MySQL 技术:SpringSpringMVCMyBatisVue 工具:IDEA/Ecilpse、Navicat、Maven 文末获取源码 1.系统展示 2.万字文档展示 …

为什么MySql使用B+树

mysql索引为什么选择B树? 在回答这个问题之前,得先了解一个概念,页的概念。页是InnoDB中数据管理的最小单位。当我们查询数据时,其是以页为单位,将磁盘中的数据加载到缓冲池中的。同理,更新数据也是以页为…

数据库实验一 创建数据库

一.实验目的 1.学会数据表的创建; 2.加深对表间关系的理解; 3.理解数据库中数据的简单查询方法和应用。 二. 实验内容 1.题目要求 给定一个实际问题,实际应用问题的模式设计中至少要包括3个基本表。应用问题是供应商给工程供…

被嫌弃的35岁程序员,竟找到了职业的新出路:PMP项目管理

35岁,本应是事业发展的高峰期。更多听到的却是35岁职场天花板,特别是IT从业者,35岁就好像是一道迈不过的坎:多年的工作经验,在35岁的生理年龄面前,一文不值。 IT从业者若想安然度过“35岁危机”&#xff0…

【RISC-V设计-14】- RISC-V处理器设计K0A之打印输出

【RISC-V设计-14】- RISC-V处理器设计K0A之打印输出 文章目录 【RISC-V设计-14】- RISC-V处理器设计K0A之打印输出1.简介2.验证用例3.软件代码4.链接脚本5.编译脚本6.仿真结果6.1 复位结束6.2 运行成功6.3 终端打印 7.总结 1.简介 本文将详细阐述如何利用 printf 来打印字符串…

做自媒体博主如何使用外网视频素材!

想成为视频博主却不知道外网视频怎么下载?看这里! 在这个信息爆炸的时代,做一名视频博主无疑是展现自我、分享创意的绝佳方式。但当我们想要获取更多灵感,从外网的精彩视频中学习时,却常常被下载的问题难住。 其实&…

【启明智显技术分享】工业级HMI芯片Model3A开发过程中问题记录笔记

一、Model3A芯片介绍 Model3A是启明智显针对工业、行业以及车载产品市场推出的一款高性能、低成本的工业级HMI(Human-Machine Interface,人机界面)芯片。该芯片主要应用于工业自动化、智能终端HMI、车载仪表盘、两轮车彩屏仪表、串口屏、智能…

无人机航拍与ArcGIS融合实战:从地表观测到空间数据可视化的全方位指南!无人机图像拼接数据处理与分析、可视化与制图

目录 第一章 无人机航拍基本流程、航线规划与飞行实践 第二章 无人机图像拼接软件的学习与操作实践 第三章 无人机图像拼接典型案例详解 第四章 无人机图像拼接数据在GIS中的处理与分析 第五章 无人机图像拼接数据在GIS中的可视化与制图 第六章 综合案例:无人机航拍植被动…

Docker 部署 XXL-JOB

Docker 部署 XXL-JOB 目录 引言环境准备创建 MySQL 用户并授予权限使用 Docker 部署 XXL-JOB配置 XXL-JOB验证部署总结 1. 引言 XXL-JOB 是一个开源的分布式任务调度平台,旨在简化定时任务的管理和调度操作。其强大的功能和灵活性,使其在互联网公司和…

SSH 隧道方式连接 MySQL 服务器

SSH 隧道方式连接 MySQL 服务器 1 安装 MySQL 客户端工具1.1 Navicat1.2 MySQL Workbench1.2.1 查看本机系统类型1.2.2 安装 Visual C 20191.2.3 安装 MySQL Workbench 2 SSH 隧道方式连接数据库2.1 Navicat2.1.1 SSH 连服务器2.1.2 本地连数据库 2.2 MySQL Workbench 本文介绍…

云动态摘要 2024-08-12

给您带来云厂商的最新动态,最新产品资讯和最新优惠更新。 全球加速 GA - 新增“巴西(圣保罗)”、“沙特(利雅得)”接入点 华为云 2024-08-12 全球加速服务新增开通“巴西(圣保罗)”、“沙特&a…

BI奇点来临,AIChat打通数据消费“最后一公里”

“把数据用起来和用好”,这是企业数智化转型升级中的一大核心命题。但现实情况中,大部分企业在业务应用和数据消费中始终难以做到得心应手。 直到大模型的崛起,生成式AI技术展现出强大能力,为彻底打通数据消费“最后一公里”带来…

NUC 14 Pro+:灵感加速器,创意无界之旅

喜欢创作的友友们皆懂,灵感如流星,可遇不可求,当它闪烁在你的脑海中,需要即刻行动,将其化为现实。而NUC 14 Pro就将在这时,给予你独特的支持。 灵感火花,瞬间点燃 触摸NUC 14 Pro的轻薄机身&am…

新手常见错误:java.lang.NumberFormatException: For input string: “xxxx“

目录 ​编辑 故事背景 文言一心解答: 思考: 文心一言总结: 报错总结: 解决方案: 结语: 故事背景 写代码的时候遇到的报错 文言一心解答: 这个错误 java.lang.NumberFormatException:…

【后端记录】修复MySql的错误修改的数据记录【binlog修复】

前言 今天入门后端的时候,不小心改了非预期的数据,因为还没学到事务,所以恢复数据还比较麻烦,站在巨人的肩膀上还是解决了,原文连接在下面 https://blog.csdn.net/qq_42874315/article/details/140480570 解决办法 原…

Python光电光对光神经网络非相干光图像低维映射模拟

🎯要点 🎯光学神经网络非相干光图像处理 | 🎯光电光对光处理多层光学神经网络 | 🎯光图像传感器构建两层神经网络 | 🎯非相干光输入图像映射到低维空间 | 🎯多层非线性对比浅层线性光神经网络 | &#x1f…