下面有密码。我用Object1函数从MorphLoop加载图形对象数据。这个函数对于加载我的对象是绝对必要的,但是另一方面,它绝对地“混乱”了代码的其余部分,这意味着在图形对象成功显示之后,我不能在程序集中做非常基本的事情,比如常规的视频内存页面寻址等等。但是,如果我删除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发布于 2022-01-12 23:18:26
旧式汇编程序,旧学派解决方案:
push bp
mov bp,Object1
mov cx,28
MorphLoop:
;...
loop MorphLoop
pop bpbp被推送到堆栈上,然后分配给它,然后弹出。
保存/恢复所有在函数开始/结束时将被关闭的寄存器要正常得多,但是对于其他;...行,我不确定能够做到这一点,但我对此相当肯定。
https://stackoverflow.com/questions/70689021
复制相似问题