/masmplus/ 很好用 創建工程選擇DOS
有什麽不知道hi我
.model small
.stack 200h
.data
dwBig dw 0 ;大寫字母緩沖區地址
dwSmall dw 0 ;小寫字母緩沖區地址
dwNumber dw 0 ;數字緩沖區地址
dwOther dw 0 ;其他符號緩沖區地址
szMsg db 'XkGjMc9+8-7*6/5(2)h!F~A?z',13,10,13,10,'$' ;讀取的字串符
szBuffBig db 100 dup (0) ;大寫字母緩沖區
szEnter1 db 13,10
szBuffSmall db 100 dup (0) ;小寫字母緩沖區
szEnter2 db 13,10
szBuffNumber db 100 dup (0) ;數字緩沖區
szEnter3 db 13,10
szBuffOther db 100 dup (0) ;其他符號緩沖區
szEnter4 db 13,10,'$'
.CODE
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;排序子程序,帶入參數si將要排序的字串符地址
_PaiXu proc
push si
push di
push bx
mov di,si
xor al,al
@@:
inc di
cmp BYTE ptr [di-1],al
jnz @B ;得到字串符結尾(結尾是零)
mov cx,di
sub cx,si
dec cx
dec cx ;得到排序次數
mov dx,cx
mov bx,si
@loop2: ;外循環
push cx
mov si,bx
mov cx,dx
@loop1: ;內循環
mov al,BYTE ptr [si]
cmp al,BYTE ptr [si+1]
jbe @Small ;左邊數大於右邊數則交換
xchg al,BYTE ptr [si+1]
mov BYTE ptr [si],al ;從小到大排序
@Small:
inc si
loop @loop1
pop cx
loop @loop2
pop bx
pop di
pop si
ret
_PaiXu endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
START:
mov ax,@data
mov ds,ax
lea dx,szMsg
mov ah,9
int 21h ;顯示讀取的字串符
lea ax,szBuffBig
mov dwBig,ax
lea ax,szBuffSmall
mov dwSmall,ax
lea ax,szBuffNumber
mov dwNumber,ax
lea ax,szBuffOther
mov dwOther,ax ;將各緩沖區的地址存放起來
lea si,szMsg ;設要讀取的字符串為源地址
mov cx,25 ;設置讀取字串符的長度(字節數)
cld ;置DF標誌位為零
@Search:
lodsb ;將si指向地址的字節內容存放到al中
cmp al,30h ;0
jb @Next1;小於則跳轉
cmp al,39h ;9
ja @Next1;大於則跳轉
inc dwNumber
mov di,dwNumber
mov BYTE ptr [di-1],al ;如果是數字存放到數字緩沖區
jmp @ret
@Next1:
cmp al,41h ;A
jb @Next2
cmp al,5ah ;Z
ja @Next2
inc dwBig
mov di,dwBig
mov BYTE ptr [di-1],al ;如果是大寫字母存放到大寫字母緩沖區
jmp @ret
@Next2:
cmp al,61h ;a
jb @Next3
cmp al,7ah ;z
ja @Next3
inc dwSmall
mov di,dwSmall
mov BYTE ptr [di-1],al ;如果是小寫字母存放到小寫字母緩沖區
jmp @ret
@Next3:
inc dwOther
mov di,dwOther
mov BYTE ptr [di-1],al ;其他字符存放
@ret:
loop @Search ;CX不為零(字串符沒有查找完畢)開始下壹次查找
lea si,szBuffSmall
call _PaiXu
lea si,szBuffNumber
call _PaiXu
lea si,szBuffBig
call _PaiXu
lea si,szBuffOther
call _PaiXu ;排序
lea dx,szBuffBig ;顯示分類好的字串符
mov ah,9
int 21h
;暫停,任意鍵關閉
mov ah,1
int 21h
mov ah,4ch ;結束,可以修改al設置返回碼
int 21h
END START