《汇编语言》第3版 (王爽)实验7解析

2024-03-19 22:04

本文主要是介绍《汇编语言》第3版 (王爽)实验7解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

实验7 解析


实验7 寻址方式在结构化数据访问中的应用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
解析:
方法一:将每个数据项逐个进行传输,共有4个数据项(分别是年份、收入、雇员数、人均收入)人均收入需要计算后得到,每个数据项又有21个元素,所以需要传输21次

assume cs:codedata segmentdb '1975','1976','1977','1978','1979','1980','1981','1982','1983'db '1984','1985','1986','1987','1988','1989','1990','1991','1992'db '1993','1994','1995'dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226dw 11542,14430,15257,17800
data endstable segmentdb 21 dup ('year summ ne ?? ')
table endscode segmentstart:mov ax,datamov ds,ax ;ds指向datamov ax,tablemov es,ax ;es指向tablemov si,0 mov di,0mov bx,0;转移年份mov cx,21 ;一共21个年份year:mov ax,ds:[si] ;将数据中的年份低16位取出放入ax中mov es:[bx],ax ;将ax中的数据放入table中mov ax,ds:[si+2]  ;将数据中的年份高16位取出放入ax中mov es:[bx+2],ax  ;将ax中的数据放入table中add si,4 ;si+4指向下一个年份add bx,16 ;bx+16指向下一个数组loop year ;转移到year;转移收入mov bx,0mov di,5 ;设定table存放收入的起始地址mov cx,21 
income:mov ax,ds:[si] ;转移收入低16位mov es:[bx+di],axmov ax,ds:[si+2] ;转移收入高16位mov es:[bx+di+2],axadd bx,16 ;bx+16指向下一组数据add si,4  ;si+4指向下一个收入loop income ;转移到income;转移雇员数mov bx,0mov di,10 ;设定table存放雇员数的起始地址mov cx,21Num:mov ax,ds:[si] ;转移雇员数(只有两字节,所以使用ax传输一次即可)mov es:[bx+di],axadd bx,16 ;bx+16指向下一组数据add si,2 ;si+2指向下一个雇员数loop Num;计算人均收入mov bx,0mov cx,21pcome:mov ax,es:[bx+5] ;16位放入ax中mov dx,es:[bx+5+2] ;16位放入dx中div word ptr es:[bx+10] ;除以人数mov es:[bx+13],ax ;商存放在ax中add bx,16 loop pcomemov ax,4c00hint 21hcode endsend start

方法二:一次传输一组数据,一共传输21次

assume cs:codedata segmentdb '1975','1976','1977','1978','1979','1980','1981','1982','1983'db '1984','1985','1986','1987','1988','1989','1990','1991','1992'db '1993','1994','1995'dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226dw 11542,14430,15257,17800
data endstable segmentdb 21 dup ('year summ ne ?? ')
table endscode segment
start:mov ax,datamov ds,ax  ;ds指向datamov ax,tablemov es,ax  ;es指向tablemov si,0mov di,0mov bx,0mov cx,21 ;一个21组数据s:;转移年份(4字节)mov ax,ds:[si] ;转移年份低16位mov es:[bx],axmov ax,ds:[si+2] ;转移年份高16位mov es:[bx+2],ax;转移收入(4字节)mov ax,ds:[si+84] ;转移收入低16位mov es:[bx+5],axmov ax,ds:[si+84+2] ;转移收入高16位mov es:[bx+7],ax;转移雇员数(2字节)mov ax,ds:[168+di] ;转移雇员数(只有2字节,所以使用ax转移一次即可)mov es:[bx+10],ax;计算人均收入(2字节)mov ax,es:[bx+5] ;将收入的低16位放入ax中mov dx,es:[bx+5+2] ;将收入的高16位放入dx中div word ptr es:[bx+10] ;除以雇员数mov es:[bx+13],ax ;将商保存(除法后商存放在ax中)add di,2 ;di+2指向下一个雇员数add si,4 ;si+4指向下一个年份和收入add bx,16 ;bx+16指向下一组数据loop smov ax,4c00hint 21hcode ends
end start

将上面程序在DOS中运行后效果如下:
在这里插入图片描述
在这里插入图片描述

这篇关于《汇编语言》第3版 (王爽)实验7解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/827364

相关文章

MySQL中FIND_IN_SET函数与INSTR函数用法解析

《MySQL中FIND_IN_SET函数与INSTR函数用法解析》:本文主要介绍MySQL中FIND_IN_SET函数与INSTR函数用法解析,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一... 目录一、功能定义与语法1、FIND_IN_SET函数2、INSTR函数二、本质区别对比三、实际场景案例分

Java图片压缩三种高效压缩方案详细解析

《Java图片压缩三种高效压缩方案详细解析》图片压缩通常涉及减少图片的尺寸缩放、调整图片的质量(针对JPEG、PNG等)、使用特定的算法来减少图片的数据量等,:本文主要介绍Java图片压缩三种高效... 目录一、基于OpenCV的智能尺寸压缩技术亮点:适用场景:二、JPEG质量参数压缩关键技术:压缩效果对比

关于WebSocket协议状态码解析

《关于WebSocket协议状态码解析》:本文主要介绍关于WebSocket协议状态码的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录WebSocket协议状态码解析1. 引言2. WebSocket协议状态码概述3. WebSocket协议状态码详解3

CSS Padding 和 Margin 区别全解析

《CSSPadding和Margin区别全解析》CSS中的padding和margin是两个非常基础且重要的属性,它们用于控制元素周围的空白区域,本文将详细介绍padding和... 目录css Padding 和 Margin 全解析1. Padding: 内边距2. Margin: 外边距3. Padd

Oracle数据库常见字段类型大全以及超详细解析

《Oracle数据库常见字段类型大全以及超详细解析》在Oracle数据库中查询特定表的字段个数通常需要使用SQL语句来完成,:本文主要介绍Oracle数据库常见字段类型大全以及超详细解析,文中通过... 目录前言一、字符类型(Character)1、CHAR:定长字符数据类型2、VARCHAR2:变长字符数

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

Springboot @Autowired和@Resource的区别解析

《Springboot@Autowired和@Resource的区别解析》@Resource是JDK提供的注解,只是Spring在实现上提供了这个注解的功能支持,本文给大家介绍Springboot@... 目录【一】定义【1】@Autowired【2】@Resource【二】区别【1】包含的属性不同【2】@

SpringCloud动态配置注解@RefreshScope与@Component的深度解析

《SpringCloud动态配置注解@RefreshScope与@Component的深度解析》在现代微服务架构中,动态配置管理是一个关键需求,本文将为大家介绍SpringCloud中相关的注解@Re... 目录引言1. @RefreshScope 的作用与原理1.1 什么是 @RefreshScope1.

Java并发编程必备之Synchronized关键字深入解析

《Java并发编程必备之Synchronized关键字深入解析》本文我们深入探索了Java中的Synchronized关键字,包括其互斥性和可重入性的特性,文章详细介绍了Synchronized的三种... 目录一、前言二、Synchronized关键字2.1 Synchronized的特性1. 互斥2.

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI