;;;;;在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