编写一个汇编语言程序,实现先输入一个0-100的数N,然后输入N个数,以回车结束每个数字并显示在屏幕上,再将未排序前和从小到大排序后的结果显示在屏幕上。实验结果应达到如下的一个界面: 本次汇编语言程序设计要求的是对n个数进行排序,首先我们要定义程序结果的那些字符串以及这个n个数的一个数组。同时我们应该设置一个堆栈段来实现数的显示。 接着我们可是程序的正式开始部分,我们通过9号调用来输出我们所要展示的字符串,然后用换行符来换行,接着我们输入数字n,循环输入数字的每一位并显示出来,然后将数字n保存在cx里面。这其中应该通过1号调用程序来实现数字的回显。 然后我们要从低位到高位,把数字n进行压栈操作,保留这个数字的一个顺序之后再出栈来显示出这个数字n。再通过把数字n放在cx里面,可以作为后面循环输入n个数字的一个loop的次数。 接着我们通过输入n个data并保存在数组array里面。data的输入和输出和前面的n是一样的道理。最后我们通过冒泡排序对这个顺序来重排,而冒泡排序采用的是是书上的例题的程序,使用的是一种双重循环的方法。 最后我们再通过排序后的这样一个数组输出,输出的方法也是和前面的方法是大致相同的。
实验内容
实验过程
实验结果演示:
附上代码:
DATAS SEGMENT S1 db 'How many data to input?(less than equal to 100)','$' S2 db 'Input ','$' S3 db ' data,press[Enter] after input each data.','$' S4 db 'Before sorting:','$' S5 db 'After sorted:','$' array dw 100 dup(?) DATAS ENDS STACKS SEGMENT stack db 100h dup(?) STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX XOR CX,CX MOV DX,OFFSET S1 MOV AH,09H INT 21H;9号调用 输出字符串S1 MOV DL,0AH;换行符 MOV AH,02H;2号调用 DL等于输出字符 INT 21H MOV DL,10 L1:;(循环)输入数字n并显示 数字n保存在CX(可以loop) MOV AH,1;1号调用 键盘输入回显 AL=输入字符 INT 21H CMP AL,0DH;与回车比较(0AH是换行) je L2;回车则跳L2 SUB AL,30H AND AX,00FFH;AH清0 AL不变 MOV BX,AX MOV AX,CX MUL DL;8位乘法 AX<- AL*DL 十位数乘10 ADD AX,BX;十位加个位 MOV CX,AX;先把n保存到CX AX用来调用 CMP BL,0DH JNZ L1 L2: MOV DL,0AH MOV AH,02H;2号调用 DL等于输出字符 INT 21H MOV DX,OFFSET S2; MOV AH,09H INT 21H;9号调用 输出字符串S2 MOV AX,CX MOV BH,10 MOV BL,0 XOR DX,DX L3:;从低位到高位 把n压栈 DIV BH;AL<-AX/BH AH<-AX%BH MOV DL,AH ADD DX,30H PUSH DX INC BL;BL计数n的位数 AND AX,00FFH CMP AL,0 JNZ L3 L4:;输出n POP DX MOV AH,02H;二号调用显示n INT 21H DEC BL CMP BL,0 JNZ L4 MOV DX,OFFSET S3 MOV AH,09H INT 21H MOV DL,0AH MOV AH,02H INT 21H MOV SI,0 MOV DI,10 XOR DX,DX L6:;(循环)输入一个data MOV AH,01H INT 21H CMP AL,0DH JE L7 SUB AL,30H AND AX,00FFH MOV BX,AX MOV AX,DX MUL DI ADD AX,BX MOV DX,AX CMP BL,0DH JNE L6 L7:;输入n个data保存在数组内 MOV array[SI],DX ADD SI,2 MOV DL,0AH MOV AH,02H INT 21H XOR DX,DX LOOP L6 MOV DX,OFFSET S4 MOV AH,09H;输出S4 INT 21H SHR SI,1;SI/2 MOV CX,SI MOV SI,0 L8: MOV AX,array[SI] MOV BH,10 MOV BL,0 XOR DX,DX L9:;把1个data(循环)压栈,BL计数位数 DIV BH;AL<-AX/BH AH<-AX%BH mov DL,AH ADD DX,30H PUSH DX INC BL AND AX,00FFH CMP AL,0 JNZ L9 L10:;把一个data(循环)出栈 POP DX MOV AH,02H INT 21H DEC BL CMP BL,0 JNZ L10 MOV DL,32 MOV AH,02H INT 21H ADD SI,2 LOOP L8 MOV DL,0AH MOV AH,02H INT 21H sort:;冒泡排序 SHR SI,1 MOV DX,SI MOV CX,SI DEC CX loop1: mov di,cx mov bx,0 loop2: mov ax,array[bx] cmp ax,array[bx+2] jle continue xchg ax,array[bx+2] mov array[bx],ax continue: add bx,2 loop loop2 mov cx,di loop loop1 MOV CX,DX MOV SI,0 MOV DX,OFFSET S5 MOV AH,09H INT 21H L11:;排序后输出 MOV AX,array[SI] MOV BH,10 MOV BL,0 XOR DX,DX L12: DIV BH MOV DL,AH ADD DX,30H PUSH DX INC BL AND AX,00FFH CMP AL,0 JNZ L12 L13: POP DX MOV AH,2 INT 21H DEC BL CMP BL,0 JNZ L13 MOV DL,32 MOV AH,02H INT 21H ADD SI,2 LOOP L11 MOV AH,4CH INT 21H CODES ENDS END START
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算