程式接收使用者鍵入的一行字元(用回車符結束),並按字母,數字及其他字元分類計數,然後將結果存入以letter,digit和other為名的儲存單元中。
首先呼叫dos的9號功能呼叫輸出「please input the string:」字樣,提示使用者輸入字串,然後用dos的10號功能呼叫讀入字串至緩衝區,同時把字元個數送cl暫存器,用作迴圈控制次數。
用si指向字串的第乙個字元,然後通過ascii碼值的比較判斷當前字元屬於哪一類,該型別計數變數加一,si做自加一的操作,接著向後比較。
此實驗的難點在於如何設計子程式和安排跳轉指令。
筆者做的創新點在於最後顯示不同型別字元個數使用的是十進位制資料,如何用十進位制資料顯示出各種字元的個數,**下面的說明中將做進一步解釋。
;此處輸入資料段**
char db ?
digit db ?
other db ?
string label byte
max db 80
act db ?
print db 13,10
,'please input the string:'
,'$'
mess1 db 13,10
,'the total number of char : '
,'$'
mess2 db 13,10
,'the total number of digit : '
,'$'
mess3 db 13,10
,'the total number of other : '
,'$'
datas ends
stacks segment
;此處輸入堆疊段**
stacks ends
codes segment
assume cs:codes,ds:datas,ss:stacks
start:
mov ax,datas
mov ds,ax
;此處輸入**段**
push ds
sub ax,ax
push ax
mov es,ax
;對計數變數都賦立即數0
mov char,0
mov digit,
0 mov other,
0 ;提示使用者輸入字串
lea dx,print
mov ah,
09h int 21h
;輸入的字串送緩衝區
lea dx,string
mov ah,
0ah int 21h
sub ch,ch
mov cl,
[string+1]
lea si,string+
2 cmpstring:
mov al,
[si]
cmp al,
'0' jb other1;小於0為其他,
0到9為數字
cmp al,
'9' ja char1
inc digit
jmp loopoop
char1:
cmp al,
'a' jb other1 ;接上面,判斷9之後,大於9,小於a為其他,a到z為字母
cmp al,
'z' ja char2
inc char
jmp loopoop
char2:
cmp al,
'a';接上面,判斷z之後,大於z,小於a為其他,a到z為字母
jb other1
cmp al,
'z' ja other1
inc char
jmp loopoop
other1:
inc other
loopoop:
inc si
dec cl
cmp cl,
0 jz print1
jne cmpstring
print1:
;先顯示char型別統計結果
lea dx,mess1
mov ah,
09h int 21h
mov al,
char
call display
;顯示digit型別的統計結果
lea dx,mess2
mov ah,
09h int 21h
mov al,digit
call display
;顯示other型別的統計結果
lea dx,mess3
mov ah,
09h int 21h
mov al,other
call display
mov ah,
4ch int 21h
display:
mov ah,
0 mov bl,
10 div bl
add al,
30h
mov dl, al
mov bh, ah
mov ah,
02h
int21h
mov al, bh
add al,
30h mov dl, al
mov ah,
02h int
21h
ret
codes ends
end start
【對於display子程式的說明】:該子程式用於把統計到的十六進製制資料轉換成十進位制資料輸出。比如說al=15h,即21,表示某一型別字元數量,然後,這個過程就是,ax=0015h(21),除以bl,bl值為10則除完了的結果為2餘1,則ah=01,al=02, 即ax=0102h,那麼al+30h即為表示該數字的ascii碼值,則ax=0132h,dl=32,bh=01,顯示輸出dl,則顯示32碼對應的數字,2。把01給al,然後算出ascii碼,然後給dx,然後顯示,這樣就達到了用十進位制數字顯示統計之後各類字元數量的目的。
組合語言學習筆記
學習參考資料 大灰狼 講彙編 資料匯流排,位址匯流排,控制匯流排。位址匯流排有多少條就決定了cpu最大的記憶體使用量。80386有32位位址匯流排,所以它的定址能力就是4g.暫存器 通用暫存器,段暫存器,ax暫存器 通用暫存器,存放資料。高位位元組ah,低位位元組al。實體地址表示方法 位址加法器,...
組合語言學習筆記
cs ip是指向程式執行的位置 code segment ds 儲存記憶體中取資料的位址,data segment ss sp是指向堆疊的位置 stack segment cx 裡儲存的是loop執行的標誌 loop執行時,cx cx 1,若此時cx裡值為0,則跳出loop,否則繼續loop 初始 ...
組合語言學習筆記
編譯下面的程式,生成列表檔案,觀察標號在機器碼中變成了什麼?小組中的同學都說一說,說出你看到了什麼,說出你的疑問,讓小夥伴們一起解決。下面是程式 這個程式的功能沒有意義,只用於觀察程式中的標號 assume cs codesg,ds datasg datasg segment a db 1,2,3,...