;掃描數組 (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
022.線性搜索並且輸出數組中的第一個不爲零的數字
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.