《求最大值最小值》微机原理的实验报告

  • 格式:doc
  • 大小:25.50 KB
  • 文档页数:2

实验报告
实验三、给出一组数据,求其中的最大值与最小值
1、编写程序:D:\>EDIT 文件名.ASM
DATA SEGMENT
ARRAY DB -1,0,-99,100,110,34,-4,-6,45,90
MAX DB 0
MIN DB 0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA ;程序用DEBUG装入后用U命令查看此语句
MOV DS,AX ;可知数据段段基地址,以便查看结果
MOV SI,OFFSET ARRAY
MOV CX,0AH ;比较10个数据
MOV BH,[SI] ;(BH)存放最大值,(BL)存放最小值
MOV BL,BH
A1: LODSB ;从数组中取数放AL
CMP AL,BH ;与BH中的数据比较
JLE A2 ;(AL)<=(BH),跳转A2执行;无符号数用JBE A2指令 MOV BH,AL ;(AL)>(BH),(AL)->(BH)
JMP A3
A2: CMP AL,BL ;与BL中的数据比较
JGE A3 ;(AL)>=(BL),跳转A2执行;无符号数用JAE A3指令 MOV BL,AL ;(AL)<(BL),(AL)->(BL)
A3: LOOP A1 ;10个数据未比较完,转A1执行
MOV MAX,BH
MOV MIN,BL
MOV AH,4CH
INT 21H
CODE ENDS
END START
2、编译程序:D:\>TASM 文件名.ASM
3、连接程序:D:\>TLINK 文件名.OBJ
4、执行程序:D:\>DEBUG 文件名.EXE (注意:必须是EXE文件)
-U ;反汇编,查得数据段段基地址(DATA)=XXXX
以及MAX和MIN的偏移地址[????]
-D XXXX:0 ;查看原始数据
-G ;运行程序
-D XXXX:????(MAX的偏移地址) ;查看结果
-Q ;退出DEBUG
实验三、求最大最小值——对给出的10个数按递增排序。

设计思想:
a.从最后一个数开始,依次把相邻的两个数进行比较,即第10个数和第9个数比较,第9个数和第8个数比较,等等;若第N-1个数大于第N个数,则两者交换,否则不交换,直到10个数的相邻两个数都比较完为止。

此时,10个数中的最小数将被排在10个数的最前列。

b.对剩下的9个数重复上步,找到9个数中的最小数。

c.重复第二步,直到10个数全部排序好为止。

参考程序:
DATA SEGMENT
ARRAY DB -1,0,-99,100,110,34,-4,-6,45,90
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET ARRAY+10
MOV CX,0AH
MOV BL,0FFH ;设置标志FF
A1: CMP BL,0FFH
JNZ A4 ;BL不为FF则转A4
MOV BL,0H ;
DEC CX ;外循环修正CX
JZ A4
PUSH SI
PUSH CX
A2: DEC SI
MOV AL,[SI]
DEC SI
CMP AL,[SI]
JG A3 ;无符号数用JA A3指令
XCHG AL,[SI]
MOV [SI+1],AL
MOV BL,0FFH
A3: INC SI
LOOP A2
POP CX
POP SI
JMP A1
A4: MOV AH,4CH
INT 21H
CODE ENDS
END START。