汇编语言程序设计实验(五)——嵌套循环打印ACSII表

实验目的及内容

理解循环程序结构的特点,掌握循环结构程序的编写。

一.单层循环实验

(1) 验证循环结构的斐波那契数列程序(教材例4-18),给出最后一个显示的数字。编写求最大N值的自然数求和程序(循环结构),具体要求是:进行自然数相加(1+2+3+……+N),如果(无符号整数的)累加和用一个32位寄存器存储,求出(显示)有效累加和的最大值及对应的最大N值。

1.斐波那契数列

					include io32.inc
.data

.code
start:
		mov eax,1		;首元素为1
		call dispuid	;显示元素
		call dispcrlf	;换行
		call dispuid	;显示元素
		call dispcrlf	;换行
		mov ebx,eax		;次元素也为1
again:
		add eax, ebx	;前二元素加和
		jc done			;超出32位进位范围为止
		call dispuid	;显示元素
		call dispcrlf	;换行
		xchg eax,ebx	;eax和ebx数据互换,进行下一轮累加和
		jmp again	
done:	exit 0 
		end start
		
		
		
		

运行结果:
在这里插入图片描述

2.自然数累加和

										include io32.inc
.data
overmsg	byte 'The SUM and N is: '
.code
start:	mov eax,1
		mov ebx,0
again:	
		mov ecx,eax
		add eax,ebx		
		jc over	
		call dispuid 
		call dispcrlf
		inc ebx
		jmp again		
over:	
		mov eax, offset overmsg		;汇报越界语句
		call dispmsg
		dec ecx
		mov eax, ecx				;汇报越界前有效累加最大和
		call dispuid
		call dispcrlf
		dec ebx		
		mov eax, ebx				;汇报对应的最大N值
		call dispuid
done:	exit 0 
		end start

运行结果:
在这里插入图片描述

二.嵌套循环实验

验证多重循环的冒泡法排序程序(教材例4-19),编写显示ASCII表程序(教材习题4.27),并运行正确。

1.冒泡排序法

			include io32.inc
			.data
array	dword 587,-632,777,234,-34
count	= lengthof array
			.code
start:		mov ecx,count					
			dec ecx						;外循环起始次数为length-1
outcir:		mov edx,ecx					;外循环起始
			mov ebx,offset array		;数组指针
			
incir:		mov eax,[ebx]				;按ebx中的地址去存储单元取数据
			cmp eax,[ebx+4]
			jng	next					;如果arr[j]<arr[j+1],不交换位置
			xchg eax,[ebx+4]			;否则交换位置
			mov [ebx],eax				;完成位置交换
next:		add ebx,4					;下一个元素
			dec edx						;内循环计数
			jnz	incir					;判断某一轮外循环中的内循环是否结束
			loop outcir
			
ok:	 	 	mov ecx,count
			mov ebx,offset array
print:		
			mov eax,[ebx]
			call dispsid
			call dispcrlf
			add ebx,4
			loop print
			
done:		exit 0
			end start
			
			

运行结果:

在这里插入图片描述

2.输出ACSII码表

	include io32.inc
		.data

onemsg  byte '    | 0 1 2 3 4 5 6 7 8 9 A B C D E F', 13,10		;第一行内容
		byte '--- + ', 31 dup ('-'),13,10,0
msg3	byte ' ',0
msg4	byte ' | ',0
msgtry  byte 'here',0
priarr	byte ?			
		.code
start:	mov eax, offset onemsg
		call dispmsg
		mov ebx,0
		mov edx,020h	;初始化
outcir:	
		mov eax,offset msg3
		call dispmsg
		mov eax,edx
		call disphb			;显示前面的部分
		mov eax,offset msg4
		call dispmsg
		
incir:
		cmp ebx,0fh		;判断该行打印条件
		ja next			;大于15,顺序执行
		mov eax,ebx		;否则打印该字符
		add eax,edx
		call dispc			;逐个打印字符
		mov eax,020h	;打印ACSII间的空格
		call dispc
		inc ebx			;计数器
		jmp incir
next:	
		call dispcrlf
		;mov eax,offset msgtry
		;call dispmsg
		add edx,010h	;外循环每次自增010h		
		cmp edx,070h	;外循环结束条件
		ja done
		mov ebx,0
		jmp outcir
done:	exit 0
		end start

运行结果:
在这里插入图片描述

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值