在附加段中,有乙個首位址為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會自動增加,但是要刪除陣列中的元素呢?你想過嗎?是不是很少遇到?我近日在處理乙個購物籃程式時遇到...