data segment
x dw ?
array_head dw 3,5,15,23,37,49,52,65,78,99
array_end dw 105
n dw 32
data ends
;===================================================
prognam segment
main proc far
assume cs:prognam,ds:data
start:
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
mov ax,n
mov array_head-2,0ffffh
mov si,0
compare:
cmp array_end[si],ax
jle insert
mov bx,array_end[si]
mov array_end[si+2],bx
sub si,2
jmp short compare
insert:
mov array_end[si+2],ax
ret
main endp
prognam ends
end start
;===================================================
下边这些不懂,这儿代码的意思是把后一元素的值赋值给前边的元素了吗??求指教。。。
mov bx,array_end[si]
mov array_end[si+2],bx
sub si,2
------解决方案--------------------
是把前一元素[si]赋值于后一元素[si+2]吧,从后向前依次而来,就是将相关元素整体后移,空出来的就是放那个插入的元素了。
------解决方案--------------------
开始 si=0,array_end[si] 就是指向最后一个元素,sub si,2 的话,就是指向前面一个元素;从最后一个元素起向前逐个和待插入的数据进行比较,没到位置就将其后移,到了就插入。
这个代码功能和使用的指令都简单啊,在 debug 里单步走下就会明白了。