主题:关于字符串中的字频问题,达人一定要给解释下呀,再拜
小弟这几天写了第一个汇编程序,可是没办法生成.obj文件,求教达人
题目是让求STRBUF中STRING出现的频率,他给出了数据段:
DSEG SEGMENT PARA 'DATA'
STRBUF DB 'ASASAASASSASSAASASAS'
COUNT EQU $-STRBUF
STRING DB 'AS'
MESSG DB "THE NUMBER OF 'AS' IS : "
NUM DB ?
DB 0AH,0DH,'$'
DSEG ENDS
我补的堆栈段和代码段:
;********************************************************
STACKSG SEGMENT STACK 'STACK'
DW 32 DUP(?)
STACKSG ENDS
;********************************************************
CODESG SEGMENT
MAIN PROC FAR
ASSUME CS:CODESG, DS:DSEG, SS:STACKSG
MOV AX, DSEG
MOV DS, AX
LEA DX, MESSG
MOV AH, 9
INT 21H
MOV NUM, 0
MOV CX, COUNT-1 ;防止SI移到最后一个字节取字时溢出
CLD
LEA SI, STRBUF
NEXT:
LODSW ;把SI目前指向位置的字(即SI和SI+1)放入AX
CMP AX, STRING ;AX-STRING
JNZ STEP ;根据上一句的结果判断分支
[color=FF0000]INC NUM[/color]
LEA SI, SI-1 ;由于LODSW一次使SI移2位,所以要移回1位
LOOP NEXT
STEP:
LEA SI, SI ;不做任何事情的(只是为了跳过红字部分)
MOV DL, NUM
MOV AH, 2
INT 21H
MOV AX, 4C00H
INT 21H
MAIN ENDP
CODESG ENDS
END MAIN
题目是让求STRBUF中STRING出现的频率,他给出了数据段:
DSEG SEGMENT PARA 'DATA'
STRBUF DB 'ASASAASASSASSAASASAS'
COUNT EQU $-STRBUF
STRING DB 'AS'
MESSG DB "THE NUMBER OF 'AS' IS : "
NUM DB ?
DB 0AH,0DH,'$'
DSEG ENDS
我补的堆栈段和代码段:
;********************************************************
STACKSG SEGMENT STACK 'STACK'
DW 32 DUP(?)
STACKSG ENDS
;********************************************************
CODESG SEGMENT
MAIN PROC FAR
ASSUME CS:CODESG, DS:DSEG, SS:STACKSG
MOV AX, DSEG
MOV DS, AX
LEA DX, MESSG
MOV AH, 9
INT 21H
MOV NUM, 0
MOV CX, COUNT-1 ;防止SI移到最后一个字节取字时溢出
CLD
LEA SI, STRBUF
NEXT:
LODSW ;把SI目前指向位置的字(即SI和SI+1)放入AX
CMP AX, STRING ;AX-STRING
JNZ STEP ;根据上一句的结果判断分支
[color=FF0000]INC NUM[/color]
LEA SI, SI-1 ;由于LODSW一次使SI移2位,所以要移回1位
LOOP NEXT
STEP:
LEA SI, SI ;不做任何事情的(只是为了跳过红字部分)
MOV DL, NUM
MOV AH, 2
INT 21H
MOV AX, 4C00H
INT 21H
MAIN ENDP
CODESG ENDS
END MAIN