首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >汇编上的编程

汇编上的编程
EN

Stack Overflow用户
提问于 2010-05-20 22:35:15
回答 2查看 809关注 0票数 1

有人能解释一下这个程序在做什么吗?

代码语言:javascript
运行
复制
.= torg + 1000

main:
        mov pc, sp
        tst –(sp)

        mov #list1, -(sp)
        jsr pc, mystery
        mov r0, res1
        tst (sp)+

        mov #list2, -(sp)
        jsr pc, mystery
        mov r0, res2
        tst (sp)+

        halt


mystery:
        mov r1, -(sp)
        mov r4, -(sp)
        mov r5, -(sp)

        clr r0

        mov 10(sp), r4
        mov r4, r5

loop:
        mov r4, r1
        jsr pc, next
        mov r1, r4
        beq return

        mov r5, r1
        jsr pc, next
        jsr pc, next
        mov r1, r5
        beq return

        cmp r4, r5
        beq setret
        br loop

setret:
        inc r0

return:
        mov (sp)+, r5
        mov (sp)+, r4
        mov (sp)+, r1
        rts pc


next:
        tst r1
        beq abort
        mov (r1), r1
abort:
        rts pc


.= torg + 3000
list1: .word 3006, 3000, 3002, 3004, 0
res1: .word -1

.= torg + 3020
list2: .word 3030, 3026, 0, 3024, 3022
res2: .word -1

我看不懂这段代码,提前谢谢大家

代码语言:javascript
运行
复制
mystery:
            mov r1, -(sp)
            mov r4, -(sp)
            mov r5, -(sp)

            clr r0

            mov 10(sp), r4
            mov r4, r5
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-05-20 22:40:45

它似乎正在备份寄存器1、4和5,并初始化寄存器0(不需要备份)。由于@mysteryjsr的目的地,因此称为prologue code。然后,为循环初始化它们。

旧值将在@return中恢复。

至于整个程序做了什么,它似乎是在链表中查找循环链接。

代码语言:javascript
运行
复制
bool is_invalid_list( link_node *l ) {
    while ( l && l->next && l->next->next ) {
        if ( l->next == l->next->next ) return true;
    }
    return false;
}

我不认为这是实现这一点的最简单或最好的方法,但也不是最糟糕的。

票数 0
EN

Stack Overflow用户

发布于 2010-05-20 22:41:31

代码语言:javascript
运行
复制
        mov r1, -(sp)
        mov r4, -(sp)
        mov r5, -(sp)

这是将三个寄存器推送到堆栈上。

代码语言:javascript
运行
复制
        clr r0

很明显。

代码语言:javascript
运行
复制
        mov 10(sp), r4
        mov r4, r5

这会将堆栈中的参数检索到r4中(然后将其复制到r5中)。

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

https://stackoverflow.com/questions/2874731

复制
相关文章

相似问题

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