汇编语言程序设计 - 统计字符串中非数字字符的数

80x86汇编习题
题目描述:从键盘输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示出计数结果。

思路:

有两种思路,一种是先输出,后计数;另一种是边输入,边计数。本文是用前者。

1,逐个字符输入到BUFF,指针后移,判断是否为'$',是则结束输入

2,逐个判断数组内容是否为数字,是则计数

3,输出计数内容

这个程序写得并不好,因为我做了偷懒处理,默认它输出的数字字符数是少于10个。

根据题目理解,最好的做法应该是:逐个输入,立刻判断,计数器+1,下一个输入遇到$结束。然后用十六进制输出计数器的内容。
 

DATAS SEGMENT
	BUFF DB 10 DUP(?)
DATAS ENDS

STACKS SEGMENT
    DW 100H DUP(?)
	TOP LABEL WORD  
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    MOV AX,STACKS
    MOV SS,AX
    LEA SP,TOP		;初始化
    
	LEA BX,BUFF		;缓冲区首
INPUTT:
	MOV AH,1
	INT 21H
	MOV [BX],AL		;输入一个字符
	INC BX			;指针+1
	CMP AL,'$'		;是否是$
	JNE INPUTT		;不是就继续输入
    
    LEA BX,BUFF		;移动指针到头部
	XOR CX,CX		;清空计数器
COU:
	MOV AL,[BX]		;移动到AL
	INC BX			;指针加1
	CMP AL,'$'		;是否为结束符
	JE DISP			;结束就跳到输出
	CMP AL,'0'		;是否小于0
	JB INCC			;小于0,跳转到CX+1
	CMP AL,'9'		;是否大于9
	JA INCC			;大于9,跳转到CX+1
	JMP COU			;在0-9之间,移动到下一位
INCC:
	INC CX			;非数字字符+1
	JMP COU			;


DISP:
	MOV DX,CX
	ADD DL,'0'
	MOV AH,2
	INT 21H
    
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START

  • 10
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值