汇编语言编写字符串的最大最小值
- 格式:doc
- 大小:22.50 KB
- 文档页数:2
汇编语言实验7实验报告一、实验目的本次实验旨在通过汇编语言编写程序,实现对字符串的操作和输出。
二、实验内容1. 编写一个汇编程序,要求从键盘输入一个字符串,并将其逆序输出到屏幕上;2. 编写一个汇编程序,要求从键盘输入两个字符串,并将它们拼接起来后输出到屏幕上。
三、实验过程1. 字符串逆序输出程序首先,需要从键盘输入一个字符串。
为了方便起见,我们可以先规定字符串的最大长度为100。
接着,我们需要定义两个变量:```buffer db 100 ; 用于存储输入的字符串length dw ? ; 存储输入的字符串长度```其中,db代表定义字节型变量,dw代表定义双字节型变量。
然后,我们需要使用INT 21H中断来读取用户输入的字符串。
具体而言,我们可以使用下面这段代码:```mov ah, 0Ah ; 设置INT 21H功能号为0Ahmov dx, offset buffer ; 将buffer的地址传给DX寄存器int 21h ; 调用INT 21H中断```该代码会将用户输入的字符串存储在buffer中,并且将其长度存储在length变量中。
接着,我们需要将该字符串逆序输出到屏幕上。
为了实现这个功能,我们可以使用栈来存储字符串中的每个字符,并逐个弹出来输出。
具体而言,我们可以使用下面这段代码:```mov si, offset buffer + 1 ; 将si寄存器指向字符串的第一个字符mov cx, length ; 将cx寄存器设置为字符串长度dec cx ; 字符串长度需要减1reverse:push byte ptr [si] ; 将当前字符压入栈中inc si ; 指向下一个字符loop reverse ; 循环直到所有字符都被压入栈中mov ah, 02h ; 设置INT 21H功能号为02h,表示输出一个字符print:pop dx ; 弹出栈顶元素int 21h ; 输出该字符loop print ; 循环直到所有字符都被弹出并输出完毕```2. 字符串拼接程序首先,需要从键盘输入两个字符串。
汇编语言数据类型汇总汇编语言是一种底层的计算机语言,它直接操作计算机的硬件。
在编写汇编程序时,我们需要了解不同的数据类型,以便正确地使用和处理数据。
本文将对汇编语言中常见的数据类型进行汇总和介绍。
一、整数类型在汇编语言中,整数是最常见的数据类型之一。
汇编语言支持不同长度的整数类型,如字节、字和双字。
1. 字节(byte):字节是8位长度的整数类型,在汇编中通常用BYTE来声明字节变量。
字节范围为-128到127(有符号)或0到255(无符号)。
示例:```myByte BYTE -10 ; 有符号字节myByte2 BYTE 255 ; 无符号字节```2. 字(word):字是16位长度的整数类型,在汇编中通常用WORD来声明字变量。
字范围为-32,768到32,767(有符号)或0到65,535(无符号)。
示例:```myWord WORD -200 ; 有符号字myWord2 WORD 65535 ; 无符号字```3. 双字(double word):双字是32位长度的整数类型,在汇编中通常用DWORD来声明双字变量。
双字范围为-2,147,483,648到2,147,483,647(有符号)或0到4,294,967,295(无符号)。
示例:```myDword DWORD -10000 ; 有符号双字myDword2 DWORD 4294967295 ; 无符号双字```二、浮点数类型除了整数类型,汇编语言也支持浮点数类型,用于处理实数数据。
1. 单精度浮点数(float):单精度浮点数是32位长度的浮点数类型,在汇编中通常用REAL4或FLOAT来声明单精度浮点数变量。
示例:```myFloat REAL4 3.14 ; 单精度浮点数myFloat2 FLOAT 2.71828 ; 单精度浮点数```2. 双精度浮点数(double):双精度浮点数是64位长度的浮点数类型,在汇编中通常用REAL8或DOUBLE来声明双精度浮点数变量。
物理与电气工程学院课程实践报告用汇编语言对字母大小写转换姓名** ***********专业电气工程及其自动化班级电气工程及其自动化1班年级2000级指导教师00 00成绩日期0000.6.20一.概述在计算机系统中有多种数制和编码,常用的数制有二进制、八进制以及十六进制,常用的代码有BCD 码、ASCll码和七段显示码等。
这些数制和编码根据其作用的不同,在存储形式上也有差异。
在实际应用中,它们也因使用的要求不同而有所差异。
在配备操作系统管理程序的计算机中,有些代码转换程序已在系统管理软件中编好。
还有些代码转换需要根据使用要求通过编程完成。
因此,代码转换是非数据处理中最常见的情况。
二.设计要求完成一个字母或数制之间的转化程序,主程序分别具有可选择的子功能,按相应的字符,可分别进入相应的子功能并在屏幕上显示结果。
可选择的子功能分别为:(1)实现小写字母向大写字母的转换(2)实现大写字母向小写字母的转换三.设计思想与工作原理小写字母的ASC码比大写字母的ASC码大20H,因此,大写转小写就是将大写字母的ASC码加20H,反之,将小写字母的ASC码减20H。
大小写字母转换功能,是通过调用子函数input实现对字符串的输入,然后调用宏gaixie来实现对大小写的转换,其中宏是通过参数的传递来确定是小写转换成大写,还是大写转换成小写的。
从而决定是对操作数进行加或减20H。
80x86从功能上分执行单元EU(Execution Unit),和总线接口单元BIU(Bus Interface Unit),执行单元由算术逻辑单元(ALU)、标志寄存器、通用寄存器组和EU控制器等部件组成。
指令执行部件EU由算术逻辑单元、标志寄存器、通用寄存器和EU控制器等部件组成。
主要功能是执行指令:一般顺序执行,EU不断地从指令队列中取指令连续执行,而省去访问存储器取指令的时间。
需要访问存储器取操作数时,EU将访问地址送给BIU后,将要等待操作数到来后才能继续操作;遇到转移类指令时,要将指令队列中的后续指令作废,等待BIU重新从存储器取出目标地址中的指令代码进入指令队列后,EU才能继续执行指令。
如何使⽤vba编制最⼤值和最⼩值的程序?认识简单算法思想!如何实现找出⼀组数字中的最⼤值或者最⼩值
不调⽤编制好的函数⽽是利⽤算法⾃⼰编写
算法描述:
1、假定第⼀个数字为最⼤值或者最⼩值
2、将第⼀个数与后⾯的数字⼀⼀⽐较,如果第⼀个数字⽐其他数字⼤(求最⼩值)或⼩(求最
⼤值)就把两个数字换位。
3、循环⽐较⾄最后⼀个数字⽐较完成
求最⼩值
Sub smal()
Dim a
Dim c
c = Range(''a1'').CurrentRegion.Rows.Count''获取数据的⾏数
For i = 1 To c
If Cells(1, 1) > Cells(i, 1) Then''条件判断
a = Cells(1, 1)
Cells(1, 1) = Cells(i, 1)''对换位置
Cells(i, 1) = a
End If
Next
Cells(1, 3) = Cells(1, 1)''把最⼩值放⼊C1显⽰
End Sub
求最⼤值
Sub maxs()
Dim a
Dim c
c = Range(''a1'').CurrentRegion.Rows.Count
For i = 1 To c
If Cells(1, 1) < cells(i,="" 1)="">
a = Cells(1, 1)
Cells(1, 1) = Cells(i, 1)
Cells(i, 1) = a
End If。
实验一认识Tddebug集成操作软件实验日志指导教师曾素华实验时间:2013 年04 月02 日学院计算机科学与技术专业计算机科学与技术班级0411005 学号2010211912 姓名李新娱实验室s401一、实验题目认识Tddebug集成操作软件二、实验目的1.熟悉汇编程序的开发过程。
2.认识Tddebug集成操作软件。
3.掌握在Tddebug集成环境中编辑、编译、连接汇编语言程序方法。
4.掌握INT 21H软件中断来调用DOS内部子程序的方法三、实验内容及说明1.实验内容:数据传送实验1)编程将数据段中的一个字符串传送到附加段中,并输出附加段中的目标字符串到屏幕上。
参见示例出程序。
2)修改此程序,采用字符串传送指令完成。
2.实验中使用DOS功能调用(INT 21H):参见教材《32位微型计算机原理与接口技术》89页(1)显示字符串入口:AH=09H调用参数:DS:DX=串首地址,‘$’为结束字符。
(2)返回DOS系统入口:AH=4CH调用参数:AL=返回码四、实验主要步骤要求一数据传送实验1.运行Tddebug软件,选择Edit菜单编写实验程序2.使用Compile菜单中的Compile和Link对实验程序进行汇编、连接,生成执行文件。
3.使用Rmrun菜单中的Run运行程序,观察运行结果。
4.使用Rmrun菜单中的Debug调试程序,查看程序段、数据段、附加段装入内存后的分配情况。
单步执行数据传送指令后,观察各寄存器及数据区的内容。
过程如下:3)按F7单步执行,在代码区中有一个三角,表示正在执行的指令。
每一条指令的执行一定会使目标寄存器和状态寄存器发生变化,从相关窗口看结果。
4)检查内存数据区的内容,关键是找出用户程序的数据段和附加段:●方法1:在CPU窗口按Tab键使内存数据显示区成为活动区,按Ctrl+G键,输入:“DS或ES寄存器的值:偏移地址”,即可显示用户指定的数据区●方法2:选择菜单View| Dump,弹出内存数据显示窗口。
例⼦:循环语句--输⼊N个整数,判断最⼤值,最⼩值,和,平均值。
1# coding=gbk2print("如果你想推出该程序,请输⼊'quit'!")3 min = max = sum = aver = 04 count = 25 num1 = input("请输⼊第1个数字:")6if num1 == 'quit':7print("你已退出该程序!")8else:9 num1 = int(num1)10 sum = sum + int(num1)11 max = min = aver = num112print("最⼤值,最⼩值,和,平均值均为:" + str(num1))13while count:14 num = input("请输⼊第" + str(count) + "个数字:")15if num == 'quit':16print("你已退出该程序!")17print("你⼀共输⼊了" + str(count-1) + "个整数!")18print("最⼤值:", max, "最⼩值:", min, "和:", sum,"平均值:",aver)19break20else:21 num = int(num)22if num <= max and num >= min:23pass24else:25if num > max:26 max = num27else:28 min = num29 sum += num30 aver = sum / count31 count += 132print("最⼤值:",max,"最⼩值:",min,"和:",sum,"平均值:",aver)看这个需求,不难理解,该程序的核⼼思想就是不断的⽐较,⾸先先确⽴第⼀个数字,这个数字是必须的,因为需要它与后⾯输⼊的数字做⽐较,(见5~12⾏代码)并且这第⼀个数还是特殊情况,最⼤值最⼩值和平均值都是其本⾝,完全可以单列出来。
实验三找出最大数一.实验目的:1.学习并掌握数据传送指令和算术逻辑指令的用法。
2.进一步熟悉在PC机上建立、汇编、链接、调试和运行8086汇编语言源程序。
二.实验内容:某数据块DA TA1中有10个无符号数,编程找出其中的最大数,并将其送到MAX单元中。
三.实验报告:1.画出流程图;2.写出源程序;3.简要描述程序的调试过程;4.写出程序的执行结果。
流程图DA TA SEGMENTDA TA1 DW '1','7','5','4','8','6','2','6','0','4' ;要比较大小的字符MAX DW ? :定义MAX单元BUF DB'MAX:','$' ;要显示的字符DA TA ENDSSTACK SEGMENT PARA STACK 'STACK'DW 100 DUP (?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS, AXLEA DI,DA TA1 ;DI指向要比较的字符的首址MOV BL,9 ;需要比较9次MOV SI,DI ;串首地址送SINEXT1:MOV AX,[SI] ;取第一个数NiADD SI,2 ;指向下一个数NjCMP AX,[SI] ;Ni≥Nj?JC NEXT2 ;若不大于,则不交换MOV DX,[SI] ;否则,交换Ni和NjMOV [SI-2],DXMOV [SI],AXNEXT2:DEC BL ;循环结束?JNZ NEXT1 ;若未结束,则继续比较MOV DX,[DI+18]MOV [MAX],DX ;将最大数放至MAX单元中MOV DX,OFFSET BUF ;09号功能调用,显示字符串MOV AH,09H ;显示“MAX:”INT 21HMOV DX,[DI+20] ;显示MAX单元中字符MOV AH,02H ;02号功能调用,显示字符INT 21HMOV AH,4CH ;返回DOSINT 21HCODE ENDSEND START一:由于之前数据段选用的是十六进制数,在用DOS功能2号功能调用时发现程序执行后显示为一系列奇怪的字符,想到2号功能只能显示单个字符,输入的数据改为其在ASCII 码表中对应的字符输出。
实验报告课程名称微机原理与汇编语言学院计算机工程学院班级 11计3Z 学号 ******** 姓名王祖陆2013年05月27日设计一个汇编语言程序,具体内容如下:一、功能:(1)从键盘输入N个带符号数(N的值也从键盘输入,N<=65535);带符号数为16位二进制数范围);(2)找出这N个数中的最大值和最小值,并且显示出来;(3)计算这N个数的平均值,并且显示出来。
二、程序分析:(1)需要对程序进行N的值的输入,来确定循环的次数,决定了循环的次数就可以确定数组元素的个数,为下一步数组元素的值的输入做准备。
(2)由(1)中确定N的值来决定循环的次数,每一次的循环,指针向后移两位,因为我们定义的时候是字大小,占用2个字节的空间,每一次的循环调用一次输入函数,以确定数组中每个元素的值。
(3)调用清屏语句将屏幕上的输入的痕迹清除,同时用循环调用输出函数,将用户之前输入的值按一定的格式输出到屏幕上。
(4)判断最大数最小数,用循环遍历数组中的每一个元素,同时与最大数最小数进行比较,如果该数比最大数大,则将其保存到最大数中,如果该数比最小数小,则将其保存到最小数中。
(注:最大数和最小数需要开辟内存空间来保存,同时在进入循环之前应该给其一个值,这里我给的是数组中第一个元素的值)(5)计算平均数,同样用循环将其累加的和除以N的值即得到最终的结果三、程序相关说明:(1)程序中,COUNT保存的是循环的次数,即数组的个数N(2)A RRAY为定义的数组,MAXAY,MINAY分别对应的是最大数,最小数,WTEMP为临时变量(3)M ESS系列保存的内容为输入输出时的提示信息无实际作用(4)I NPUT子函数为输入N的值,READ函数为输入一个-32768~+32767的数,WRITE为输出函数,即将数组中某一元素的值输出,IFMAX函数为判断最小值最大值函数,MEAN函数为求平均值函数(5)D PCRLF、NDPCRLF子函数为输出格式控制函数四、程序流程图主程序流程图 INPUT函数流程图NREAD函数流程图 WRITE函数流程图IFMAX函数流程图 MEAN函数流程图五、源程序列表文件内容:Microsoft (R) Macro Assembler Version 5.00 5/27/13 18:44:33Page 1-10000 DSEG SEGMENT ;数据段 0000 50 6C 65 61 73 65 20 MESS1 DB 'Please input N "N<=65535":','$'69 6E 70 75 74 20 4E20 22 4E 3C 3D 36 3535 33 35 22 3A 24001B 50 6C 65 61 73 65 20 MESS2 DB 'Please input a number:','$'69 6E 70 75 74 20 6120 6E 75 6D 62 65 723A 240032 59 6F 75 72 20 69 6E MESS3 DB 'Your input is as follows:',0AH,0DH,'$'70 75 74 20 69 73 2061 73 20 66 6F 6C 6C6F 77 73 3A 0A 0D 24004E 0A 0D 4D 41 58 3A 24 MESS4 DB 0AH,0DH,'MAX:','$'0055 0A 0D 4D 49 4E 3A 24 MESS5 DB 0AH,0DH,'MIN:','$'005C 0A 0D 41 56 45 52 41 MESS6 DB 0AH,0DH,'AVERAGE:','$',0AH,0DH47 45 3A 24 0A 0D0069 03E8[ ARRAY DW 1000 DUP(0)0000]0839 COUNT DW ?083B WTEMP DW ?083D MAXAY DW ?083F MINAY DW ?0841 DSEG ENDS0000 SSEG SEGMENT STACK ;堆栈段 0000 0080[ DB 80H DUP(0)00]0080 SSEG ENDS0000 CSEG SEGMENT ;代码段ASSUME DS:DSEG,SS:SSEG,CS:CSEG0000 B8 ---- R START: MOV AX,DSEG0003 8E D8 MOV DS,AX0005 BA 0000 R MOV DX,OFFSET MESS10008 B4 09 MOV AH,09H000A CD 21 INT 21H000C E8 009F R CALL INPUT ;调用INPUT函数 000F 8B 0E 0839 R MOV CX,COUNT0013 BB 0069 R MOV BX,OFFSET ARRAY0016 BA 001B R AGAIN1: MOV DX,OFFSET MESS20019 B4 09 MOV AH,9H001B CD 21 INT 21H001D E8 00AB R CALL READ ;调用READ函数0020 89 07 MOV [BX],AXMicrosoft (R) Macro Assembler Version 5.00 5/27/13 18:44:33Page 1-20022 83 C3 02 ADD BX,20025 E8 0185 R CALL DPCRLF ;循环COUNT次0028 E2 EC LOOP AGAIN1002A B0 03 MOV AL,3H002C CD 10 INT 10H002E 8B 0E 0839 R MOV CX,COUNT0032 BB 0069 R MOV BX,OFFSET ARRAY0035 BA 0032 R MOV DX,OFFSET MESS30038 B4 09 MOV AH,9H003A CD 21 INT 21H003C 8B 07 AGAIN2: MOV AX,[BX]003E A3 083B R MOV WTEMP,AX0041 E8 00EC R CALL WRITE ;调用WRITE函数 0044 83 C3 02 ADD BX,20047 E8 0196 R CALL NDPCRLF ;调用NDPCRLE函数 004A E2 F0 LOOP AGAIN2 ;执行COUNT次循环 004C B4 02 MOV AH,2004E B2 0D MOV DL,0DH0050 CD 21 INT 21H0052 B2 0A MOV DL,0AH0054 CD 21 INT 21H0056 8B 0E 0839 R MOV CX,COUNT005A B8 0069 R MOV AX,OFFSET ARRAY005D E8 0130 R CALL IFMAX ;调用IFMAX函数0060 BA 004E R MOV DX,OFFSET MESS40063 B4 09 MOV AH,09H0065 CD 21 INT 21H0067 A1 083D R MOV AX,MAXAY006A A3 083B R MOV WTEMP,AX006D E8 00EC R CALL WRITE ;调用WRITE函数输出MAXAY0070 BA 0055 R MOV DX,OFFSET MESS50073 B4 09 MOV AH,09H0075 CD 21 INT 21H0077 A1 083F R MOV AX,MINAY007A A3 083B R MOV WTEMP,AX007D E8 00EC R CALL WRITE ;调用WRITE函数输出MINAY0080 BA 005C R MOV DX,OFFSET MESS60083 B4 09 MOV AH,09H0085 CD 21 INT 21H0087 A1 0839 R MOV AX,COUNT008A 50 PUSH AX008B B8 0069 R MOV AX,OFFSET ARRAY008E 50 PUSH AX008F E8 0157 R CALL MEAN0092 83 C4 04 ADD SP,40095 A3 083B R MOV WTEMP,AX0098 E8 00EC R CALL WRITE ;调用WRITE函数输出平均值Microsoft (R) Macro Assembler Version 5.00 5/27/13 18:44:33Page 1-3009B B4 4C MOV AH,4CH009D CD 21 INT 21H009F INPUT PROC009F 50 PUSH AX00A0 E8 00AB R CALL READ00A3 A3 0839 R MOV COUNT,AX00A6 E8 0185 R CALL DPCRLF00A9 58 POP AX00AA C3 RET00AB INPUT ENDP00AB READ PROC00AB 53 PUSH BX00AC 51 PUSH CX00AD 52 PUSH DX00AE 33 DB XOR BX,BX ;寄存器BX,CX清零00B0 33 C9 XOR CX,CX00B2 B4 01 MOV AH,1H00B4 CD 21 INT 21H00B6 3C 2B CMP AL,'+' ;是“+”,继续输入字符 00B8 74 07 JZ READ100BA 3C 2D CMP AL,'-' ;是“-”,设置-1标志00BC 75 07 JNZ READ200BE B9 FFFF MOV CX,-100C1 B4 01 READ1: MOV AH,1H ;继续输入字符00C3 CD 21 INT 21H00C5 3C 30 READ2: CMP AL,'0' ;不是0-9之间的字符,则输入结束00C7 72 16 JB READ300C9 3C 39 CMP AL,'9'00CB 77 12 JA READ300CD 2C 30 SUB AL,30H ;是0-9之间的字符,则转换为二进制数,利用移位指令,实现数值乘1000CF D1 E3 SHL BX,100D1 8B D3 MOV DX,BX00D3 D1 E3 SHL BX,100D5 D1 E3 SHL BX,100D7 03 DA ADD BX,DX00D9 B4 00 MOV AH,0H00DB 03 D8 ADD BX,AX ;已输入数值乘10后,与新输入数值相加00DD EB E2 JMP READ100DF 83 F9 00 READ3: CMP CX,000E2 74 02 JZ READ400E4 F7 DB NEG BX ;是负数,进行求补00E6 8B C3 READ4: MOV AX,BX00E8 5A POP DX00E9 59 POP CX00EA 5B POP BX00EB C3 RET00EC READ ENDP00EC WRITE PROC00EC 50 PUSH AXMicrosoft (R) Macro Assembler Version 5.00 5/27/13 18:44:33Page 1-400ED 53 PUSH BX00EE 52 PUSH DX00EF A1 083B R MOV AX,WTEMP ;列出显示数据00F2 85 C0 TEST AX,AX ;判断数据是零、正数或负数00F4 75 09 JNZ WRITE100F6 B2 30 MOV DL,'0' ;是零,显示‘0’后退出00F8 B4 02 MOV AH,200FA CD 21 INT 21H00FC EB 2E 90 JMP WRITE500FF 79 0C WRITE1: JNS WRITE2 ;是负数,显示‘-’ 0101 8B D8 MOV BX,AX0103 B2 2D MOV DL,'-'0105 B4 02 MOV AH,20107 CD 21 INT 21H0109 8B C3 MOV AX,BX010B F7 D8 NEG AX ;数据求补010D BB 000A WRITE2: MOV BX,100110 53 PUSH BX0111 3D 0000 WRITE3: CMP AX,00114 74 0A JZ WRITE40116 2B D2 SUB DX,DX0118 F7 F3 DIV BX011A 80 C2 30 ADD DL,30H ;余数转换为ASCII 码011D 52 PUSH DX011E EB F1 JMP WRITE30120 5A WRITE4: POP DX0121 80 FA 0A CMP DL,100124 74 06 JE WRITE50126 B4 02 MOV AH,20128 CD 21 INT 21H ;进行显示012A EB F4 JMP WRITE4012C 5A WRITE5: POP DX012D 5B POP BX012E 58 POP AX012F C3 RET0130 WRITE ENDP0130 IFMAX PROC0130 56 PUSH SI0131 53 PUSH BX0132 8B F0 MOV SI,AX0134 49 DEC CX0135 8B 04 MOV AX,[SI]0137 8B D8 MOV BX,AX0139 83 C6 02 MAXCK: ADD SI,2013C 39 04 CMP [SI],AX013E 7E 05 JLE MINCK0140 8B 04 MOV AX,[SI] ;如果AX<[SI]则将[SI]值存入AX0142 EB 07 90 JMP NEXT0145 39 1C MINCK: CMP [SI],BX0147 7D 02 JGE NEXT0149 8B 1C MOV BX,[SI] ;如果BX>[SI]则将[SI]值存入BX014B E2 EC NEXT: LOOP MAXCKMicrosoft (R) Macro Assembler Version 5.00 5/27/13 18:44:33Page 1-5014D A3 083D R MOV MAXAY,AX0150 89 1E 083F R MOV MINAY,BX0154 5B POP BX0155 5E POP SI0156 C3 RET0157 IFMAX ENDP0157 MEAN PROC0157 55 PUSH BP0158 8B EC MOV BP,SP015A 53 PUSH BX ;保护寄存器015B 51 PUSH CX015C 52 PUSH DX015D 56 PUSH SI015E 57 PUSH DI015F 8B 5E 04 MOV BX,[BP+4] ;从堆栈中取出缓冲区偏移地址存入BX0162 8B 4E 06 MOV CX,[BP+6] ;从堆栈中取出数据个数存入CX中0165 33 F6 XOR SI,SI ;SI清零,保存求和低16位0167 8B FE MOV DI,SI ;DI 保存求和高16位0169 8B 07 MEAN1: MOV AX,[BX]016B 99 CWD ;符号扩展 DX016C 03 F0 ADD SI,AX016E 13 FA ADC DI,DX0170 83 C3 02 ADD BX,2H0173 E2 F4 LOOP MEAN10175 8B C6 MOV AX,SI0177 8B D7 MOV DX,DI0179 8B 4E 06 MOV CX,[BP+6]017C F7 F9 IDIV CX ;有符号数除法,求的平均值在AX中017E 5F POP DI ;恢复寄存器017F 5E POP SI0180 5A POP DX0181 59 POP CX0182 5B POP BX0183 5D POP BP0184 C3 RET0185 MEAN ENDP0185 DPCRLF PROC0185 50 PUSH AX0186 52 PUSH DX0187 B4 02 MOV AH,20189 B2 0D MOV DL,0DH018B CD 21 INT 21H018D B4 02 MOV AH,2018F B2 0A MOV DL,0AH0191 CD 21 INT 21H0193 5A POP DX0194 58 POP AX0195 C3 RET0196 DPCRLF ENDPMicrosoft (R) Macro Assembler Version 5.00 5/27/13 18:44:33 Page 1-60196 NDPCRLF PROC0196 50 PUSH AX0197 52 PUSH DX0198 B4 02 MOV AH,2019A B2 09 MOV DL,9H019C CD 21 INT 21H019E 5A POP DX019F 58 POP AX01A0 C3 RET01A1 NDPCRLF ENDP01A1 CSEG ENDSEND STARTMicrosoft (R) Macro Assembler Version 5.00 5/27/13 18:44:33 Symbols-1Segments and Groups:N a m e Length Align Combine ClassCSEG . . . . . . . . . . . . . . 01A1 PARA NONEDSEG . . . . . . . . . . . . . . 0841 PARA NONESSEG . . . . . . . . . . . . . . 0080 PARA STACKSymbols:N a m e Type Value AttrAGAIN1 . . . . . . . . . . . . . L NEAR 0016 CSEGAGAIN2 . . . . . . . . . . . . . L NEAR 003C CSEGARRAY . . . . . . . . . . . . . L WORD 0069 DSEG Length = 03E8 COUNT . . . . . . . . . . . . . L WORD 0839 DSEGDPCRLF . . . . . . . . . . . . . N PROC 0185 CSEG Length = 0011 IFMAX . . . . . . . . . . . . . N PROC 0130 CSEG Length = 0027INPUT . . . . . . . . . . . . . N PROC 009F CSEG Length = 000CMAXAY . . . . . . . . . . . . . L WORD 083D DSEGMAXCK . . . . . . . . . . . . . L NEAR 0139 CSEGMEAN . . . . . . . . . . . . . . N PROC 0157 CSEG Length = 002E MEAN1 . . . . . . . . . . . . . L NEAR 0169 CSEGMESS1 . . . . . . . . . . . . . L BYTE 0000 DSEGMESS2 . . . . . . . . . . . . . L BYTE 001B DSEGMESS3 . . . . . . . . . . . . . L BYTE 0032 DSEGMESS4 . . . . . . . . . . . . . L BYTE 004E DSEGMESS5 . . . . . . . . . . . . . L BYTE 0055 DSEGMESS6 . . . . . . . . . . . . . L BYTE 005C DSEGMINAY . . . . . . . . . . . . . L WORD 083F DSEGMINCK . . . . . . . . . . . . . L NEAR 0145 CSEGNDPCRLF . . . . . . . . . . . . N PROC 0196 CSEG Length = 000B NEXT . . . . . . . . . . . . . . L NEAR 014B CSEGREAD . . . . . . . . . . . . . . N PROC 00AB CSEG Length = 0041 READ1 . . . . . . . . . . . . . L NEAR 00C1 CSEGREAD2 . . . . . . . . . . . . . L NEAR 00C5 CSEGREAD3 . . . . . . . . . . . . . L NEAR 00DF CSEGREAD4 . . . . . . . . . . . . . L NEAR 00E6 CSEGSTART . . . . . . . . . . . . . L NEAR 0000 CSEGWRITE . . . . . . . . . . . . . N PROC 00EC CSEG Length = 0044 WRITE1 . . . . . . . . . . . . . L NEAR 00FF CSEGWRITE2 . . . . . . . . . . . . . L NEAR 010D CSEGWRITE3 . . . . . . . . . . . . . L NEAR 0111 CSEGWRITE4 . . . . . . . . . . . . . L NEAR 0120 CSEGWRITE5 . . . . . . . . . . . . . L NEAR 012C CSEGWTEMP . . . . . . . . . . . . . L WORD 083B DSEGMicrosoft (R) Macro Assembler Version 5.00 5/27/13 18:44:33 Symbols-2@FILENAME . . . . . . . . . . . TEXT ex263 Source Lines263 Total Lines39 Symbols50026 + 451030 Bytes symbol space free0 Warning Errors0 Severe Errors六、程序运行截图程序输入截图程序输出截图七、总结我比较的满意地方我对程序进行一步步的编写的,这样无形中减轻了自己不小的工作量,因为对一个比较大的程序来说,一次编好整条程序是不可能的,因为无论如何你都不可避免一些错误,如果你一次编好整个程序,那么出现的错误的数量将是不可小觑的,所以我采取的方法是分部来进行的,先把输入函数编好,用debug测试通过后,再进行下一个模块功能的编辑,同样测试通过后才进行下一个模块的编写,主程序不应该包含太多的功能,它存在的目的就是调用子程序,而一个子程序,只要完成一个功能就可以了,我不满意的就是程序格式的书写没掌握好,看程序源代码的时候很费力,后来花了不少的功夫修改了下格式,有时删了一个字母,使得程序在编译的时候出错,所以在编写程序时,程序格式的书写一定要控制好,不然后面很麻烦,记得有一个人曾经说过,具体是谁我忘记了,不过是这样的说的,“好的程序,给人能带来一种美感”所以呢,格式的书写很重要。
编程实现寻找最小值的功能在日常的编程过程中,经常会遇到需要在一组数中找出最小值的情况。
寻找最小值是一种很基础的操作,但在实际开发中却有着非常重要的作用。
本文将介绍如何使用编程语言实现输入3个整数,寻找最小值并输出的功能。
1. 输入要求我们需要明确输入的要求。
在这个例子中,我们需要输入3个整数,即a、b、c。
这三个整数可以是任意的整数,可以为正数、负数或零。
2. 寻找最小值接下来,我们需要编写代码来实现寻找最小值的功能。
这可以通过条件语句来实现。
我们可以使用if语句来比较这三个整数的大小,找出最小值。
具体的代码如下:```def find_min(a, b, c):min_num = aif b < min_num:min_num = bif c < min_num:min_num = creturn min_numa = int(input("请输入第一个整数:"))b = int(input("请输入第二个整数:"))c = int(input("请输入第三个整数:"))min_value = find_min(a, b, c)print("最小值为:", min_value)```3. 输出结果我们需要将找出来的最小值进行输出。
在这个例子中,我们将使用print语句将最小值输出到屏幕上。
这样用户就可以清楚地看到输入的三个整数中的最小值了。
通过以上步骤,我们可以实现输入3个整数,寻找最小值并输出的功能。
这是一个非常基础的功能,但在编程中却有着广泛的应用。
掌握了这个功能,可以让我们在实际开发中更加高效地处理数据,提高程序的运行效率。
总结在现实生活和编程中,寻找最小值是非常常见的操作。
通过编程语言,我们可以很轻松地实现这个功能,让计算机来帮助我们寻找最小值。
当然,这只是一个非常简单的例子,实际应用中可能会遇到更为复杂的情况。