彙編太難了(1) 刪除陣列元素

2021-10-05 14:06:02 字數 2070 閱讀 4224

在附加段中,有乙個首位址為list和未經排序的字陣列,在陣列的第乙個字中,存放著該陣列的長度,陣列的首位址已存放在di暫存器中,ax暫存器中存放著乙個數。要求編制一程式,在陣列中查詢該數,如果找到了此數,則把它從陣列中刪除。

datas segment

list dw 10

,45h,

345h,

45h,

189h,

21h,

2345h,

5678h,

100h,

200h,

189h

addr1 dw 89h

datas ends

stacks segment

db 200

dup(?)

top label word

stacks ends

codes segment

assume cs:codes,es:datas,ss:stacks

start:

;將資料段中的資料載入到es,ds中

mov ax,datas

mov es,ax

mov ds,ax

mov di,offset list ;

(di)

=0ah

mov ax,addr1 ;

(ax)

=89h

cld ;

(di)向前移動

push di ; di 進棧,儲存陣列大小值

mov cx,es:

[di]

;cx表示要移動的次數

add di,

2; 指向陣列中的第乙個元素

repne scasw ;串掃瞄,當di指定的值跟ax中的值相等時,zf=

1,即滿足je/jz

je delete

pop di

jmp short exit

delete:

jcxz dec_cnt ;如果cx=

0 ,即改動陣列大小即可

next_el:

;cx是多少就移動多少次

mov bx,es:

[di]

;因為di是指向匹配的下乙個,所以直接將di覆蓋di-

2 mov es:

[di-2]

,bx

add di,

2;沒完就繼續

loop next_el

dec_cnt:

pop di

dec word ptr es:

[di]

exit:

mov ah,

4ch int 21h

codes ends

end start

mov ax,datas

mov ds,ax

mov es,ax

這三個的作用:把附加段中的資料移動到ds暫存器和es暫存器中,因為無法直接從記憶體移到ds,所以借用ax

repne scasw

repne:不相等/不為0則重複

scasw:是 scas 串掃瞄的擴充套件,scasb 位元組,scasw 字,scasd 雙字

scasb: (al)-((desination-index)),(destination-index) <- (destination - index) ± 1

scasw: (ax)-((desination-index)),(destination-index) <- (destination - index) ± 2

scasd: (eax)-((desination-index)),(destination-index) <- (destination - index) ± 4

注意: 當使用repne scasw時,如果匹配到了的話,di是指向匹配到的下乙個字,cx是剩餘的字的數量。

jcxz: jump if cx equals zero.

js刪除陣列元素

方法 array.remove dx 功能 刪除陣列元素.引數 第乙個引數是說明第二個引數的型別,index 表示第二個引數是元素下標,element 表示第二個引數是要刪除的元素 返回 在原陣列上修改陣列 刪除陣列元素,第乙個引數是說明第二個引數的型別,index 表示第二個引數是元素下標,ele...

JS刪除陣列元素

js刪除陣列元素 view plaincopy to clipboardprint?1.delete方法 delete arr 1 這種方式陣列長度不變,此時arr 1 變為undefined了,但是也有好處原來陣列的索引也保持不變,此時要遍歷陣列元素可以才用 for index in arr do...

PHP刪除陣列元素

我們在使用php語言進行實際 編寫時,經常會和陣列打上交道,這對於初學者來說是比較困難的。今天我們就要向大家介紹如何實現php刪除陣列元素。php中的陣列要新增元素非常簡單,直接用賦值就行了,陣列的key會自動增加,但是要刪除陣列中的元素呢?你想過嗎?是不是很少遇到?我近日在處理乙個購物籃程式時遇到...