;----------------------------------
;我帮你写了个可以输入的然后统计长度
;若直接统计你题目给定的字符串也可以写一个
;********************************数据段
data segment
array db 100 DUP(0) ;数组开辟空间
string1 db "Please input a string ended with $" ;字符串以$结束
string2 db "The length of string is: $"
crlf db 13,10,13,10,"$" ;13回车,10换行
data ends
;**********************************
;**********************************代码段
code segment
assume ds:data,cs:code ;段对应关系的说明
main proc far ;far子程序调用时的参数
;-----------------------------------------
start:
push ds
sub ax,ax
push ax
;-------------------------------------------------
mov ax,data ;将数据传送如数据段
mov ds,ax
;---------------------------------------
;主程序开始
;---------------------------------------------------------
;显示"Please input a string ended with $"的内容
mov ah,09h
lea dx,string1
int 21h
mov dl,24h ;显示'$'
mov ah,02h
int 21h
mov dl,3ah ;显示':'
mov ah,02h
int 21h
;----------------------------------------------------------
;键盘输入字符串以$结束
mov bx,offset array ;设定基址
mov di,0
input:
mov ah,01h
int 21h
cmp al,24h ;和'$'进行比较
je next
mov [bx+di],al
inc di
jmp input
next:
mov [bx+di],24h ;存储$符号
;--------------------------------
;统计
mov si,0
mov cl,0
again:
mov al,[bx+si]
cmp al,24h
je next2
inc cl
inc si
jmp again
next2:
mov ah,09h
lea dx,crlf
int 21h
mov ah,09h
lea dx,string2
int 21h
add cl,30h
mov dl,cl
mov ah,02h
int 21h
ret
main endp ;主函数结束
;********************************************
code ends ;代码段定义结束
end start ;这个程序段全部结束,程序段不但有代码段还有其他段
DATA SEGMENT
NUM DB 'CHINA BEIJING DLKL;@#!^%*%^$' ;在这里写入字符传,以$结尾
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
LEA SI, NUM
MOV CL, 0
LOP:
MOV AL, [SI]
CMP AL, '$'
JE DISP
INC CL
INC SI
JMP LOP
DISP:
MOV AL, CL
MOV AH, 0
MOV BL, 16
DIV BL
PUSH AX
CMP AL, 10
JB A30
ADD AL, 7
A30:
ADD AL, 30H
MOV DL, AL
MOV AH, 2
INT 21H
POP AX
CMP AH, 10
JB A302
ADD AH, 7
A302:
ADD AH, 30H
MOV DL, AH
MOV AH, 2
INT 21H
MOV DL, 'H'
MOV AH, 2
INT 21H
MOV AH, 4CH
INT 21H
CODE ENDS
END START
程序运行后,将以16进制形式显示长度。