03_匯編語言(n個數找最大值)


程序要求:

  先輸入一個數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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM