;;;;;在STR中查找‘AME’出现的个数用十进制显示个数没有错不过没有结果
;帮我看一下谢谢了!
;-----二进制数转换为十进制数方法----
;;CX中的数是个16位的二进制无符号数,所表示的数范围
在;;0~65535之间。转换的方法是首先将其反复减十进制万位上
的;;权值10000,一直减到不够减为止,并记录下减的次数,也
就;;是其中所包含10000的个数,那么它的十进制数的万位数字
就;;是它所包含的一万的个数,不够减时再用余下的数减千位上
的;;权值1000,得出千位上的数字,以此类推,可求出百位、十
位;;和个位数的数字。从而把该二进制数转换为十进制数。
;----在STR中查找‘AME’出现的个数用十进制显示个数------
DATA SEGMENT;---------------------------------
STR  DB 'KFAMEAMEDDAMEA'
COUNT  EQU $-STR   ;COUNT=字符串长度
qnum dw 10000,1000,100,10,1
buffer  db 5 dup(?)
DATA ENDS;--------------DATA----------------------
CODE  SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA
START: MOV AX,DATA;-------------开始---------------
       MOV  DS,AX
       MOV  ES,AX
       LEA DI,STR
       CALL FINDS   ;------查找AME-----
       MOV CX,BX;----?? 
       LEA DI,BUFFER; (DI)=存放转换结果存储区的首地址
       LEA BX,QNUM  ; (BX)=存放十进制权值存储区的首地址
       CALL BIN_DEC ;----转换二进制---- 
       LEA DX,buffer
       mov AH,9
       int 21h      ;----输出十进制----
       mov AH,4CH   ;---回到DOS下---
       INT 21H
FINDS PROC NEAR;------------查找AME------------
       MOV CX,COUNT
       MOV BX,0  ;“AME”程序的次数→BX
       MOV  AL,'A'
       CLD
    P: REPNE SCASB;------
       JE A
       JMP OUT1
    A: CMP  BYTE  PTR  [DI],  'M'
       JNE B
       CMP BYTE  PTR  [DI], 'E'
       JNE B       
       INC BX
    B: CMP CX,0
       JNE p
  OUT1:RET
 FINDS  ENDP---------------
       
;----------------转换二进制---- -----------
BIN_DEC PROC NEAR
          MOV DH,5  ;--(DH)=十进制的总位数(5位)
  NEXT1:  MOV DL,0  ;(DL)=十进制某位上的位数
  NEXT2:  SUB CX,[BX]
          JAE COUTB
          MOV [DI],DL
          ADD CX,[BX]
          INC DI
          ADD  BX,2
          DEC  DH
          JNZ  NEXT1
          RET
    COUTB:INC DL
          JMP NEXT2
  BIN_DEC ENDP
;----------------------------------
      
CODE  ENDS
    END START

											