《汇编语言》第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

相关文章

Mybatis Plus JSqlParser解析sql语句及JSqlParser安装步骤

《MybatisPlusJSqlParser解析sql语句及JSqlParser安装步骤》JSqlParser是一个用于解析SQL语句的Java库,它可以将SQL语句解析为一个Java对象树,允许... 目录【一】jsqlParser 是什么【二】JSqlParser 的安装步骤【三】使用场景【1】sql语

SpringBoot整合Sa-Token实现RBAC权限模型的过程解析

《SpringBoot整合Sa-Token实现RBAC权限模型的过程解析》:本文主要介绍SpringBoot整合Sa-Token实现RBAC权限模型的过程解析,本文给大家介绍的非常详细,对大家的学... 目录前言一、基础概念1.1 RBAC模型核心概念1.2 Sa-Token核心功能1.3 环境准备二、表结

Java 关键字transient与注解@Transient的区别用途解析

《Java关键字transient与注解@Transient的区别用途解析》在Java中,transient是一个关键字,用于声明一个字段不会被序列化,这篇文章给大家介绍了Java关键字transi... 在Java中,transient 是一个关键字,用于声明一个字段不会被序列化。当一个对象被序列化时,被

Java JSQLParser解析SQL的使用指南

《JavaJSQLParser解析SQL的使用指南》JSQLParser是一个Java语言的SQL语句解析工具,可以将SQL语句解析成为Java类的层次结构,还支持改写SQL,下面我们就来看看它的具... 目录一、引言二、jsQLParser常见类2.1 Class Diagram2.2 Statement

python进行while遍历的常见错误解析

《python进行while遍历的常见错误解析》在Python中选择合适的遍历方式需要综合考虑可读性、性能和具体需求,本文就来和大家讲解一下python中while遍历常见错误以及所有遍历方法的优缺点... 目录一、超出数组范围问题分析错误复现解决方法关键区别二、continue使用问题分析正确写法关键点三

使用Java实现Navicat密码的加密与解密的代码解析

《使用Java实现Navicat密码的加密与解密的代码解析》:本文主要介绍使用Java实现Navicat密码的加密与解密,通过本文,我们了解了如何利用Java语言实现对Navicat保存的数据库密... 目录一、背景介绍二、环境准备三、代码解析四、核心代码展示五、总结在日常开发过程中,我们有时需要处理各种软

Python多进程、多线程、协程典型示例解析(最新推荐)

《Python多进程、多线程、协程典型示例解析(最新推荐)》:本文主要介绍Python多进程、多线程、协程典型示例解析(最新推荐),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定... 目录一、multiprocessing(多进程)1. 模块简介2. 案例详解:并行计算平方和3. 实现逻

Spring Boot拦截器Interceptor与过滤器Filter深度解析(区别、实现与实战指南)

《SpringBoot拦截器Interceptor与过滤器Filter深度解析(区别、实现与实战指南)》:本文主要介绍SpringBoot拦截器Interceptor与过滤器Filter深度解析... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现与实

MyBatis分页插件PageHelper深度解析与实践指南

《MyBatis分页插件PageHelper深度解析与实践指南》在数据库操作中,分页查询是最常见的需求之一,传统的分页方式通常有两种内存分页和SQL分页,MyBatis作为优秀的ORM框架,本身并未提... 目录1. 为什么需要分页插件?2. PageHelper简介3. PageHelper集成与配置3.

SQL 外键Foreign Key全解析

《SQL外键ForeignKey全解析》外键是数据库表中的一列(或一组列),用于​​建立两个表之间的关联关系​​,外键的值必须匹配另一个表的主键(PrimaryKey)或唯一约束(UniqueCo... 目录1. 什么是外键?​​ ​​​​2. 外键的语法​​​​3. 外键的约束行为​​​​4. 多列外键​