当前位置: 首页 > news >正文

汇编程序:查找数组中最大最小值

实验内容

1. 从数据段DS中包含9个字节的数组数据VALUE中分别找出最大值(存到max中)、最小值(存到min中)。

2. 能够单步执行程序,认真观察、判断每条指令执行的结果是否正确,对错误结果,能够做出相应的处理。

实验步骤

(1)启动“emu8086”软件。

(2)输入源程序并存盘为*.asm文件。

(3)编译、链接、运行程序并查看实验结果。

(4)实验报告要求附上程序代码,并记录运行结果。

模拟C语言的for循环遍历数组,比对最大值最小值

程序代码

code1

这段程序是边检索边手搓的,不会将字符显示在显示屏上

DATAS	SEGMENT    ;定义数据段X DW 5,2,3,4,12,6,7,8,9,5  ;定义10个数MAX DW ?	;存放最大值MIN DW ?	;存放最小值,定义成?	不确定大小
DATAS	ENDS    ;定义数据段结束  ends与segment成对出现 STACK	SEGMENT    	;定义堆栈段;DW 20 DUP(0)    ;为堆栈段分配空间
STACK    ENDS   	;定义堆栈段结束CODE   SEGMENT    	;定义代码段ASSUME CS:CODE, DS:DATAS, SS:STACK    ;告诉编译器将段寄存器与符号对应起来
START:				;程序入口	起始地址标号,名称可以自己取MOV AX, DATAS	;取DATA段地址给AXMOV DS, AX		;将段地址DATAS送入DS中 初始化DS段地址,建立CS与DS段联系 MOV DI,OFFSET X	;DI 变址寄存器   ,取X地址?MOV AX,[DI] 	;将段地址为 DS 偏移地址为 DI 的内存单元中的值移入 AX 中MOV MIN,AX   	;存第一个数,当做默认最大值MOV MAX,AX		;存第一个数,当做默认最小值MOV CX,9		;设定循环次数9, 一共10个数,减去一个默认值,还需要循环9次Loop_Max_Min:	;循环判断最大值、最小值INC DIINC DI 		;DI += 2,DW类型,一个字=两个字节,所以要加两次MOV AX, [DI];将段地址为 DS 偏移地址为 DI 的内存单元中的值移入 AX 中  CMP AX, MAX	;CMP指令,不回送结果,只影响标志位状态JG MAX_Reload	;有符号AX>MAX, 跳转到 MAX_RELOAD CMP AX, MIN	;只影响标志位状态JL MIN_Reload	;有符号 AX<=MIN, 跳转到 MIN_ReloadJG LOOP_Judge	;加一句判断,比最大的小,比最小的大的情况,直接跳转到 Loop_Max_Min,避免顺序执行给MAX变量赋值!MAX_Reload:MOV MAX, AX	;将最大值赋值给MAXJMP LOOP_Judge	;跳转到判断是否继续循环MIN_Reload:MOV MIN, AX	;将最小值赋值给MINJMP LOOP_Judge LOOP_Judge:	LOOP Loop_Max_Min	        ;判断CX,如果大于0就继续循环    MOV AH, 4CH    ;返回DOS系统INT 21H
CODE    ENDS    		;定义代码段结束END    START    	;程序结束

复制代码,模拟,变量,运行

点击变量会弹出一个变量框

运行(run)

修改MAX和MIN的显示类型

数据段的定义:X DW 5,2,3,4,12,6,7,8,9,5  ;定义10个数

最大是12,最小是2

验证正确,代码没有问题~

code2

第二个思路

并且可以将最大值最小值输出在屏幕上

