博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
随机产生一系列的ascii码字符,将其分类输出
阅读量:4659 次
发布时间:2019-06-09

本文共 3166 字,大约阅读时间需要 10 分钟。

;
本程序功能是实现:随机产生一系列的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

 

转载于:https://www.cnblogs.com/linuxhan/archive/2012/12/09/3017176.html

你可能感兴趣的文章
C/C++心得-结构体
查看>>
函数名作为参数传递
查看>>
apt-get for ubuntu 工具简介
查看>>
数值计算算法-多项式插值算法的实现与分析
查看>>
day8-异常处理与网络编程
查看>>
Python基础-time and datetime
查看>>
shell脚本练习01
查看>>
WPF图标拾取器
查看>>
通过取父级for循环的i来理解闭包,iife,匿名函数
查看>>
HDU 3374 String Problem
查看>>
数据集
查看>>
[Leetcode] unique paths ii 独特路径
查看>>
HDU 1217 Arbitrage (Floyd + SPFA判环)
查看>>
IntelliJ idea学习资源
查看>>
Django Rest Framework -解析器
查看>>
ExtJs 分组表格控件----监听
查看>>
Hibernate二级缓存配置
查看>>
LoadRunner常用术语
查看>>
关于jedis2.4以上版本的连接池配置,及工具类
查看>>
记忆讲师石伟华微信公众号2017所有文章汇总(待更新)
查看>>