题目
将正数N插入一个已整序的字数组的正确位置。该数组的首地址&末地址分别为ARRAY_HEAD和ARRAY_END,其中所有数均为正数且已按递增的次序排列。
思路
由于首地址和末地址已知,所以数组的长度是已知的,但是我们没有用到数组的长度,而是以找到插入的位置作为终止条件,这就需要我们在首地址前多放一个无穷小的字,确保可以插入到第一个位置以结束循环。我们从尾部向头部开始查找,如果没有找到插入的位置,就将该数往右移动一个单元,以此类推。
代码
datasg segment
x dw ?
array_head dw 3,5,15,23,37,49,52,65,78,99
array_end dw 105
n dw 32
datasg ends
;-----------
codesg segment
assume cs:codesg,ds:datasg,es:datasg
main proc far
start:
push ds
sub ax,ax
push ax
mov ax,datasg
mov ds,ax
mov es,ax
;---------------------
mov ax,n
mov array_head-2,0ffffh ;将x赋值为无穷小,肯定可以在第一个元素中插入
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
;---------------------
exit:
ret
main endp
codesg ends
end start
调试
程序比较简单,直接看结果