8086系列(5):数组中插入一程序

题目

将正数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

调试

程序比较简单,直接看结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值