⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 平均值.lst

📁 用汇编编写的
💻 LST
字号:
Turbo Assembler	 Version 4.1	    08/05/15 22:17:55	    Page 1
C:\DOCUME~1\ADMINI~1\MYDOCU~1\汇编程序\平均值.ASM



      1	0000				     DATA  SEGMENT
      2	0000  01 05 04 00 07 09	02+	      BUF  DB	     1,5,4,0,7,9,2,6,8,3
      3	      06 08 03
      4	      =0009			    COUNT  EQU	     $-BUF-1
      5	000A				     DATA  ENDS
      6	0000				     CODE  SEGMENT
      7						   ASSUME    CS:CODE,DS:DATA
      8	0000  B8 0000s			   START:  MOV	     AX,DATA
      9	0003  8E D8				   MOV	     DS,AX
     10				       ;--------------------------------------------------------数据处理部分--------
     11	0005  B3 00				   MOV	     BL,0	 ;置子程序参数(0是查找最小数,否则查找最大数)
     12	0007  B9 0009				   MOV	     CX,COUNT	 ;置子程序参数(第一次循环查找COUNT次)
     13	000A  E8 004B				   CALL	     FIND	 ;查找最小数地址
     14	000D  E8 0036				   CALL	     DEL	 ;删除最小数
     15	0010  B3 01				   MOV	     BL,1
     16	0012  49				   DEC	     CX		 ;置子程序参数(第二次循环查找COUNT-1次)
     17	0013  E8 0042				   CALL	     FIND	 ;查找最大数地址
     18	0016  E8 002D				   CALL	     DEL	 ;删除最大数
     19				       ;---------------------------------------------------------求和部分----------
     20	0019  49				   DEC	     CX		 ;置循环求和次数
     21	001A  BE 0000r				   LEA	     SI,BUF
     22	001D  8A 04				   MOV	     AL,[SI]
     23	001F  46			     NUM:  INC	     SI
     24	0020  02 04				   ADD	     AL,[SI]	 ;循环求和
     25	0022  E2 FB				   LOOP	     NUM
     26				       ;----------------------------------------------------------求平均值部分------
     27	0024  B4 00				   MOV	     AH,0	 ;扩展为16位AX
     28	0026  B3 08				   MOV	     BL,COUNT-1	 ;置除数值(08H)
     29	0028  F6 F3				   DIV	     BL		 ;求平均值:AX/BL   24H/08H
     30	002A  80 FC 00				   CMP	     AH,0	 ;若余数为0
     31	002D  74 10				   JZ	     NEXT	 ;则将商直接存入存储器单元
     32	002F  50				   PUSH	     AX		 ;否则保存商
     33	0030  8A C4				   MOV	     AL,AH	 ;将余数存放AL
     34	0032  B2 0A				   MOV	     DL,0AH	 ;置乘数为0AH
     35	0034  F6 E2				   MUL	     DL		 ;AL*DL=AX
     36	0036  F6 F3				   DIV	     BL		 ;AX/BL	  28H/08H
     37	0038  3C 05				   CMP	     AL,5	 ;若商小于5
     38	003A  72 03				   JB	     NEXT	 ;则直接存入存储器单元
     39	003C  58				   POP	     AX
     40	003D  FE C0				   INC	     AL		 ;否则将商加1
     41	003F  88 44 01			    NEXT:  MOV	     [SI+1],AL	 ;保存四舍五入后的平均值
     42				       ;----------------------------------------------------------------------------------
     43	0042  B4 4C				   MOV	     AH,4CH
     44	0044  CD 21				   INT	     21H	 ;程序退出
     45				       ;==============================================删除地址DX对应的存储器数据子程序
     46	0046				      DEL  PROC	     NEAR
     47	0046  51				   PUSH	     CX
     48	0047  2B CA				   SUB	     CX,DX	 ;置循环次数
     49	0049  8B F2				   MOV	     SI,DX
     50	004B				     ROP:
     51	004B  8A 5C 01				   MOV	     BL,[SI+1]	 ;目标数据的后一个数据存入bl
     52	004E  88 1C				   MOV	     [SI],BL	 ;将后一个数据移到前一个数据
     53	0050  46				   INC	     SI		 ;修改地址
     54	0051  E2 F8				   LOOP	     ROP
     55	0053  C6 04 00				   MOV	     BYTE   PTR[SI],0
     56	0056  59				   POP	     CX
     57	0057  C3				   RET
