使用[bp]会导致装配中出现故障和不当行为.如何用[bp]替换寻址



我有下面的代码。我在MorphLoop函数中从Object1加载图形对象数据。这个函数对于加载我的对象是绝对必要的,但另一方面,它绝对会"搅乱"代码其余部分的一切,这意味着在我的图形对象成功显示后,我无法在汇编中做一些非常基本的事情,比如常规视频内存页面寻址之类的事情。然而,如果我删除了Morphloop函数,那么图形对象就不能正常显示,但我的基本汇编例程可以按预期工作(进一步的图形和音乐(。

所以我一直在研究两个解决方案:

1.:

我想在代码的开头保存bp->显示图形对象->然后恢复bp寄存器,以便像往常一样使用我非常基本的汇编指令(显示进一步的图形和播放音乐(。

或2.:

我想重构等价的MorphLoop函数。在这种情况下,是否可以替换bp寄存器?

在一句话中:在这种情况下,我应该保存/加载bp还是替换bp(重构MorphLoop(?如果是:如何在没有bp的情况下重构MorphLoop?

org 100h
section .text
;  ...    
;  ...
mov bx,si
shr bx,2
shl bx,1
mov bx,[bx]
sar bx,1
add bx,128
xor bh,bh
mov bp,Object1


mov cx,28
MorphLoop:
mov al,[bp]
sub al,[bp+28]
cbw
imul bx
sar ax,8
add al,[bp+28]
mov [bp+28*2],al
inc bp
loop MorphLoop
;[display graphical object]
;[further graphics and music goes here]
ret 

section .data
Object1 db  -20,13
db  -15,17
db  -10,20
db  -7,22
db  -5,23
db  5,25
db  10,53
db  15,18
db  0,10
db  25,2
db  30,2
db  33,17
db  35,20
db  0,30

老式汇编程序,老式解决方案:

push bp
mov bp,Object1

mov cx,28
MorphLoop:
;...
loop MorphLoop
pop bp

CCD_ 1在被分配到堆栈之前被推送到堆栈上,然后被弹出。

保存/恢复所有在函数开始/结束时会被破坏的寄存器要正常得多,但对于其他;...行,我不确定是否能够做到这一点,但我对此相当确定。

最新更新