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

实验内容

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

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

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

DATA SEGMENT ;数据段
    VALUE DB 13,8,36,66,56,65,12,15,24
    VALNUM 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,DATA
    MOV DS,AX
    CLD ; DF=0
    LEA SI,VALUE ;取VALUE地址
    MOV AH,[SI] 
    MOV MAX,AH ;赋初值
    MOV MIN,AH
    INC SI
    MOV 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 ;输出最大值,先将最大值赋值给AL
    CALL DISPLAY   ;调用DISPLAY 
	
	MOV DX,OFFSET CHANGELINE  ;输出换行符
	MOV AH,9
	INT 21H

    MOV DX,OFFSET MIN1
    MOV AH,09H
    INT 21H
    MOV AL, MIN  ;最小值赋值给AL
    CALL DISPLAY 
    
    MOV AH,4CH	;返回DOS
    INT 21H

;在屏幕上输出
DISPLAY:
   PUSH BX ;压入堆栈保护
   PUSH CX
   
   ;数位分离,分别显示个位十位
   MOV AH,0
   MOV BL,10
   DIV BL  ; AX/10,商送AL余数送AH
   XCHG AL,AH  ;一条语句实现交换AL与AH内容
   OR AX,3030H ;或3030H,将数字转ASCII码
   
   MOV CX,AX
   MOV DL,CH  ;AH送DL
   MOV AH,02H ;单字符显示DL的内容
   INT 21H
    
   MOV DL,CL   ;AL送DL
   MOV AH,02H  ;单字符显示DL的内容
   INT 21H 
   POP CX ;先出
   POP BX
RET
     
CODE ENDS 
END START 

你可能感兴趣的:(算法,前端,数据库)