;
本程序功能是实现:随机产生一系列的ascii码字符,将其分类输出
DATAS SEGMENT ;此处输入数据段代码Str1 db 'Please input a number:','$'Str2 db 'output the number:','$'Str3 db 'output the capital word:','$'Str4 db 'output the small word:','$'Str5 db 'output the other:','$'StrEnter db 0dh,0ah,'$'Buf db 5 dup(?);DecBuf db 5 dup(?)NU db 100 dup(?)CD db 1000 dup(?)SD db 1000 dup(?)OTHER db 1000 dup(?)Num dw 0A dw 0 countNu dw 0countCD dw 0countSD dw 0countOt dw 0 DATAS ENDSSTACKS SEGMENT ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX ;此处输入代码段代码 lea dx,Str1;显示提示:输入要产生随机数的个数 mov ah,9 int 21h mov cx,5;输入数值部分,最大输入5位的数 call EnterN lea dx,strEnter mov ah,9 int 21h ;将键盘输入的数转化为数值 lea si,Buf mov ax,0 ;mov Num,0 mov A,0 mov cx,Numlpout: mov ax,A mov bx,10 mul bx ;sub ax,0030h mov A,ax mov al,[si] mov ah,0 sub al,30h add A,ax inc si loop lpout lea si,CD lea di,SD lea bp,OTHER lea bx,NU mov cx,A;随机数产生函数 rand: xor al,al;异或运算 out 43h,al;I/O端口输出语法: OUT {端口号│DX},累加器 in al,40h;I/O端口输入语法: IN 累加器, {端口号│DX} cmp al,126;比较.(两操数作减法,仅修改标志位,不回送结果). ja rand xor ah,ah;异或运算 call Sort ;mov dl,20h;加了这句代码,经测试,发现数据更离散,否则不离散,比较郁闷 mov dl,al mov ah,2 int 21h loop rand lea dx,strEnter mov ah,9 int 21h lea dx,Str2;显示提示:输 的个数 mov ah,9 int 21h mov cx,countNu cmp cx,0;判断是否为零为零则不输出 jz lpCD lea si,NU outNu: mov dx,[si] mov ah,2 int 21h ; inc si loop outNulpCD: lea dx,strEnter mov ah,9 int 21h lea dx,Str3;显示提示:输 的个数 mov ah,9 int 21h ;显示大写字母个数的,用来调试时用 ;mov dx,countCD ;add dx,0030h ;mov ah,2 ;int 21h ; mov cx,countCD lea si,CD outCD: mov dx,[si] mov ah,2 int 21h inc si loop outCD lea dx,strEnter mov ah,9 int 21h lea dx,Str4;显示提示:输 的个数 mov ah,9 int 21h ;显示小写字母个数的,用来调试时用 ;mov dx,countSD ;add dx,0030h ;mov ah,2 ;int 21h mov cx,countSD lea si,SD outlp: mov dx,[si] mov ah,2 int 21h inc si loop outlp lea dx,strEnter mov ah,9 int 21h lea dx,Str5;显示提示:输 的个数 mov ah,9 int 21h ;显示其他字符个数的,用来调试时用 ;mov dx,countOt ;add dx,0030h ;mov ah,2 ;int 21h ; mov cx,countOt lea si,OTHER outOt: mov dx,[si] mov ah,2 int 21h inc si loop outOt lea dx,strEnter mov ah,9 int 21h jmp code_exit;函数Sort PROC ;PUSH AX PUSH BX PUSH CX PUSH DX CMP AL,'0' jb lpother lpnum: cmp al,'9' ja lpBword mov [bx],al inc bx inc countNu jmp sort_exitlpBword: cmp al,41h jb lpother cmp al,5ah ja lpSword mov [si],al inc si inc countCD jmp sort_exitlpSword: cmp ax,61h jb lpother cmp ax,7ah ja lpother mov [di],al inc di inc countSD jmp sort_exit lpother: mov [BP],al inc BP inc countOt ;jmp sort_exitsort_exit: POP DX POP CX POP BX ;POP AX RETSort ENDP ;函数的传值:CX:输入数的位数,EnterN PROC PUSH DX PUSH BX PUSH AX lea si,Buf;输入数值部分,最大输入5位的数lp1:mov ah,7 int 21h cmp al,0dh jz lp_ex ;只能输入0-9之间的数 cmp al,'0' jb lp1 cmp al,'9' ja lp1 ;每次输入的数都存入buf中 mov [si],al inc si inc Num mov ah,2 mov dl,al int 21h loop lp1lp_ex: POP AX POP BX POP DX RETEnterN ENDP code_exit: MOV AH,4CH INT 21HCODES ENDS END START