编写一个汇编语言程序,完成以下要求。从BUF单元处定义有10个带符号字数据:-1,3,24,94,62,72,55,0,-48,99,试找出他们中的最大值和平均值,并以此分别存放至该数据区的后两个单元

编写一个汇编语言程序,完成以下要求。从BUF单元处定义有10个带符号字数据:-1,3,24,94,62,72,55,0,-48,99,试找出他们中的最大值和平均值,并以此分别存放至该数据区的后两个单元中(假设这10个数的和值不超过16位范围)

P176
4.12

编程思路:首先DATA段中,定义BUF为DW数据类型,因为存在带符号字数据,N为记录BUF的数据总个数,MAX为DW数据类型存放最大值,AVE为DB数据类型且占用两个物理单元,分别存放平均值的整数部分和小数部分;接着,使用SI获取BUF的有效地址,AX存放以次存放BUF中的数据,并且与下一个数据进行比较大小,若AX小于[SI]则将大的值[SI]赋值给AX,否则进行[SI+2]下一个数据进行与AX比较,AX始终存放BUF数据中的最大值;CX存放数据的总个数,DX依次存放BUF的数据相加之和;最后,将总数据之和/总个数=商(平均分的整数部分)存放在AVE中,余数(平均分的小数部分)存放在AVE+1中。

代码如下:

DATA	SEGMENT
BUF	DW -1,3,24,94,62,72,55,0,-48,99
N	EQU	($-BUF)/2	;由于定义的BUF为DW字类型,每个数据占两个物理单元,最后个数除以二,这里的N为BUF的长度
MAX	DW	?			;用于存放BUF中最大的数据值
AVE	DB	?	?		;由于题目规定平均值需要存放在最大值后,定义两个DB类型,第一个存放商(平均值的整数部分),第二个存放余数(平均值的小数部分)
DATA	ENDS
CODE	SEGMENTASSUME	CS:CODE,DS:DATA
START:	MOV	AX,DATA	;由于DATA为立即数,DS为段寄存器,立即数不能直接给段寄存器赋值,需要引用AX通用寄存器MOV	DS,AX	;通用寄存器赋值给段寄存器LEA	SI,BUF	;LEA取有效地址指令。将源操作数的有效地址送到指令中指定的寄存器中,源操作数只能是存储器操作数,目的操作数只能是16位的通用寄存器CLC			;标志位操作指令CLC。CF=0,使进位标志位CF清零XOR	AX,AX	;AX清零操作XOR	DX,DX	;DX清零操作MOV	AX,[SI]	;将SI内容赋值给AX,即BUF中的内容,由于AX为16位通用寄存器,且BUF也为DW类型,一个数据占两个物理单元,即该指令操作是正确合法的MOV	CX,N	;CX为循环次数/BUF存放的数据个数
NEXT:	ADC	DX,[SI]	;由于BUF单元处定义的是带符号字数据,进行运算的时候需要相加,所以要使用ADC带进位的加法指令 即DX为所有数相加之后的和 用来存放最后的和的结果CMP	AX,[SI]	;比较AX和[SI]中的大小JGE	GOON	;若AX>=[SI]跳转大GOON标签处,否则执行下一条指令 即AXMOV	AX,[SI]	;执行到此条指令表[SI]要比AX大,需要将数值大的[SI]存到AX中,使得AX始终存放最大值
GOON:	ADD	SI,2	;由于BUF为DW数据类型,所以需要SI+2才可以指向下一个数据LOOP NEXT	;CX-1,若CX≠0,跳转 即接着比较下一个数MOV	MAX,AX	;执行到此指令表示数据已经全部比较完成,最大值存放在AX中MOV	BL,N	;BL为BUF的数据总个数MOV	AX,DX	;将最后的所有数据的和的结果赋值给AXIDIV BL		;IDIV带符号的除法指令 隐含被除数为AX(存放着所有数的总和) 商为AL 余数为AHMOV	AVE,AL	;将商(平均分的整数部分)赋值给AVEMOV	AVE+1,AH;由于AVE为DB数据类型,下一个存储单元+1即可,将AH余数(平均分的小数部分)赋值给AVE+1MOV	AH,4CH	;DATA	SEGMENT
string	DB	"Hello World!"	;将需要转换的字符串存放到string中,定义类型为DB型
LEN EQU $-string			;等值伪指令EQU,将LEN表示string的长度
DATA	ENDS
CODE	SEGMENTASSUME	CS:CODE,DS:DATA
START:	MOV	AX,DATA	;由于DATA为立即数,不能用赋值给段寄存器DS,需要借助AX通用寄存器MOV	DS,AX	;将AX赋值给DSMOV	BX,OFFSET string	;BX获取string的有效地址用于取出string中的字符串MOV	CL,LEN	;CL为string字符串的长度
NEXT:	MOV	AL,[BX]	;此时[BX]为string所存放字符串的内容,赋值给ALCMP	AL,'a'	;由于是DB字节类型,只需要将AL的一个字节单元与单个字符'a'进行比较JB	LOP		;JB为小于跳转,即AL存放的字节单元的内容所对应的ASCII码值小于'a'所对应的ASCII码值,跳转到LOP标签处 否则不跳转执行下一条指令CMP	AL,'z'	;若执行到此条指令,代表AL>='a',接下来需要与'z'进行比较即可JA	LOP		;JA为大于跳转,即AL存放的字节单元的内容所对应的ASCII码值大于'z'所对应的ASCII码值,跳转到LOP标签处 否则不跳转执行下一条指令  SUB	AL,20H	;执行到此条指令,表示以及确定此时的AL为小写字母,AL-20H表示将小写字母转换为所对应的大写字母(小写字母比对应的大写字母的ASCII码值大20H)MOV	[BX],AL	;将小写字母转换为对应的大写字母结束后,结果AL存放回原来的物理地址[BX]处
LOP:	INC	BX		;BX+1(因为DB字节类型),表示判断下一个字节单元存放的字符串DEC	CL		;CL-1,表示字符串string所需要判断字符的长度减一JNZ	NEXT	;若CL不为0,即字符串string仍有需要判断的字符,跳转到NEXT标签处MOV	AH,4CH	;调用4CH号功能,返回DOS操作系统INT	21H		;终止当前程序的运行,并返回DOS系统
CODE	ENDSEND	START

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

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

