微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我的子程序跳转到 PUTS 而不是标签,我不明白为什么

如何解决我的子程序跳转到 PUTS 而不是标签,我不明白为什么

        .orig x3000
    LEA R0,TEST
    AND R1,R0,x0000
    AND R2,x0000
    ADD R1,R1,x0007
    ADD R2,R2,x0002
    JSR FUNCTION_MOD

    HALT
    ; CONSTANTS

    ASCII .fill x0030   ;create ASCII mask
    NEGASCII .fill xFFD0    ;remove ASCII mask
;------------------------------------------------------------------------------------------------
    ; MESSAGES
TEST    .stringz "I WAS PRINTED!"
INTRO   .stringz "Calculate the modulo of a number."
PROMPT1 .stringz "Type in a number less than 65536,when finished,type a non-number character: "
PROMPT2 .stringz "Type in a number less than 65536,type a non-number character: "
;------------------------------------------------------------------------------------------------
    ; SUbroUTInes

    ; FUNCTION_MOD (R1,R2)
    ; R1: type integer
    ; R2: type integer
    
FUNCTION_MOD:
    STI R1,SLR1        ; store R1: a ; 7
    STI R2,SLR2        ; store R2: b ; 2
    STI R3,SLR3        ; store R3: c
    STI R4,SLR4        ; store R4: d
    PUTS
    AND R3,x0000   ; c = 0
    AND R4,x0000   ; d = 0
MOD_LOOP_I: 
    NOT R3,R3      ; c = -c ;-8
    ADD R3,R3,x0001       
    ADD R4,R3      ; d = a + c ;-1
    BRn MOD_ELSE        ; d < 0 ;true
    NOT R3,R3      ; c = -c ;6
    ADD R3,x0001   
    ADD R3,R2      ; c += b ;8
    BR MOD_LOOP_I       ; loop
MOD_ELSE:
    ADD R3,R2      ; c = c + 2; -6 
    ADD R4,R4,R3      ; d = a + c

    STI R4,MODR        ; save output

    LDI R1,SLR1        ; restore R1
    LDI R2,SLR2        ; restore R2
    LDI R3,SLR3        ; restore R3
    LDI R4,SLR4        ; restore R4
    RET         ; return
; Save register values during subroutines
    SLR0 .fill xA000
    SLR1 .fill xA001
    SLR2 .fill xA002
    SLR3 .fill xA003
    SLR4 .fill xA004
    SLR5 .fill xA005
    SLR6 .fill xA006
    SLR7 .fill xA007
; Function return values after subroutines
    MODR .fill xA100
.end

我在运行这段代码时注意到它甚至不会执行 JSR。所以我在子程序中放入了一个 PUTS 以确保它确实在运行并且没有发生其他事情,但是当我放入 PUTS 时,子程序会直接跳转到它。而不是标签的开头,另一个问题是一旦子例程到达 RET,而不是回到声明 JSR 的时候,它会再次转到 PUTS,因此它一次又一次地重复。我不知道发生了什么。

这是子程序中不包含 PUTS 会发生什么的视频 https://youtu.be/8HfBVaIwWm0

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。