❶ 匯編語言程序設計
; 本程序通過編譯,運行正確
Code Segment
Assume CS:Code,DS:Code
; -----------------------------------------
; 功能:顯示指定地址(Str_Addr)的字元串
; 入口:
; Str_Addr=字元串地址(要求在數據段)
; 用法: Output Str_Addr
; 用法舉例:Output PromptStr
Output MACRO Str_Addr
lea dx,Str_Addr
mov ah,9
int 21h
EndM
; -----------------------------------------
; 功能:輸出回車換行
Output_CTLF proc Near
push ax
push dx
mov ah,02h
mov dl,0dh
int 21h
mov dl,0ah
int 21h
pop dx
pop ax
ret
Output_CTLF endp
; -----------------------------------------
; 功能:把AX中的二進制無符號數轉換成顯式的十進制ASCII碼,並送顯示屏顯示
; 入口:AX=二進制數
; 出口:在當前游標位置顯示轉換後的ASCII碼數字
Dec_ASCII Proc Near
push dx
push bx
push di
mov bx,10
lea di,@@Temp_Save[6]
mov byte ptr [di],'$'
dec di
cld
@@Divide: xor dx,dx
div bx
or dl,30h
mov [di],dl
dec di
test ax,0ffffh
jnz @@Divide
inc di
push di
pop dx
mov ah,9
int 21h
pop di
pop bx
pop dx
ret
@@Temp_Save db 7 p(?)
Dec_ASCII EndP
; -----------------------------------------
; 功能:在N個位元組數組中查找字元CHAR,並記錄該字元出現的次數。
; 入口參數:
; si=一個N位元組數的字元串TABLE首地址
; cx=字元串長度,N
; ah=要查找的字元
; 出口參數:bl=該字元出現的次數
Find_Chr Proc Near
@@Find_Chr: lodsb
cmp al,ah ;是指定的字元?
jnz $+4 ;不是
inc bl ;是,計數
loop Find_Chr ;判斷下一個字元
ret
Find_Chr EndP
; -----------------------------------------
Prompt_Str db 'Please input a string: $' ;輸入字元串提示信息
No_String db 'The string is null.$' ;空字元串提示信息
Prompt_Chr db 'Please input a charactor: $' ;輸入字元提示信息
Prompt_CNT db 'The specified charactor in th string TABLE: $' ;指定字元出現次數提示信息
Start: push cs
pop ds
push cs
pop es ;使數據段、附加段與代碼段同段
cld
Input_Str: Output Prompt_Str ;提示輸入字元串
lea dx,TABLE ;字元串緩沖區地址
mov ah,0ah
int 21h
call Output_CTLF ;輸出一個回車、換行
lea si,TABLE[1] ;實際輸入的字元串長度地址
lodsb ;讀入這個長度N
test al,0ffh ;N=0?
jnz Read_Chr ;否,轉去輸入一個字元
Output No_String ;空字元串提示信息
jmp Input_Str ;重新輸入字元串
Read_Chr: Output Prompt_Chr ;提示輸入字元
mov ah,1 ;從鍵盤輸入一個字元
int 21h
cmp al,1bh
jz Exit_Proc ;若按鍵為Esc,則結束程序
cmp al,20h ;控制及通訊字元?
jb Read_Chr ;重新輸入字元
call Output_CTLF ;輸出一個回車、換行
call Output_CTLF ;輸出一個回車、換行
push ax
Output Prompt_CNT ;提示指定字元出現次數提示
pop ax
mov ah,al ;指定的字元送ah保存
lea si,TABLE[1] ;實際輸入的字元串長度地址
lodsb ;讀入這個長度N
mov cl,al
xor ch,ch ;N=cx
xor bl,bl ;計數器,計數指定字元在字元串中出現的次數
call Find_Chr ;在N個位元組數組中查找字元CHAR,並記錄該字元出現的次數
mov al,bl
xor ah,ah
call Dec_ASCII ;把AX中的二進制無符號數轉換成顯式的十進制ASCII碼,並送顯示屏顯示
Exit_Proc: mov ah,4ch ;結束程序
int 21h
TABLE db 255 ; 字元串緩沖區
Code ENDS
END Start ;編譯到此結束