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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章