首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用[bp]会导致装配中的故障和不当行为。如何用[bp]代替寻址?

使用[bp]会导致装配中的故障和不当行为。如何用[bp]代替寻址?
EN

Stack Overflow用户
提问于 2022-01-12 22:07:46
回答 1查看 51关注 0票数 0

下面有密码。我用Object1函数从MorphLoop加载图形对象数据。这个函数对于加载我的对象是绝对必要的,但是另一方面,它绝对地“混乱”了代码的其余部分,这意味着在图形对象成功显示之后,我不能在程序集中做非常基本的事情,比如常规的视频内存页面寻址等等。但是,如果我删除Morphloop函数,那么图形对象就不能正常显示,但是我的基本组装例程按预期工作(进一步的图形和音乐)。

我一直在研究两种解决方案:

1.:

我希望在代码开始时保存bp,->显示图形对象->,然后恢复bp寄存器,以便像往常一样使用基本的汇编指令(显示更多的图形和播放音乐)。

或2.:

我想重构等效的MorphLoop函数。在这种情况下,是否有可能更换bp注册?

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

代码语言:javascript
复制
 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
EN

回答 1

Stack Overflow用户

发布于 2022-01-12 23:18:26

旧式汇编程序,旧学派解决方案:

代码语言:javascript
复制
        push bp
        mov bp,Object1
        
        mov cx,28
MorphLoop:
        ;...
        loop MorphLoop
        pop bp

bp被推送到堆栈上,然后分配给它,然后弹出。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70689021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档