相关文章

prototype 的ajax

原文:http://www.prototypejs.org/learn/introduction-to-ajax]翻 译:www.ruby-china.cn 站长]Prototype框架提供了非常容易和有意思的方法处理Ajax的调用,同时它也是浏 览器安全的 。除了简单的请求外,这个模块(指pro…

汇编语言-018(FLD 、FST、FSTP、FCHS、FABS 、浮点运算符、浮点比较 )

1:FLD : FPU(浮点处理器)的加载浮点数到堆栈指令 .386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data array REAL8 10 DUP(?) dblOne REAL8 234.56 dblTwo REAL8 10.1.code main PROCfld array …

mcq 队列_MCQ | 基础知识 免费和开源软件| 套装4

mcq 队列Q1. What do you call the technique of storing encrypted user passwords in Linux? Q1。 您如何称呼在Linux中存储加密的用户密码的技术? System Password Management 系统密码管理 Shadow Password 影子密码 Encrypted Password 加密密码 None of the…

将AX寄存器中的16位数据分成4组(从高到低),每组4位,然后把这4组数作为数当中的低4位分别放在AL,BL,CL,DL中。

将AX寄存器中的16位数据分成4组(从高到低),每组4位,然后把这4组数作为数当中的低4位分别放在AL,BL,CL,DL中。 P176 4.14 编程思路:首先用BX、DX存放AX,即原AX原BX原DX&…

一个很不错的wp企业站模板

http://zjuhpp.com/chinese-localization-of-business-wordpress-theme-devster.html转载于:https://www.cnblogs.com/i-kyle/archive/2012/09/13/2683817.html

著名的自由软件圣战- “KDE/QT .VS. Gnome/Gtk”

在 Unix 的图形界面一向是以 MIT 的 X Window 系统为标准, 可是在商业应用上有两大流派,一派是以 Sun 公司领导的 Openlook 阵营,一派是 IBM/HP 领导的OSF (Open Software Foundation) 的 Motif, 双方经过多年竞争之后&#xff0c…

汇编语言-019(汇编程序与c\c++相互调用)

