|
- DATAS SEGMENT
- STRING1 DB'Please input a string:
- ;輸入提示信息
- STRING2 DB'Number of letter:
- ;各類字符提示信息
- STRING3 DB'Number of digits:
-
- STRING4 DB'Number of others:
-
- STRING5 DB'Number of upperletter:
- STRING6 DB'Number of lowerletter:
- LETTER DB 0 ;字母
- UPPERLETTER DB 0;大寫字母
- LOWERLETTER DB 0;小寫字母
- DIGIT DB 0 ;數(shù)字
- OTHERS DB 0 ;其他
- DATAS ENDS
- STACKS SEGMENT PARA STACK 'STACK';此處輸入堆棧段代碼
- DB 256 DUP(?)
- STACKS ENDS
- CODES SEGMENT
- ASSUME CS:CODES,DS:DATAS,SS:STACKS
- start: MOV AX,DATAS
- MOV DS,AX
- LEA DX,STRING1 ;顯示輸入提示信息Please input a string,LEA取指功能實現(xiàn)。
- MOV AH,09H ;09H為字符串輸出
- INT 21H ;中斷調(diào)用,INT 21H 中斷為DOS中斷
- MOV CX,80 ;設(shè)置循環(huán)次數(shù)足夠大,CX用來保存循環(huán)指令
- L1: MOV AH,01H ;中斷調(diào)用,單字符輸入,01H帶回顯的鍵盤輸入,
- INT 21H ;輸入符號的ASCII代碼在AL寄存器中。
- CMP AL,0DH ;若輸入回車符則結(jié)束,CMP比較指令。如果為數(shù)字:30H---39H
- JZ OVER2 ;JZ條件轉(zhuǎn)移指令,根據(jù)ZF進位轉(zhuǎn)移
- CMP AL,30H ;若<30H(0),OTHERS++
- JB OTHER ;JB條件轉(zhuǎn)移指令,為低于不高于指令。
- CMP AL,39H ;若>39H(9),跳轉(zhuǎn)進一步比較
- JA ONE ;JA條件轉(zhuǎn)移指令。為高于/不低于指令。
- JMP DIGITAL ;DIGIT++,JMP無條件轉(zhuǎn)移指令,
- ONE: CMP AL,41H ;若IF<41H(A),OTHERS++ 如果為大寫字母“A-Z”字符:41H---5AH
- JB OTHER
- CMP AL,5AH ;若IF>5AH(Z),跳轉(zhuǎn)繼續(xù)比較
- JA TWO
- JMP CHAR1 ;檢測為大寫字母,字母和大寫字母數(shù)加一
- TWO: CMP AL,61H ;若IF<61H(a),OTHERS++ 如果為小寫字母字符“a-z”字符:61H--7AH
- JB OTHER
- CMP AL,7AH
- JA OTHER
- JMP CHAR2 ;檢測為小寫字母,字母和小寫字母數(shù)加一
- JMP OVER ;比較結(jié)束
- OTHER: INC OTHERS
- JMP OVER
- CHAR1: INC LETTER ;字母
- INC UPPERLETTER ;大寫字母
- JMP OVER ;比較結(jié)束
- CHAR2: INC LETTER ;字母
- INC LOWERLETTER ;小寫字母
- JMP OVER ;結(jié)束比較
- DIGITAL:INC DIGIT ;DIGIT++
- JMP OVER ;比較結(jié)束
- JMP OVER ;比較結(jié)束
- OVER: NOP
- LOOP L1 ;循環(huán),輸入下一字符
- OVER2: CALL HUANHUANG ;回車換行
- LEA DX,STRING2 ;字符串的輸出Number of letter
- MOV AH,09H ;09H為字符串輸出
- INT 21H ;中斷調(diào)用,INT 21H 中斷為DOS中斷
- XOR AX,AX
- MOV AL,LETTER ;將統(tǒng)計的數(shù)字送 AX
- CALL OUTPUT ;調(diào)用輸出兩位數(shù)字的子程序
- CALL HUANHUANG ;回車換行
-
-
- LEA DX,STRING5 ;字符串的輸出Number of upperletter
- MOV AH,09H ;09H為字符串輸出
- INT 21H
- XOR AX,AX
- MOV AL,UPPERLETTER ;將統(tǒng)計的數(shù)字送AX
- CALL OUTPUT ;調(diào)用輸出兩位數(shù)字的子程序
- CALL HUANHUANG ;回車換行
- LEA DX,STRING6 ;字符串的輸出Number of lowerletter:
- MOV AH,09H ;09H為字符串輸出
- INT 21H
- XOR AX,AX
- MOV AL,LOWERLETTER ;將統(tǒng)計的數(shù)字送AX
- CALL OUTPUT ;調(diào)用輸出兩位數(shù)字的子程序
- CALL HUANHUANG ;回車換行
- LEA DX,STRING3 ;字符串的輸出為Number of digits:
- MOV AH,09H ;09H為字符串輸出
- INT 21H
- XOR AX,AX
- MOV AL,DIGIT ;將統(tǒng)計的數(shù)字送AX
- CALL OUTPUT ;調(diào)用輸出兩位數(shù)字的子程序
- CALL HUANHUANG ;回車換行
- LEA DX,STRING4 ;字符串的輸出Number of others
- MOV AH,09H ;09H為字符串輸出
- INT 21H
- XOR AX,AX
- MOV AL,OTHERS ;將統(tǒng)計的數(shù)字送AX
- CALL OUTPUT ;調(diào)用輸出兩位數(shù)字的子程序
- MOV AH,4CH ;4CH帶返回碼結(jié)束
- INT 21H
-
- HUANHUANG PROC NEAR ;控制輸出格式,輸出回車換行子程序
- MOV AH,02H
- MOV DL,0AH ;0AH鍵盤輸入至緩沖區(qū)
- INT 21H ;輸出換行符
- MOV AH,02H
- MOV DL,0DH ;0DH鍵盤復(fù)位。
- INT 21H ;輸出回車符
- RET
- HUANHUANG ENDP
-
- OUTPUT PROC NEAR ;輸出兩位數(shù)字的子程序(輸出兩位數(shù)字為十進制)
- MOV BL,10
- DIV BL ;AX/BL,AL=商,AH=余數(shù)
- PUSH AX ;保存AX中的信息
- MOV DL,AL
- ADD DL,30H ;十進制轉(zhuǎn)為ASCAII碼
- MOV AH,02H ;顯示一個字符
- INT 21H ;輸出十位數(shù)
- POP AX ;出棧送AX
- MOV DL,AH
- ADD DL,30H
- MOV AH,02H ;顯示一個字符
- INT 21H ;輸出個位數(shù)
- RET
- OUTPUT ENDP
- CODES ENDS
- END START
復(fù)制代碼
|
|