DATA SEGMENT ;数据段VALUE DB 13,8,36,66,56,65,12,15,24VALNUM EQU $-VALUE	;取地址$ P132   $- 是取长度MAX DB 0 ;定义最大值 8位数据MIN DB 0 ;定义最小值MAX1 DB 'MAX = $'MIN1 DB 'MIN = $' CHANGELINE DB 13,10,'$';用来表示换行符 
DATA ENDS          CODE SEGMENT ;代码段ASSUME CS:CODE, DS:DATA
START:MOV AX,DATAMOV DS,AXCLD ; DF=0LEA SI,VALUE ;取VALUE地址MOV AH,[SI] MOV MAX,AH ;赋初值MOV MIN,AHINC SIMOV CX,VALNUM-1 ;循环次数
NEXTMAX:LODSB ;串读取指令,将SI指向的内容读入AL,并且SI自加CMP AL,MAX ;与最大值比较JBE TOZUIXIAO ;小于等于最大值,跳转到和最小值比较MOV MAX,AL    ;否则顺序执行,赋值给MAX
TOZUIXIAO:CMP AL,MIN ;和最小值比较JAE NEXT   ;如果大于等于最小值,跳转到下一次循环MOV MIN,AL ;否则顺序执行,赋值给MIN
NEXT:LOOP NEXTMAX  ;判断CX,如果大于0就继续循环    ;如果循环完成,就执行下面显示输出的语句    MOV DX,OFFSET MAX1 ;存放MAX1字符串偏移地址MOV AH,09H	;09H字符串输出 INT 21H MOV AL, MAX ;输出最大值,先将最大值赋值给ALCALL DISPLAY   ;调用DISPLAY MOV DX,OFFSET CHANGELINE  ;输出换行符MOV AH,9INT 21HMOV DX,OFFSET MIN1MOV AH,09HINT 21HMOV AL, MIN  ;最小值赋值给ALCALL DISPLAY MOV AH,4CH	;返回DOSINT 21H;在屏幕上输出
DISPLAY:PUSH BX ;压入堆栈保护PUSH CX;数位分离,分别显示个位十位MOV AH,0MOV BL,10DIV BL  ; AX/10,商送AL余数送AHXCHG AL,AH  ;一条语句实现交换AL与AH内容OR AX,3030H ;或3030H,将数字转ASCII码MOV CX,AXMOV DL,CH  ;AH送DLMOV AH,02H ;单字符显示DL的内容INT 21HMOV DL,CL   ;AL送DLMOV AH,02H  ;单字符显示DL的内容INT 21H POP CX ;先出POP BX
RETCODE ENDS 
END START 

 

  • 编程思路:
    寻找9个数的最大值最小值的思路,先用第一个数赋初始值,赋给MAX和MIN,取下一个数和最大值比较,如果小于等于最大值就跳转到比较最小的程序,否则赋值给MAX,在比较最小的程序里,如果大于等于最小,就执行下一次循环比较,否则赋值给MIN,依次循环遍历8次,即可找出最大值与最小值。
  • 程序编写:
    段定义:段定义语句后面要加SEGMENT,段定义结束语句后面要加ENDS
    定义变量:定义需要用到的变量,可以边写边定义。
    段分配:用符号把段定义完成后还需要用ASSUME声明,将段寄存器与符号对应起来。
    模块化:将输出显示的部分,封装成一个子函数。
  • Debug:
    运行代码输出MAX=36MIN=36,输出显示有问题,可能是比较大小的程序部分出错,也可能是显示出错,再次运行代码,查看每个变量的值,发现MAX和MIN的数值是正确的,说明比较大小部分的代码正确,那问题就是显示输出有问题,既然能在终端显示36说明可以输出数字,只是输出的数字不对,查看代码,输出最大值最小值的时候,并没有赋要显示的值,在CALL DISPLAY语句前面加上要显示的变量即可。

相关文章:

汇编程序:查找数组中最大最小值

实验内容 1. 从数据段DS中包含9个字节的数组数据VALUE中分别找出最大值&#xff08;存到max中&#xff09;、最小值&#xff08;存到min中&#xff09;。 2. 能够单步执行程序&#xff0c;认真观察、判断每条指令执行的结果是否正确&#xff0c;对错误结果&#xff0c;能够做出…...

ElasticSearch之禁用交换分区

