022 線性搜尋並且輸出陣列中的第乙個不為零的數字

2021-10-06 08:37:59 字數 1257 閱讀 2549

;掃瞄陣列				(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

線性搜尋中的「哨兵」技巧

線性搜尋的基本過程是將若干個資料從頭到尾,依次逐個比對,直到找到目標資料。假設有50個箱子,裡面分別裝有乙個寫有任意數字的紙條,箱子上面標有1 50的序號。現在要從這50個箱子當中查詢是否有箱子裝有寫著要查詢數字的紙條。假設我們的資料如下,我們要查詢的數字為8254 1 1952,2 4028,3 ...

輸出陣列中不重複,或者輸出特定次數的陣列

隨機生成1000個1 100之內的整數,統計出不重複的數值和其重複的次數 random rand newrandom int arr newint 1000 int unique newint 100 int count newint 100 int k 0 unique k rand.nextin...

瘋狂輸出 陣列中的折半查詢

上次我們說了 氣泡排序,還有選擇排序。今天我們講折半查詢。注意 折半查詢只能在有序的陣列裡用。原因是什麼?我們來寫一段 相信你會秒懂。public class lianxi1 int min 0 定義乙個最小值 int max array.length 1 定義乙個最大值 int mid min m...