如何在68k程序集中删除数组元素

时间:2017-11-20 20:44:58

标签: assembly motorola 68000

我有一个结构数组,我需要删除给定位置的元素。这是我结构的补偿。

MOVIE       equ  62
title       equ  0
year        equ  52
time        equ  54
rating      equ  56

假设我有一个包含12个元素的数组,我将如何删除位置5的元素?

1 个答案:

答案 0 :(得分:0)

第一件事是您不会拥有“结构数组”。 理想的形式是对结构使用 pointers 的数组,每个指针都引用其自身的结构。

         MOVEQ   #5,D0       ;element you want to delete
         BSR     DEL_MOVE
         SIMHALT

DEL_MOVE
         LSL.W   #2,D0        ; long words
         LEA     MOVIES,A0    ; array start
         LEA     0(A0,D0),A2  ; element in array (starts at 0)
         LEA     11*4(A0),A1  ; end of array -1
DEL      MOVE.L  4(A2),(A2)+  ; move down
         CMP.L   A2,A1        ; at end yet?
         BLT.S   DEL          ; branch if not
         MOVE.L  #0,(A2)+     ; last element is null
         RTS


MOVIES   DC.L    MOVIE1, MOVIE2, MOVIE3 ...
MOVIE1   DS.B    62
MOVIE2   DS.B    62
         ...