汇编语言:寻址方式在结构化数据访问中的应用——计算人均收入

有一年多没有在CSDN上发博文了。人的工作重心总是有转移的,庆幸一直在做着有意义的事。
  今天的内容,是为汇编语言课程更新一个实验项目。
  
  本方案修改自王爽编《汇编语言》第4版P172“实验7寻址方式在结构化数据访问中的应用”

【数据描述】

烟园科技公司从2004年成立一直到2023年的基本情况如下。

年份总收入(万元)雇员(人)人均收入(万元)
2004227?
20053829?
2006135613?
2007239028?
2008800038?
……
2023593700017800?

下面的程序中,已经定义好了这些数据:

assume cs:codesg
data segmentdb '2004','2005','2006','2007','2008','2009','2010','2011','2012','2013'db '2014','2015','2016','2017','2018','2019','2020','2021','2022','2023';以上是表示20年的20个字符串dd 22,382,1356,2390,8000,16000,24486,50065,97479,140417dd 197514,345980,590827,803530,1183000,1843000dd 2759000,3753000,4649000,5937000;以上是表示20年公司总收入的20个dword型数据dw 7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226dw 11542,14430,15257,17800;以上是表示20年公司雇员人数的20个word型数据
data ends
table segmentdb 20 dup('year summ ne ??')
table ends`

【任务】

请编程序,将data段中的数据按如下格式整理到table段中,并计算20年中的人均收入(取整),记录到table段的相应位置上。
  在table段中,一年的数据占16个字节,各字节分配如下表所示。
在这里插入图片描述
说明:与教材中提供的方案相比,每一部分的偏移地址为偶数,是更有效率的解决方案,而预留“保留”空间,既能让每一条记录所点空间保持16的倍数上(这是一个很好的特征),也为系统未来扩充等提供方便。

【提示】

①要做的工作主要是将data段中的数据复制到table段中,类似将数据做一个“扭转”;
②可将data段中的数据看成是多个数组,用DS指标该数据段,而将table中的数据看成是一个结构型数据的数组,每个结构型数据中包含多个数据项,用ES指示该数据段;
③寻址方式建议:可用bx定位每个结构型数据,用idata定位数据项,用si定位数组项中的每个元素,对于table中的数据的访问可采用[bx].idata和[bx].idata[si]的寻址方式;
④程序结构方面:可以将程序分为四块,分别用四个循环处理——复制年份、复制总收入、复制雇员数、计算人均收入,当然,这四个循环可以合并以提高效率。

【参考解答】

assume cs:codesg, ds:data
data segmentdb '2004','2005','2006','2007','2008','2009','2010','2011','2012','2013'db '2014','2015','2016','2017','2018','2019','2020','2021','2022','2023';以上是表示20年的20个字符串dd 22,382,1356,2390,8000,16000,24486,50065,97479,140417dd 197514,345980,590827,803530,1183000,1843000dd 2759000,3753000,4649000,5937000;以上是表示20年公司总收入的20个dword型数据dw 7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226dw 11542,14430,15257,17800;以上是表示20年公司雇员人数的20个word型数据
data endstable segmentdb 20 dup('YearSummNeAv????')
table ends;定义代码段
codesg segment
start: mov ax, datamov ds, axmov ax, tablemov es, ax;复制年份mov cx, 20mov si, 0   ;data段的数据项mov bx, 0   ;table段年份的起始偏移地址
s1:mov ax, [si]      ;取data段中年份的前两字节mov es:[bx], ax   ;向table中复制年份的前两字节mov ax,[si+2]     ;取data段中年份的后两字节mov es:[bx+2], ax ;向table中复制年份的后两字节add si, 4         ;指向data段的下一个数据项add bx, 16        ;指向table中下一年的位置loop s1;复制总收入mov cx, 20mov si, 0   ;data段的数据项mov bx, 4   ;table段总收入的起始偏移地址
s2:mov ax, [si+80]      ;取data段中总收入的前两字节mov es:[bx], ax      ;向table中复制总收入的前两字节mov ax,[si+82]       ;取data段中总收入的后两字节mov es:[bx+2], ax    ;向table中复制总收入的后两字节add si, 4            ;指向data段的下一个数据项add bx, 16           ;指向table中下一年的位置loop s2;复制雇员人数mov cx, 20mov si, 0   ;data段的数据项mov bx, 8   ;table段雇员人数的起始偏移地址
s3:mov ax, [si+160]     ;取data段中雇员人数mov es:[bx], ax      ;向table中复制雇员人数的前两字节add si, 2            ;指向data段的下一个数据项add bx, 16           ;指向table中下一年的位置loop s3;计算人均收入mov cx, 20mov bx, 0   ;table段雇起始偏移地址
s4:mov ax, es:[bx+4]      ;取总收入低16位mov dx, es:[bx+6]      ;取总收入高16位div word ptr es:[bx+8] ;除以雇员数,完成除法,商存放在AX中mov es:[bx+10], ax     ;存储人均收入add bx, 16             ;指向table中下一年的位置loop s4mov ax,4c00hint 21h
codesg ends
end start

下面是程序运行后看到的一部分数据:
在这里插入图片描述

【进一步改进】

参考解答中使用了并行的4个循环。观察到循环中寻址方式一致,将循环适当合并,是可能且会获得效率上提升的。
  用这个结构试着通思路,再改进出更高效率的解决方案,值得同学们一试。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【御控物联】JavaScript JSON结构转换(22):小结

文章目录 一、结语二、接下来……三、在线转换工具四、技术资料 一、结语 《JavaScript JSON结构转换》主题自24.03.25至24.XX.XX历时XX天,共计编写 XX篇(XX篇功能说明XX篇场景)。 在此我们对《JavaScript JSON结构转换》功能做一下总结! 在JSON结构转…

文件上传【1】

1.文件上传更改上传类型 上传文件时存在上传类型固定(jpg、png、gif)如果是前端确定(弹窗,后端未出现请求确定是前端)只需要在设置中禁用js代码或抓包更改文件后缀名就可以上传其他类型的文件(亦可用于复制…

使用在对讲机上的国产芯片D4890介绍

1、D4890 目前客户主要使用在对讲机上 2、推荐的应用线路图如下: 3、实际测试输出波形如下(VCC4.5V,RL=8Ω): 4、结论:我司推荐的 D4890 可满足客户的使用要求。

从300亿分子中筛出6款,结构新且易合成,斯坦福抗生素设计AI模型登Nature子刊

ChatGPT狂飙160天,世界已经不是之前的样子。 新建了免费的人工智能中文站https://ai.weoknow.com 新建了收费的人工智能中文站https://ai.hzytsoft.cn/ 更多资源欢迎关注 全球每年有近 500 万人死于抗生素耐药性,因此迫切需要新的方法来对抗耐药菌株。 …

基于巴法云物联网云平台构建可视化控制网页(以控制LED为例)

0 前言 如今大大小小的物联网云平台非常多,但大部分要收取费用,免费的物联网云平台功能则有很多限制使用起来非常不方便。以百度云物联网云平台为例,它的物可视不支持发布主题,等于可视化界面只能作为数据监控而不具备双向通信的…

练习题(2024/4/6)

1最接近的三数之和 给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。 返回这三个数的和。 假定每组输入只存在恰好一个解。 示例 1: 输入:nums [-1,2,1,-4], target …

cJSON(API的详细使用教程)

我们今天来学习一般嵌入式的必备库,JSON库 1,json和cJSON 那什么是JSON什么是cJSON,他们之间有什么样的关联呢,让我们一起来探究一下吧。 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式&…

特征提取算法

特征提取算法 0. 写在前边1. Harris算法1.1 写在前面1.2 Harris算法的本质1.3 Harris算法的简化 2. Harris3D2.1 Harris3D算法问题定义2.2 Harris3D with intensity2.3 Harris3D without intensity 3. ISS特征点的应用 0. 写在前边 本篇将介绍几种特征提取算法,特征…

ASP.Net添加Swagger注释

文章目录 Swagger添加Swagger注释 Swagger 添加Swagger注释 1、右击项目->选择属性->点击生成->输出,选中文档文件 2、配置服务 在program.cs 文件里配置SwaggerUI //增加项一 builder.Services.AddSwaggerGen(c> {c.SwaggerDoc("v1", ne…

前端开发学习笔记 3 (Chrome浏览器调试工具、Emmet语法、CSS复合选择器、CSS元素选择模式、CSS背景)

文章目录 Chrome浏览器调试工具Emmet语法CSS复合选择器后代选择器子选择器并集选择器伪类选择器 CSS元素选择模式元素选择模式概述CSS块标签CSS行内标签CSS行内块标签CSS元素显示模式转换 CSS背景CSS背景颜色CSS背景图片CSS背景图片平铺CSS背景图片位置CSS背景图片固定CSS背景复…

AWS的优劣势分析,适用于哪些行业?

AWS相较于其他云厂商,起步早,产品成熟及涉及范围广,具有高度适配性,多年来一直引领着IaaS市场,服务器的可用性比其他的云厂商要高,并且在全球25个地区拥有81个可用性区域,基本上辐射范围已经涵盖…

【javaWeb补充篇配置Bean】XML配置Bean

XML配置bean 配置BeanBean的声明周期bean的销毁时机 依赖注入方式自动装配集合注入加载properties文件容器类层次结构图 配置Bean 以配置文件的形式配置Bean 在资源目录下创建.xml文件进行对Bean的配置 在创建文件之前还首先需要引入spring中spring-context的依赖 <depende…