汇编 字符数字分开存放

字符数字分开存放
DATAS SEGMENT
    ;此处输入数据段代码
    ORG 1000H 
    STRING DB  'DIDEfe234fef38fj2jf9DE99af3FAE8E83F92fjIjEIFIFQ';,0DH,0AH;源字符串
    COUNT  DW  $-STRING  ; 字符串长度
    ORG 2000H
    ZIFU   DB  50 DUP(?),0DH,0AH,'$' ; 字母存放区
    ORG 3000H
    SHUZI  DB  50 DUP(?),0DH,0AH,'$' ; 数字存放区 
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX  ; DS指向DATAS
    MOV ES,AX  ; ES指向DATAS
    MOV SI,OFFSET STRING; DS:SI指向原字符串
    MOV BX,OFFSET ZIFU  ; BX指向字母存放区
    MOV DI,OFFSET SHUZI ; DI指向数字存放区
    MOV CX, COUNT
    CLD        ;设置地址方向
LOP:LODSB      ; 将原字符串中一个字节取至AL,且SI加1
    CMP AL,30H ; 判断所取字节为数字符号吗?
    JB 	LZIFU  ; 不为数字符号时转字母处理
    CMP AL,39H
    JA 	LZIFU  ; 不为数字符号时转字母处理
    STOSB      ; 是数字符号送数字区,且DI加1
    JMP   AGAIN
LZIFU:XCHG BX,DI   ; 交换BX和DI,使DI指向字母字符区
      STOSB        ; 送字母到字母区,指针增加1
      XCHG BX,DI   ; BX,DI恢复原值
AGAIN:LOOP 	LOP    ; 所有符号都处理了吗,没有则转LOP;否则,顺序执行
      MOV CX,COUNT
      MOV SI,OFFSET STRING;求入口参数的偏移量
   L1:MOV AL,[SI]         ;单字符处理。将存于DS:DL中的ASCII码字符显示输出
      MOV DL,AL
      MOV AH,02H          ;单字符输出调用AH=02H
      INT 21H    
      INC SI
      LOOP L1  
      MOV DL,0DH          ;为了使显示输出更好,加入回车换行
      MOV AH,02H         
      INT 21H  
      MOV DL,0AH
      MOV AH,02H         
      INT 21H  
      MOV DX,OFFSET ZIFU  ;输出字母区
      MOV AH,09H          
      INT 21H
      MOV DX,OFFSET SHUZI ;输出数字区
      MOV AH,09H
      INT 21H     
      MOV AH,4CH
      INT 21H
CODES ENDS
    END START


你可能感兴趣的:(汇编 字符数字分开存放)