mov ah,9h int 21h call crlf pop ax ret INFO ENDP
;回車換行的過程 CRLF PROC NEAR push ax push dx mov dl,0dh mov ah,2h int 21h mov dl,0ah mov ah,2h int 21h pop dx pop ax ret CRLF ENDP ;輸入的過程
INPUT PROC NEAR mov ah,1 int 21h ret INPUT ENDP
;檢查是否非數字字符的過程~ CHECK PROC NEAR push dx
cmp al,30h ;如果鍵入的字符ASCII值小於0的ASCII值30H, jb WRONG ;剛轉入WRONG,作錯誤處理
cmp al,39h ;如果鍵入的字符ASCII值大於9的ASCII值39H, ja WRONG ;則轉入WRONG,作錯誤處理 mov cl,al ;把合法的數字ASCII值放入CL中 jmp next
;錯誤處理過程,提示,並等待用戶鍵入新值 WRONG:
mov dx,offset info2 call info call input call check next:
pop dx ret
CHECK ENDP
;根據用戶鍵入的數字,響鈴相應的次數 BELL PROC NEAR push dx
sub cl,30h ;鍵入數字的ASCII值減去30,才能成為次數 mov dl,7h mov ah,2 re:
int 21h dec cx jnz re pop dx ret BELL ENDP CODE ENDS END START 6.程序實現。(末经调试) .model small .data
m db dup (20個數)
n db 20,0,20 dup (?) ;用于存放负数的最大容量为20的数组 p db 20,0,20 dup (?) ;同上,用于存放正数 .code
main proc far start:
mov ax,@data mov ds,ax
call check_store ;判斷數的正負並存入相應數組 call display ;在屏幕上顯示 main endp
check_store proc near push ax push bx push cx
mov cx,20 ;循環次數放入CX cld ;使SI向增加的方向移動 lea si,m ;M的偏移地址放入SI again:
mov al,[si] ;M中的數依次放入AL中 cmp al,0 ;並且依次和0比較
jl store_in_n ;如果小於0,則存入負數組 jg store_in_p ;如果大於0,剛存入正數組 dec cx
jnz again jz exit store_in_n : push bx
mov bl,n[1] ;N中已有數的個數放入BL中,
mov n[bl+1],al ;把AL中負數存入數組N的最後一個數字的下一字節 pop bx jmp again
store_in_p STORE—IN—P push bx
mov bl,p[1] mov p[bl+1],al pop bx jmp again exit:
pop cx pop bx pop ax ret check_store endp display proc near push cx lea si,n[2]
mov cl,n[1] ;數組N中數的個數放入CL cld
mov ah 2
re_display_n: ;依次顯示各個負數 mov dl,[si] int 21h
mov dl,20h ;各個數之間用空格間隔 int 21h dec cl
jnz re_display_n ;下面四行用來回車和換行 mov dl,0dh int 21h mov dl,0ah int 21h ;同上面負數的顯示, lea si,p[2] mov ch,p[1] cld re_display_p:
mov dl,[si] int 21h mov dl,20h int 21h dec ch
jnz re_display_p pop cx ret display endp end start 7.程序實現。(未調試) .model small .data
data db 100d dup (100個數). .code start:
mov ax,@data mov ds,ax
mov cx,101d ;循環次數
mov bl,0feh ;初始化BX為最大的八位無符號正數 mov si,offset data cld again:
dec cx
jz finish ;全部判斷完成 mov al,[si] cbw
div 2 ;每個數除以2
cmp al,0 ;佘數不為0的,不是偶數 jne again
cmp bl,[si] ;每次比較, jl again ;較小的數,
mov bl,[si] ;代替BX中原來的數 jmp again finish:
mov ax,0
mov al,bl ;把最小偶數放到AX中 end start 8.程序實現。(未調試) .model samll .code start:
mov ch,9 ;比較次數放入CH
mov cl,2 ;每次AX循左移的次數放入CL