求出首地址为DATA的字数组中的最小偶数,并将它放在AX中

;求出首地址为DATA的字数组中的最小偶数,并将它放在AX中
DATAS SEGMENT
DATA DW 1 DUP(1,1,1,1,1,2)   ;随便设置的数据,可换为其他数据
COUNT DW ($-DATA)/2 ;COUNT保存数组的字个数,数据全部为正时,有偶数时程序正常显示最小偶数
NOEN  DB "NO EVEN NUMBERS!",'$' ;当出现负偶数时,程序将负偶数放在AX中,但不
SUCCESS DB "MIN EVEN MATCH!",'$' ;能正确显示负偶数,因为负偶数没有对应的ASCII码
CRLF  DB 0AH,0DH,'$'     ;换行
DATAS ENDS

STACK SEGMENT PARA STACK
          DW 128 DUP(?)
TOP   LABEL WORD
STACK ENDS


CODE  SEGMENT
      ASSUME CS:CODE,SS:STACK,DS:DATAS
MAIN  PROC FAR
START:MOV AX,DATAS
           MOV DS,AX
  
  MOV AX,STACK
  MOV SS,AX
  LEA SP,TOP
  
  LEA SI,DATA
  SUB SI,2
  MOV CX,COUNT
  MOV AX,1       ;当作标记,用于判断是否找到第一个偶数
  MOV BX,1       ;当作标记,用于判断是否找到第二个偶数
L1:   CMP CX,0       ;遍历数组后则跳转到是否找到偶数的判断
          JZ  L5
          ADD SI,2
  MOV DX,[SI]
  DEC CX
  TEST DL,01H    ;判断是否为偶数,最后一位为1时不是偶数,否则为偶数
  JNZ L1
  MOV AX,DX      ;将第一个偶数放在AX当中
  
L3:   CMP CX,0       ;寻找第二个偶数
  JZ  L5
  ADD SI,2
  DEC CX
  MOV DX,[SI]
  TEST DL,01H
  JNZ L3
  MOV BX,DX      ;将第二个偶数放在BX当中
  JMP L7         ;比较两个偶数大小,AX大则需交换,AX始终存放最小偶数
L5:     CMP AX,1
          JZ  L6         ;如AX=1,则证明数组中没有偶数
  CMP BX,1       ;若执行到此步骤,则证明至少数组存在一个最小偶数,且已在AX中
  JZ L9
  JMP L9
L6:      MOV AH,9
          LEA DX,NOEN    ;显示没有偶数的提示信息
  INT 21H
  JMP L2
L7:     CMP AX,BX
          JG  L8
  JMP L3
L8:     MOV AX,BX
         JMP L3
L9:     MOV DL,AL      ;显示最小正偶数,负偶数不能显示
          ADD DL,30H     ;而是显示了0对应ASCII码前面的字符
          MOV AH,2
  INT 21H
  
  MOV AH,9
  LEA DX,CRLF    ;换行
  INT 21H
  
          MOV AH,9
          LEA DX,SUCCESS ;显示找到偶数的提示信息
  INT 21H
  JMP L2
L2:   MOV AH,4CH
          INT 21H
CODE ENDS
MAIN ENDP
          END START
      
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值