彙編原理實驗 --類型統計(字母,數字,其他字符的個數)

實驗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
輸出結果如圖:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章