程序要求:
先輸入一個數n(0<n<=100),再輸入n個無符號數K(0<=K<=65535),找出這n個數的最大值並輸出
測試實例保證輸入每個數之后,都會以回車結束
代碼:
1 ;程序要求:先輸入一個數n(0<n<=100),再輸入n個無符號數K(0<=K<=65535),找出這n個數的最大值並輸出 2 ;實例保證輸入的每個數都以回車結束 3 4 STACK SEGMENT STACK 'STACK' 5 STAK DW 256 DUP(?) 6 STACK ENDS 7 8 DATA SEGMENT 9 MAX_NUM DW ? 10 DATA ENDS 11 12 CODE SEGMENT 13 ASSUME CS:CODE,DS:DATA,SS:STACK 14 MAIN PROC 15 START: MOV AX,DATA 16 MOV DS,AX 17 CALL INPUT 18 MOV CX,BX ;循環次數為BX,賦值給CX 19 XOR AX,AX ;AX置0,保存最大值 20 NEXT_L: CALL INPUT 21 CMP AX,BX 22 JA JUMP 23 MOV AX,BX 24 JUMP: LOOP NEXT_L 25 MOV MAX_NUM,AX 26 MOV BX,MAX_NUM 27 CALL OUTPUT 28 MOV AH,4CH 29 INT 21H 30 MAIN ENDP 31 32 INPUT PROC ;入口參數:無 出口參數:BX(因此不能超過65535) 33 PUSH AX 34 PUSH CX 35 PUSH DX 36 PUSH SI ;保存乘數 37 XOR BX,BX 38 XOR CX,CX 39 XOR DX,DX 40 MOV SI,10 41 NEXT: MOV AH,01 42 INT 21H ;接收鍵盤的數字 43 CMP AL,0DH ;判斷是否是回車 44 JZ DONE ;JZ:等於則跳轉 45 CMP AL,'0' 46 JB ERROR1 ;JB:小於則跳轉 47 CMP AL,'9' 48 JA ERROR1 ;JA:大於則跳轉 49 SUB AL,30H ;將ASCII碼字符變為對應的數字 50 MOV CL,AL 51 MOV AX,BX 52 MUL SI 53 ADD AX,CX 54 MOV BX,AX 55 JMP NEXT ;繼續接收下一個數據 56 ERROR1: MOV BX,0FFFFH 57 JMP EXIT 58 DONE: MOV DL,0AH 59 MOV AH,02 60 INT 21H ;輸出回車 61 MOV DL,0DH 62 MOV AH,02 63 INT 21H 64 EXIT: POP SI 65 POP DX 66 POP CX 67 POP AX 68 RET ;子程序返回 69 INPUT ENDP 70 71 OUTPUT PROC NEAR ;入口參數:BX 出口參數:無 72 PUSH AX ;保護寄存器 73 PUSH BX 74 PUSH CX 75 PUSH DX 76 PUSH SI 77 MOV SI,10 ;SI中是除數 78 XOR CX,CX 79 MOV AX,BX ;入口參數在BX中 80 NEXT1: MOV DX,0 ;DX存放余數,清零 81 DIV SI ;AX和DX組成的32位除以16位的SI,商保存在AX中,余數保存在DX中 82 PUSH DX 83 INC CX ;CX++,CX記錄有多少位 84 CMP AX,0 85 JNZ NEXT1 ;JNZ 不等於則跳轉 86 OUTP: POP DX ;余數出棧 87 ADD DL,30H 88 MOV AH,2 89 INT 21H 90 LOOP OUTP 91 POP SI ;恢復寄存器 92 POP DX 93 POP CX 94 POP BX 95 POP AX 96 RET ;子程序返回 97 OUTPUT ENDP 98 CODE ENDS 99 END START