操作系统将进程加载至内存中执行时&#xff0c;对于当前未使用到的内存页&#xff0c;可能会将相关内存页交换至硬盘上&#xff0c;即swap。 对于性能敏感、时延敏感的应用程序比如ElasticSearch&#xff0c;swap特性会明显影响性能和稳定性&#xff0c;因此最好禁用swap特性。…...

【Linux】第二十一站:文件(一)

文章目录 一、共识原理二、C系列文件接口三、从C过渡到系统&#xff1a;文件系统调用四、访问文件的本质 一、共识原理 文件 内容 属性 文件分为打开的文件 和 没打开的文件 打开的文件&#xff1a;是谁打开的&#xff1f;是进程&#xff01;----所以研究打开的文件本质是研…...

centos7 docker开启认证的远程端口2376配置

docker开启2375会存在安全漏洞 暴露了2375端口的Docker主机。因为没有任何加密和认证过程&#xff0c;知道了主机IP以后&#xff0c;&#xff0c;任何人都可以管理这台主机上的容器和镜像&#xff0c;以前贪图方便&#xff0c;只开启了没有认证的docker2375端口&#xff0c;后…...

Java王者荣耀小游戏

Background类 package LX;import java.awt.*; //背景类 public class Background extends GameObject{public Background(GameFrame gameFrame) {super(gameFrame);}Image bg Toolkit.getDefaultToolkit().getImage("C:\\Users\\ASUS\\Desktop\\王者荣耀图片\\Map.jpg&…...

谈谈Redis的几种经典集群模式

目录 前言 主从复制 哨兵模式 分片集群 前言 Redis集群是一种通过将多个Redis节点连接在一起以实现高可用性、数据分片和负载均衡的技术。它允许Redis在不同节点上同时提供服务&#xff0c;提高整体性能和可靠性。在Redis中提供集群方案总共有三种&#xff1a;主从复制、…...

【腾讯云 HAI域探秘】基于高性能应用服务器HAI部署的 ChatGLM2-6B模型,我开发了AI办公助手,公司行政小姐姐用了都说好!

目录 前言 一、腾讯云HAI介绍&#xff1a; 1、即插即用 轻松上手 2、横向对比 青出于蓝 3、多种高性能应用部署场景 二、腾讯云HAI一键部署并使用ChatGLM2-6B快速实现开发者所需的相关API服务 1、登录 高性能应用服务 HAI 控制台 2、点击 新建 选择 AI模型&#xff0c;…...

服务器tar压缩解压文件

文章目录 一、前言二、命令2.1、解压2.2、压缩 三、最后 一、前言 前端上传dist代码到服务器上后&#xff0c;是在linux上操作&#xff0c;所以和window有所不同。一般是打好dist&#xff0c;然后压缩成gz传输到服务器&#xff0c;此时在服务器上可能涉及到解压和压缩的操作&a…...

博物馆线上导览系统的设计与实现-计算机毕业设计源码64574

摘 要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认识&#xff0c;科学化的管理&#xff0c;使信息存…...

vue升级题

不熟悉的&#xff1a; 2&#xff0c; 3.你用过befcoreDetory 吗&#xff1f;清除定时器&#xff0c;第一个和第二个再看一下 实例加载完成是在哪个生命周期--beforecreate 7.父子组件生命周期执行顺序&#xff1f;为什么这么渲染&#xff1f;场景 8.简单描述每个周期具体适…...

Edit And Resend测试接口工具(浏览器上的Postman)

优点 可以不用设置Cookie或者Token&#xff0c;只设置参数进行重发接口测试API 使用Microsoft Rdge浏览器 F12——然后点击网络——在页面点击发起请求——然后选择要重发的请求右键选择Edit And Resend——在网络控制台设置自己要设置的参数去测试自己写的功能...

maven常用打包命令,值传递和引用传递,Java包 ,JDK 中常用的包有哪些,import java和javax有什么区别

文章目录 maven常用打包命令Java程序设计语言对对象采用的不是引用调用&#xff0c;实际上&#xff0c;对象引用是按值传递的。值传递和引用传递有什么区别Java包 &#xff0c;JDK 中常用的包有哪些import java和javax有什么区别 谈谈java基础的内容&#xff0c;而且很多人都回…...

