如何解决我的子程序跳转到 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 举报,一经查实,本站将立刻删除。