我正在用68000 汇编实现排序算法,并决定使用堆栈将参数传递给交换数组中两个元素的子例程。我想确保正确高效地处理堆栈。
具体来说,在调用SWAP_SUB
子程序之前,我使用 将两个元素的地址推送到堆栈pea.l
,然后使用 的偏移量在子程序内部检索它们A7
。
完整代码如下:
ORG $8000
START:
moveq.l #len-1,d7
OUTER_LOOP:
lea.l array,a0
moveq.l #len-2,d6
INNER_LOOP:
move.b (a0)+,d2
cmp.b (a0),d2
blt.s DO_SWAP
NO_SWAP:
subq.l #1,d6
bge.s INNER_LOOP
subq.l #1,d7
bge.s OUTER_LOOP
SIMHALT
DO_SWAP:
pea.l (a0)
pea.l -1(a0)
bsr.s SWAP_SUB
addq.l #8,a7
bra.s NO_SWAP
SWAP_SUB:
movem.l d3-d4,-(a7) ;new line
move.l 4(a7),a0
move.l 8(a7),a1
move.b (a0),d3
move.b (a1),d4
lsl.w #8,d3
or.w d4,d3
rol.w #8,d3
move.w d3,d5
lsr.w #8,d5
move.b d5,(a0)
andi.w #$00FF,d3
move.b d3,(a1)
movem.l (a7)+,d3-d4 ;new line
rts
array DC.B 5,3,8,1,7
len EQU 5
END START
问题:
- 我是否正确使用堆栈传递参数?我的方法是否存在任何潜在问题?
- 向子程序传递参数时,是否有设置堆栈的通用方法?
- 这段代码能以任何方式简化吗?