1:在C程序中使用__asm块插入汇编代码程序(不能用LENGTHOF与SIZEOF运算符,而是LENGTH和SIZE) struct Package {long originZip; //4long destinationzip;//4float shippingPrice; //4 };int main(int argcount,char* args[]) {c…

kotlin 判断数字_Kotlin程序检查数字是偶数还是奇数

kotlin 判断数字Given a number N, we have to check whether it is EVEN or ODD. 给定数字N ,我们必须检查它是偶数还是奇数 。 Example: 例: Input:N 13Output:"ODD"Input:N 24Output:"EVEN"程序在Kotlin检查偶数或奇数 (Prog…

微机原理与接口技术(第2版)考点

第一章 1,微型计算机的特点: 功能强、可靠性高价格低廉系统设计灵活,适应性强体积小,重量轻,维护方便 2,微型计算机的硬件组成 微处理器内存储器I/O接口电路I/O设备系统总线 3,微机的工作过…

搜狗面试笔试一面二面全经历

09.25 华科西十二教,搜狗招聘笔试: C搜索引擎研发。同时有威盛、烽火两家笔试,就没有去。 09.26 华科校内某酒店,搜狗一面: 笔试做的不错,客观题错了3.5(20个),后两个算法…

UltraEdit语法高亮

语法加亮分支位于配置-编辑器显示之下,允许用户配置语法加亮选项:语法加亮可以识别预定词语,并用不同颜色显示它们。该功能对于程序员来说尤其有用,并且对那些想用不同颜色显示文档中词语的用户也非常有用。提供二十种…

线性代数 向量长度_用户定义长度的向量| 使用Python的线性代数

线性代数 向量长度Prerequisite: Defining a vector 先决条件: 定义向量 Linear algebra is the branch of mathematics concerning linear equations by using vector spaces and through matrices. In other words, a vector is a matrix in n-dimensional space…

顺序表(代码、分析、汇编)

目录:代码:分析:汇编:代码: SeqList.h #ifndef _SEQLIST_H_ #define _SEQLIST_H_ typedef void SeqList; //定义链表数据类型,void因为要适用不同链表数据类型 typedef void SeqListNode; //定义链表节…

设有两个16位整数变量A和B,试编写完成下述操作的程序。

设有两个16位整数变量A和B,试编写完成下述操作的程序。 (1)若有两个数中一个是奇数,则将奇数存入A中,偶数存入B中。 (2)若两个数均为奇数,则两数分别减1,并存回原变量中…

棋牌游戏服务器架构: 详细设计(三) 数据库设计

主要有3类Database: ServerInfoDB,UserInfoDB和GameDB。 ServerInfoDB主要存储的是游戏列表的信息,UserInfoDB存储玩家的全局信息,而GameDB就是积分以及积分变化情况。下面分别加以描述。 1. ServerInfoDB ServerInfoDB主要存储游戏列表信息。主要有以下几个表: 1. …

程序开发与性格特征

程序开发与性格特征 引言: 程序员给很多人的印象一般是不善于交际、表情严肃、思维紧密、做事认真、沉着冷静等等。那么这些特征到底和程序开发有没有关系呢?不同性格的人在团队开发当中将面临什么样的问题以及不同性格的人在团队开发中又将发挥着什么样…

汇编语言编写程序从1加到100要求使用循环结构。

汇编语言编写程序从1加到100要求使用循环结构。 汇编思路:AX用于存放每次累加的结果—>09998…0 首先,DATA段中定义SUM用来存放结果和,STACK段定义一个200DB类型空间,用来存放数据。CODE段,AX清0,CX赋值…

c语言指针++_C ++此指针| 查找输出程序| 套装3

c语言指针Program 1: 程序1&#xff1a; #include <iostream>using namespace std;class Test {int VAL;public:Test(int v){VAL v;}Test* Sum(Test T1, Test T2){VAL T1.VAL T2.VAL;return this;}void print(){cout << VAL << " ";}};int mai…

线性表(代码、分析、汇编)

目录&#xff1a;代码&#xff1a;分析&#xff1a;汇编&#xff1a;代码&#xff1a; LinkList.h #ifndef _LINKLIST_H_ #define _LINKLIST_H_typedef void LinkList; //定义线性表类型 typedef struct _tag_LinkListNode LinkListNode;//定义线性表节点类型 struct _tag_Li…

WPF 操作 richTextBox

FROM:http://blog.csdn.net/wuzhengqing1/article/details/7010902 取出richTextBox里面的内容 第一种方法&#xff1a; 将richTextBox的内容以字符串的形式取出 string xw System.Windows.Markup.XamlWriter.Save(richTextBox.Document); 第二种方法&#xff1a;将richTe…