汇编语言(二十八)之统计单词
生活随笔
收集整理的這篇文章主要介紹了
汇编语言(二十八)之统计单词
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
輸入一行字符串,統計單詞SUN出現的個數
程序運行:
?
代碼:
datas segmentENG_max_length db 0ffhENG_length db 0ENG db 100h dup(?)eng_len dw 0SUN db 'SUN'sun_len dw $-SUNcount dw 0 input db 'input a line:$'output db 0DH,0AH,'SUN count:$' datas endsstacks segment stackdb 100h dup(?)stacks endscodes segmentassume cs:codes,ds:datas,ss:stacks main proc far start:push dsmov ax,0hpush axmov ax,datas ;初始化dsmov ds,axlea dx,inputmov ah,9int 21hlea dx,ENG_max_lengthmov ah,10 int 21hmov al,ENG_lengthxor ah,ah mov eng_len,ax xor si,sixor di,dimov bp,sun_len ;取查找單詞的長度dec bp ;長度減1,指向SUN最后一單元mov cx,eng_len ;取ENG的長度mov dx,0 ;記錄查找SUN出現的次數s:mov al,ENG[si]cmp SUN[di],al ;比較SUN[di]與aljnz not_same ;若不相等,跳轉cmp di,bp ;判斷di是否指向SUN最后一單元jz match ;若是,則進行單詞左右匹配inc di ;若不是,di加1jmp next ;跳轉至下一次循環match: ;單詞左右匹配mov di,si ;取單詞的左邊索引sub di,sun_len cmp di,0 ;判斷左邊索引是否小于0jl judge_right ;若小于0,則判斷單詞右邊索引mov bl,ENG[di] and bl,11011111b ;將單詞左邊的字母轉成大寫cmp byte ptr bl,'A' ;判斷該字母是否小于'A'jb judge_right ;若小于'A',則判斷單詞右邊索引cmp byte ptr bl,'Z' ;判斷該字母是否大于'Z'ja judge_right ;若大于'Z',則判斷單詞右邊索引jmp not_same ;否則跳轉至不匹配judge_right: ;單詞的右匹配mov di,si ;取單詞的右匹配索引inc di cmp di,eng_len ;判斷右匹配索引是否越界jz same ;若越界,則匹配mov bl,ENG[di] ;右匹配的字母轉換成大寫and bl,11011111b cmp byte ptr bl,'A' ;判斷該字母是否小于'A'jb same ;若小于'A',則匹配cmp byte ptr bl,'Z' ;判斷該字母是否大于'Z'ja same ;若大于'Z',則匹配jmp not_same ;否則不匹配same: inc dx ;匹配,則計算器加1mov di,0 ;di索引置0jmp next ;跳轉置下一次循環not_same: xor di,di ;di置0next:inc si loop smov count,dxlea dx,outputmov ah,9int 21hmov ax,countcall decimalretmain endp decimal proc near uses ax bx cx dx mov bx,10 mov cx,0 de:xor dx,dx div bx push dx inc cx cmp ax,0jnz de de1:pop dxadd dl,30hmov ah,2int 21h loop de1retdecimal endp codes endsend main?
總結
以上是生活随笔為你收集整理的汇编语言(二十八)之统计单词的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阿里大调整后首个双11拼了:打通微信 重
- 下一篇: 汇编语言(二十九)之数值的二进制和十进制