022.线性搜索并且输出数组中的第一个不为零的数字

;扫描数组				(ArrayScan.asm)
;扫描数组寻找第一个非零数值

include irvine32.inc

.data
	;intArray	SWORD	0,0,0,0,1,20,35,-12,66,4,0
	;intArray	SWORD	1,0,0,0						;候补测试数据
	intArray	SWORD	0,0,0,0						;候补测试数据
	;intArray	SWORD	0,0,0,1						;候补测试数据
	noneMsg		BYTE	"A non-zero value was not found!",0

.code
	main PROC
		mov ebx,OFFSET intArray						;指向数组
		mov ecx,LENGTHOF intArray					;循环计数器

	L1:
		cmp WORD PTR [ebx],0						;将ebx寄存器内所存储的数值取出将低16位于0比较,这样会使得比较的两个数字内存对齐
		jnz found									
		add ebx,2									;指向下一个元素,eax寄存器增加两个字节
		loop L1										;重复进行上述操作
		jmp notfound								;如果经过上述循环并没有找到非零数值那么直接退出

	found:
		;如果找到需要找到的元素那么执行这段代码
		movsx eax,WORD PTR [ebx]					;将ebx也就是元素序号送入eax并进行符号扩展,PTR指定可以和数据类型连用,确定间接寻址寻址寄存器指向的数据的大小
		call WriteInt								;调用WriteInt进行数据显示,注意最后的输出是以有符号整数的形式出现的
		jmp quit									;跳转到结束为止

	notfound:
		mov edx,OFFSET noneMsg						;调用显示信息函数的准备
		call WriteString

	quit:
		call Crlf									;回车并且换行
		call WaitMsg								;等待用户输入一个字符
		exit										;退出程序
main ENDP
END main

猜你喜欢

转载自blog.csdn.net/dosdiosas_/article/details/106243505