求出首地址爲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
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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.