编写一个汇编语言程序,它先接受一个字符串然后显示其中数字字符的个数,英文字母的个数和字符串的长度

如题所述


        CODE  SEGMENT
              ASSUME    CS:CODE
              ORG       100H
      START:  JMP       BB
      INSTR0  DB        256 DUP(' ')
              DB        10,13,'$'
       INNUM  DW        0

      LETSTR  DB        10,13,'Letter:'
      LETTER  DB        256 DUP(' ')
   LETTERNUM  DW        0

      NUMSTR  DB        10,13,'Number:'
      NUMBER  DB        256 DUP(' ')
   NUMBERNUM  DW        0

      OTHSTR  DB        10,13,'Othser:'
       OTHER  DB        256 DUP(' ')
    OTHERNUM  DW        0

        LFCR  DB        10,13,'$'

         BB:  PUSH      CS
              POP       ES
              PUSH      CS
              POP       DS
              LEA       DI,INSTR0
        BB1:  MOV       AH,1
              INT       21H
              CMP       AL,13
              JE        NEXT1
              MOV       [DI],AL
              INC       WORD PTR[INNUM]
              INC       DI
              JMP       BB1
      NEXT1:
              LEA       SI,INSTR0
              MOV       CX,INNUM
         LP:
              CMP       BYTE PTR[SI],'0'
              JL        N2
              CMP       BYTE PTR[SI],'9'
              JG        N2
              MOV       AL,[SI]
              MOV       DI,NUMBERNUM
              MOV       BYTE PTR NUMBER[DI],AL
              INC       WORD PTR[NUMBERNUM]
              JMP       N5
         N2:
              CMP       BYTE PTR[SI],'a'
              JL        N3
              CMP       BYTE PTR[SI],'z'
              JG        N3
              MOV       AL,[SI]
              MOV       DI,LETTERNUM
              MOV       BYTE PTR LETTER[DI],AL
              INC       WORD PTR[LETTERNUM]
              JMP       N5
         N3:
              CMP       BYTE PTR[SI],'A'
              JL        N4
              CMP       BYTE PTR[SI],'Z'
              JG        N4
              MOV       AL,[SI]
              MOV       DI,LETTERNUM
              MOV       BYTE PTR LETTER[DI],AL
              INC       WORD PTR[LETTERNUM]
              JMP       N5
         N4:
              MOV       AL,[SI]
              MOV       DI,OTHERNUM
              MOV       BYTE PTR OTHER[DI],AL
              INC       WORD PTR[OTHERNUM]
         N5:
              INC       SI
              LOOP      LP
             
              MOV       DI,LETTERNUM
              MOV       BYTE PTR LETTER[DI+1],'$'
              MOV       DI,NUMBERNUM
              MOV       BYTE PTR NUMBER[DI+1],'$'
              MOV       DI,OTHERNUM
              MOV       BYTE PTR OTHER[DI+1],'$'
             
              MOV       AH,9
              LEA       DX,LETSTR
              INT       21H
              MOV       AH,9
              LEA       DX,NUMSTR
              INT       21H
              MOV       AH,9
              LEA       DX,OTHSTR
              INT       21H
              LEA       DX,LFCR
              MOV       AH,9
              INT       21H
              MOV       AX,[INNUM]
              CALL      DISPAX
             
              MOV       AH,4CH
              INT       21H
;===============================================
              
; 将要显示的无符号数置于 ax 中 
      DISPAX  PROC      NEAR
              PUSH      AX
              PUSH      BX
              PUSH      CX
              PUSH      DX
              PUSH      SI
              PUSH      DI
              PUSH      BP
              PUSHF
              PUSH      DS
              PUSH      CS
              POP       DS
              MOV       BYTE PTR NZ,0
              PUSH      AX
              LEA       SI,DIVARR
              MOV       CX,5
         @1:
              POP       AX
              MOV       DX,0
              MOV       BX,[SI]
              DIV       BX
              PUSH      DX
              CMP       AL,0
              JNE       @2
              CMP       BYTE PTR NZ,1
              JE        @2
              CMP       CX,1
              JE        @2
              MOV       DL,20H
              JMP       @3
         @2:
              ADD       AL,30H
              MOV       DL,AL
              MOV       BYTE PTR NZ,1
         @3:
              MOV       AH,2
              INT       21H
              INC       SI
              INC       SI
              LOOP      @1
              POP       DX
              POP       DS
              POPF
              POP       BP
              POP       DI
              POP       SI
              POP       DX
              POP       CX
              POP       BX
              POP       AX
              RET
      DIVARR  DW        10000,1000,100,10,1
          NZ  DB        0
      DISPAX  ENDP
;------------------------------------------              
              
        CODE  ENDS
              END       START

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答