简单题目简单的写,输出方式可以参考Output_ax子程序
程序代码:
DATA SEGMENT
OutStr db 0dh,0ah ;回车
Output db '0',4 dup (20h),0dh,0ah,'$' ;输出字串含回车
DATA ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV ES,AX
mov bx,0 ;初始化计数
next: mov ah,1 ;输入,显示字符
int 21h
cmp al,'$' ;比较结束符
jz Count ;输入$跳
cmp al,0dh ;是否enter,也视作结束输入
jz Count
cmp al,'0' ;比较'0'
jb @f ;不是数字符跳
cmp al,'9' ;比较'9'
jbe next ;输入数字符,不计,重新输入
@@: inc bx ;累加计数
jmp short next ;重新输入
Count: mov ax,bx ;取值
lea di,OutPut ;指向结果字串
call Output_AX ;调用程序将ax转为ASCII字串
lea dx,OutStr ;指向输出字串
mov ah,9 ;输出
int 21h
MOV AH,4CH
INT 21H
;----------------------------------------------------------------------------
;将ax值转为ascii数字,存入es:di
Output_AX: mov cx,0 ;清0
mov bx,10 ;除法准备
@@: mov dx,0 ;清0
div bx ;ds:ax /10 ,若1234 ,除10后,dl得余数4,
push dx ;保存, ax=1234,依次保存4,3,2,1
inc cx ;累加个数
or ax,ax ;是否已除尽
jnz @b ;不是,再除
mov bl,cl ;存个数
@@: pop ax ;后入先出,先印出第一数,然后第二....
or al,30h ;转ascii
stosb ;存入字串缓冲
loop @b ;回圈,下一个
ret
;----------------------------------------------------------------------------
CODES ENDS
END START