data segment
szBuf db 'Hello,World!$'
data ends
code segment
assume cs:code,ds:data
start:
main proc
mov ax,data
mov ds,ax
lea bx,szBuf
mov dx,bx
call Strlen
mov ah,4ch
int 21h
main endp
Strlen Proc
push ax
push bx
xor cl,cl
mov al,'$'
mov bx,dx
again: cmp [bx],al
je over
inc cl
inc bx
jmp again
over: cmp cl,0ah
jb lab ;小于10跳转到lab
mov ax,cx
mov bl,0ah ;否则继续执行
div bl
mov bl,ah
mov dl,al
add dl,30h
mov ah,02h
int 21h
mov dl,bl
add dl,30h
mov ah,02h
int 21h
pop bx
pop ax
ret
lab: mov ah,02h
mov dl,cl
add dl,30h
int 21h
pop bx
pop ax
ret
Strlen endp
code ends
szBuf db 'Hello,World!$'
data ends
code segment
assume cs:code,ds:data
start:
main proc
mov ax,data
mov ds,ax
lea bx,szBuf
mov dx,bx
call Strlen
mov ah,4ch
int 21h
main endp
Strlen Proc
push ax
push bx
xor cl,cl
mov al,'$'
mov bx,dx
again: cmp [bx],al
je over
inc cl
inc bx
jmp again
over: cmp cl,0ah
jb lab ;小于10跳转到lab
mov ax,cx
mov bl,0ah ;否则继续执行
div bl
mov bl,ah
mov dl,al
add dl,30h
mov ah,02h
int 21h
mov dl,bl
add dl,30h
mov ah,02h
int 21h
pop bx
pop ax
ret
lab: mov ah,02h
mov dl,cl
add dl,30h
int 21h
pop bx
pop ax
ret
Strlen endp
code ends
end start
注释:
Strlen函数:
以bx作为返回寄存器,字符串后面以’$’结尾。