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

DATA  SEGMENT
      TABLE  DB   10,9,4,6,12,1,4,13,15,11
      NUM    EQU  ($-TABLE)-1     ;冒泡排序次数为元素个数n-1
DATA  ENDS

CODE  SEGMENT
      ASSUME:  CS:CODE, DS:DATA
START:MOV  AX, DATA
      MOV  DS, AX
      MOV  CX, NUM
      LEA  SI, TABLE      ;地址指针SI指向TABLE储存区首地址
       MOV  BH, [SI]       ;将第一个数放入BH,保存当前最大值
      MOV  BL, [SI]       ;第一个数放入BL,保存当前最小值
          
      CALL FIND           ;调用子程序查找最大值和最小值
      MOV  AL, BH                                       
      CALL PRINT          ;调用显示子函数
      MOV  AL, BL
      CALL PRINT
      
      MOV  AH, 4CH
      INT  21H            ;返回操作系统
                   
FIND  PROC NEAR
L:    INC  SI             ;指针SI移动到下一个数
      MOV  AL,  [SI]
      CMP  AL, BL        ;与BL比较大小
      JB   NEXT1          ;AL小于BL跳转
      CMP  AL,  BH        ;与BH比较大小
      JB   NEXT2          ;AL小于则BH跳转
      MOV  BH,  AL        ;否则BH替换为更大的值
      JMP  NEXT2         
      
NEXT1:MOV  BL,  AL        ;BL替换为更小的值
      JMP  NEXT2          

NEXT2:LOOP L              ;查看循环是否停止
      RET
FIND  ENDP
 
PRINT PROC NEAR           ;显示子程序
      PUSH DX
      AND  AL,  0FH       ;首先取低四位
      MOV  DL,  AL        
      CMP  DL,  9         ;判断是否<=9
      JLE  DISP            ;若是则为‘0’~ ‘9’,ASCII码加30H
      ADD  DL,  7         ;若不是则为‘A’~ ‘F’,ASCII码加37H

DISP: ADD  DL,  30H
      MOV  AH,  02H       ;显示
      INT  21H
      MOV  DX,  0DH       ;加回车符
      INT  21H
      MOV  DL,  0AH       ;加换行符
      INT  21H
      POP  DX
      RET                 ;子程序返回
      
PRINT ENDP
    
CODE  ENDS
END   START

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值