【c++随笔14】虚函数表

【c随笔14】虚函数表 一、虚函数表&#xff08;Virtual Function Table&#xff09;1、定义2、查看虚函数表2.1、 问题&#xff1a;三种类型&#xff0c;包含一个int类型的class、一个int类型的变量、int类型的指针&#xff1a;这三个大小分别是多少呢&#xff1f;2.2、怎么发现…...

分布式链路追踪实战篇-日志库集成opentelemetry的思路

由上文分布式链路追踪入门篇-基础原理与快速应用可以知道分布式链路追踪的作用&#xff0c;但是距离应用到项目中&#xff0c;我们还需要对项目中一些关键组件进行opentelemetry的集成&#xff0c;例如日志库&#xff0c;ORM、http框架、rpc框架等。 一、日志库如何集成opentel…...

电脑投屏到电视的软件,Mac,Linux,Win均可使用

电脑投屏到电视的软件&#xff0c;Mac&#xff0c;Linux&#xff0c;Win均可使用 AirDroid Cast的TV版&#xff0c;可以上笔记本电脑或台式电脑直接投屏到各种安卓电视上。 无线投屏可以实现本地投屏及远程投屏&#xff0c;AirPlay协议可以实现本地投屏&#xff0c;大家可以按需…...

基于vue+element-plus+echarts编写动态绘图页面

我们都知道网页的echarts可以画图&#xff0c;但是很多情况下都需要编码实现绘图逻辑&#xff0c;如果有一个前端页面可以让我输入数据然后动态生成图表的话那么该多好&#xff0c;其实这个需求不难实现&#xff0c;先看效果。 整体页面分为左右两个部分&#xff0c;其中左边的…...

无人机巡检如何做到实时识别,从数据到模型全流程解读

在数字化和自动化飞速发展的今天&#xff0c;AI识别算法正在加速进入行业生产系统。 基于巡检数据的智能开发&#xff0c;识别算法突破性进展的核心驱动力在于需求——从全天候巡视的平安城市&#xff0c;到潮汐变化的交通网络&#xff0c;从广阔的水域&#xff0c;到繁忙的街道…...

zlmediakit实现rtsp流服务器

本次实现是将内存中的H264数据经过zlmediakit实现为rtsp流。 我是用的是CAPI的方式&#xff0c;将zlmediakit作为一个sdk嵌入到自己的程序中而不是作为一个独立的进进程服务。 1.编译完成zkmedialit后会得到bin include lib三个文件夹如图 其中bin中的MediaServer是作为独立的…...

保姆级 ARM64 CPU架构下安装部署Docker + rancher + K8S 说明文档

1 K8S 简介 K8S是Kubernetes的简称&#xff0c;是一个开源的容器编排平台&#xff0c;用于自动部署、扩展和管理“容器化&#xff08;containerized&#xff09;应用程序”的系统。它可以跨多个主机聚集在一起&#xff0c;控制和自动化应用的部署与更新。 K8S 架构 Kubernete…...

耶鲁博弈论笔记

编辑记录&#xff1a; 1126&#xff1a;开个新坑&#xff0c;耶鲁大学的博弈论课程&#xff0c; 和专业相关不大&#xff0c;纯兴趣&#xff0c;尽量写好一点吧 1. 首先指出博弈论是一种研究策略形式的方法&#xff0c;对于经济学中&#xff0c;完全竞争市场只能被动接受均衡…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

ES6从入门到精通:前言

ES6简介 ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript语言的重大更新&#xff0c;引入了许多新特性&#xff0c;包括语法糖、新数据类型、模块化支持等&#xff0c;显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

Android15默认授权浮窗权限

我们经常有那种需求&#xff0c;客户需要定制的apk集成在ROM中&#xff0c;并且默认授予其【显示在其他应用的上层】权限&#xff0c;也就是我们常说的浮窗权限&#xff0c;那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...