汇编原理实验 --类型统计(字母,数字,其他字符的个数)

实验3: (类型统计,统计字母,数字,其他字符在一个句子中出现的次数)

算法设计:用三个变量分别记录用户输入数字类型,字母类型和其他类型的个数。根据ACSII码判断类型,遍历完整个句子后调用十进制数输出子程序dispdec输出统计数字

程序实现:定义缓冲区:存放用户输入的句子,用digit,letter,other分别代表统计出的数字,字母,其他字符的个数,都初始化为0。用bx指向用户输入句子的首地址,然后判断是30h~39h则digit自增,还是41h~5Ah或61h~7Ah则letter自增,否则other自增,然后bx自增,不断循环判断,循环次数为句子长度,即之前cx=用户输入句子的长度。最后输出结果

DATAS SEGMENT
msg1 db 'enter sentence:$'

keepcin db 80
		db 0
		db 80 dup(0)
		
letter  db 0
digit   db 0
other   db 0

DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    
    mov dx,offset msg1
    call print   ;"entersentence"
    
    mov dx,offset keepcin
    call cin
    
    mov bx,offset keepcin+1
    ;call printresult
    mov cl,[bx]        ;输入句子的长度
    
again1:
    inc bx
    mov al,[bx]
    cmp al,30h         
    jb  otherresult
    cmp al,40h
    jb  digitresult
    cmp al,41h
    jb  otherresult
    cmp al,5BH
    jb  letterresult
    cmp al,61H
    jb  otherresult
    cmp al,7bH
    jb  letterresult
    jmp otherresult

letterresult:
    inc letter
    jmp loopnext
digitresult:
    inc digit
    jmp loopnext
otherresult:
    inc other
loopnext:
    loop again1

;输出结果
    mov dh,0
    mov dl,letter
    call dispdec
    call printnewline
    mov dl,digit
    call dispdec
    call printnewline
    mov dl,other
    call dispdec
   
    MOV AH,4CH
    INT 21H
    
    
;打印固定字符串
print proc
    push ax
    mov ah,09h
    int 21h
    pop ax
    ret
print endp

;用户输入
cin proc
	 push ax
    mov ah,0AH
    int 21h
    pop ax
    call printnewline
    ret
cin endp
;输出换行
printnewline proc
	push ax
	push dx
	mov ah,02h
	mov dl,0dh
	int 21h
	mov dl,0ah
	int 21h
	pop dx
	pop ax
	ret
printnewline endp    
;十进制输出,入口参数dx
dispdec proc
		push ax
		push bx
		push cx
		push dx
        mov ax,dx
        xor dx,dx
        mov bx,10
        mov cx,0
a:
        cmp ax,10
        jb ok
        div bx
        add dl,30h
        push dx
        xor dx,dx
        inc cx
        jmp a
ok:
        add al,30h
        push ax
        inc cx
b:
        pop dx
        mov ah,2
        int 21h
        loop b
        pop dx
        pop cx
        pop bx
        pop ax
        ret
dispdec endp
CODES ENDS
    END START
输出结果如图:


  • 6
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值