Turbo Assembler	 Version 4.1	    08/05/15 22:17:55	    Page 2
C:\DOCUME~1\ADMINI~1\MYDOCU~1\汇编程序\平均值.ASM



     58	0058				      DEL  ENDP
     59				       ;==============================查找数组中指定数据地址存入DX(最大数,最小数)子程序
     60	0058				     FIND  PROC	     NEAR
     61	0058  51				   PUSH	     CX
     62	0059  BE 0000r				   LEA	     SI,BUF
     63	005C  8A 04				   MOV	     AL,[SI]	 ;取第一个数
     64	005E  46				   INC	     SI
     65	005F  80 FB 00				   CMP	     BL,0	 ;若为0,则为查找最小数,否则为查找最大数
     66	0062  74 0E				   JZ	     SMALL1
     67	0064  3A 04			   BEGIN:  CMP	     AL,[SI]	 ;查找最大数,第一个数与第二数比较
     68	0066  73 04				   JAE	     TOP	 ;若大于等于则转
     69	0068  8A 04				   MOV	     AL,[SI]	 ;记录最大值
     70	006A  8B D6				   MOV	     DX,SI	 ;否则将最大数地址保存在DX中
     71	006C  46			     TOP:  INC	     SI
     72	006D  E2 F5				   LOOP	     BEGIN
     73	006F  EB 0C 90				   JMP	     EXIT
     74	0072  3A 04			  SMALL1:  CMP	     AL,[SI]	 ;查找最小数,第一个数与第二数比较
     75	0074  76 04				   JBE	     TOP1	 ;若小于等于则转
     76	0076  8A 04				   MOV	     AL,[SI]
     77	0078  8B D6				   MOV	     DX,SI	 ;否则将最小数地址保存在DX中
     78	007A  46			    TOP1:  INC	     SI
     79	007B  E2 F5				   LOOP	     SMALL1
     80	007D  59			    EXIT:  POP	     CX
     81	007E  C3				   RET
     82	007F				     FIND  ENDP
     83	007F				     CODE  ENDS
     84						   END	     START
Turbo Assembler	 Version 4.1	    08/05/15 22:17:55	    Page 3
Symbol Table




Symbol Name		Type   Value			   Cref	(defined at #)

??DATE			Text   "08/05/15"
??FILENAME		Text   "平均值	"
??TIME			Text   "22:17:55"
??VERSION		Number 040A
@CPU			Text   0101H
@CURSEG			Text   CODE			   #1  #6
@FILENAME		Text   平均值
@WORDSIZE		Text   2			   #1  #6
BEGIN			Near   CODE:0064		   #67	72
BUF			Byte   DATA:0000		   #2  4  21  62
COUNT			Number 0009			   #4  12  28
DEL			Near   CODE:0046		   14  18  #46
EXIT			Near   CODE:007D		   73  #80
FIND			Near   CODE:0058		   13  17  #60
NEXT			Near   CODE:003F		   31  38  #41
NUM			Near   CODE:001F		   #23	25
ROP			Near   CODE:004B		   #50	54
SMALL1			Near   CODE:0072		   66  #74  79
START			Near   CODE:0000		   #8  84
TOP			Near   CODE:006C		   68  #71
TOP1			Near   CODE:007A		   75  #78

Groups & Segments	Bit Size Align	Combine	Class	   Cref	(defined at #)

CODE			16  007F Para	none		   #6  7
DATA			16  000A Para	none		   #1  7  8


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -