我有下面的代码。我在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在被分配到堆栈之前被推送到堆栈上,然后被弹出。
保存/恢复所有在函数开始/结束时会被破坏的寄存器要正常得多,但对于其他;...
行,我不确定是否能够做到这一点,但我对此相当确定。