當前位置:編程學習大全網 - 編程語言 - 匯編程序設計

匯編程序設計

; 本程序通過編譯,運行正確

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

; -----------------------------------------

; 功能:輸出回車換行

Enter_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

Enter_CTLF endp

; -----------------------------------------

; 功能:統計小寫字母個數

; 入口:SI=字符串地址

; 出口:BL=小寫字母個數

Stitics proc Near

push cx

push ax

lodsb ;讀入實際輸入的字符個數

mov cl,al

xor ch,ch

xor bl,bl ;計數器清零

@@Stitics: lodsb ;讀入壹個字符

cmp al,'a'

jb $+8

cmp al,'z'

ja $+4

inc bl ;是小寫字母,計數

loop @@Stitics

pop ax

pop cx

ret

Stitics 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 dup(?)

Dec_ASCII EndP

; -----------------------------------------

Prompt_Str1 db 'Please input the first string: $'

Prompt_Str2 db 'Please input the second string: $'

Yes_nO db 'yes.$no.$'

String_Equ db 7,7,7,'Two string equal: $'

DownCases db 'The downcase alphabets: $'

Longer db 'The longer: $'

Start: push cs

pop ds

push cs

pop es ;使數據段、附加段與代碼段同段

Output Prompt_Str1 ;提示輸入第壹個字符串

lea dx,String1

mov ah,0ah

int 21h

call Enter_CTLF ;輸出壹個回車、換行

Output Prompt_Str2 ;提示輸入第壹個字符串

lea dx,String2

mov ah,0ah

int 21h

call Enter_CTLF ;輸出壹個回車、換行

call Enter_CTLF ;輸出壹個回車、換行

cld

Output String_Equ ;提示字符串是否相等

lea si,String1[1] ;第壹個字符串實際輸入字符個數

lodsb ;讀入這個數字

lea di,String2[1] ;第二個字符串實際輸入字符個數

cmp al,[di] ;字符個數相等?

jnz No_Equal1 ;字符個數不等,則不等,顯示:no.

mov cl,al

xor ch,ch

inc di

repe cmpsb ;字符個數相等,看每個字符是否相同

jz $+12; 相等,看兩個字符串的英文小寫字母個數是否相同

No_Equal1: Output Yes_nO[5] ;兩個字符串不相等,顯示:no.

jmp $+10

Output Yes_nO ;兩個字符串相等,顯示:yes.

call Enter_CTLF ;輸出壹個回車、換行

Output DownCases ;提示小寫字母個數是否相等

lea si,String1[1] ;第壹個字符串實際輸入字符個數

call Stitics ;統計小寫字母個數

mov bh,bl ;暫存String1小寫字母個數

lea si,String2[1] ;第二個字符串實際輸入字符個數

call Stitics ;統計小寫字母個數

cmp bh,bl ;小寫字母個數相等?

jz $+12 ;相等,顯示:yes.

Output Yes_nO[5] ;兩個字符串不相等,顯示:no.

jmp $+10

Output Yes_nO ;兩個字符串相等,顯示:yes.

call Enter_CTLF ;輸出壹個回車、換行

Output Longer ;提示字符串較長者字符個數

mov al,String1[1] ;第壹個字符串實際輸入字符個數

cmp al,String2[1] ;第二個字符串實際輸入字符個數

jae $+5 ;字符串較長,顯示字符串長度

mov al,String2[1] ;裝入字符串長度較大者

xor ah,ah

call Dec_ASCII ;把AX中的二進制無符號數轉換成顯式的十進制ASCII碼,並送顯示屏顯示

Exit_Proc: mov ah,4ch ;結束程序

int 21h

String1 db 50,?,50 dup(?)

String2 db 50

Code ENDS

END Start ;編譯到此結束

  • 上一篇:uniapp圖片壓縮插件-如何破解uniapp寫的應用
  • 下一篇:描寫午後的優美句子
  • copyright 2024編程學習大全網