汇编网首页登录博客注册
masmaster的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
文章收藏

[2010-08-07 16:48] 顺序表算法练习之:插入数据

在第i(1≤i≤n)个元素前插入一个元素时,需要将第n至第i个元素依次后移一个位置,插入后顺序表长度为n+1 。
插入运算的主要操作时元素后移操作。移动的次数与插入的位置i有关,即与输入有关。在最好情况下,i=n+1,即将输入插入到最后元素的后面,最坏情况是i=1,元素移动的次数为n,即为把数据插入到最前面。
;-----------------------------------------------------
  1 title   insert element in array
  2 assume  cs:code,ds:data
  3 data    segment
  4 array   db      2,3,5,7,13,17,19        ;list
  5 org     10h
  6 var     db      11                      ;insert element
  7 data    ends
  8 code    segment
  9 start:
 10         mov ax,data
 11         mov ds,ax
 12
 13 ;move backward
 14         mov cx,(lengthof array-5)+1     ;move number of times
 15         mov si,lengthof array-1         ;last element position
 16 s:      mov al,[si]                     ;
 17         mov byte ptr [si],0             ;fill up zero
 18         mov [si+1],al                   ;move element backward
 19         dec si                          ;
 20         loop s
 21
 22 ;insert element
 23         mov al,ds:var                   ;insert a element
 24         mov [si+1],al                   ;
 25
 26         mov ah,4ch                      ;return DOS
 27         int 21h                         ;
 28 code    ends
 29 end     start
;-----------------------------------------------------

测试:

d:\MASM>vim list.asm

d:\MASM>debug list.exe
-g 16

AX=140D  BX=0000  CX=0000  DX=0000  SP=0000  BP=0000  SI=0003  DI=0000
DS=14C9  ES=14B9  SS=14C9  CS=14CB  IP=0016   NV UP EI PL NZ NA PE NC
14CB:0016 A01000        MOV     AL,[0010]                          DS:0010=0B
-d ds:0 1f     ;数据移动后,留出即将插入数据的空间
14C9:0000  02 03 05 07 00 0D 11 13-00 00 00 00 00 00 00 00   ................
14C9:0010  0B 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
-t

AX=140B  BX=0000  CX=0000  DX=0000  SP=0000  BP=0000  SI=0003  DI=0000
DS=14C9  ES=14B9  SS=14C9  CS=14CB  IP=0019   NV UP EI PL NZ NA PE NC
14CB:0019 884401        MOV     [SI+01],AL                         DS:0004=00
-t

AX=140B  BX=0000  CX=0000  DX=0000  SP=0000  BP=0000  SI=0003  DI=0000
DS=14C9  ES=14B9  SS=14C9  CS=14CB  IP=001C   NV UP EI PL NZ NA PE NC
14CB:001C B44C          MOV     AH,4C
-d ds:0 1f             ;数据0BH被插入后
14C9:0000  02 03 05 07 0B 0D 11 13-00 00 00 00 00 00 00 00   ................
14C9:0010  0B 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
-t

AX=4C0B  BX=0000  CX=0000  DX=0000  SP=0000  BP=0000  SI=0003  DI=0000
DS=14C9  ES=14B9  SS=14C9  CS=14CB  IP=001E   NV UP EI PL NZ NA PE NC
14CB:001E CD21          INT     21
-p

Program terminated normally
-q

d:\MASM>
评论次数(0)  |  浏览次数(647)  |  类型(程序与练习) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码