这是一个简短的计算器"我在学习装配时写的程序。当answer
中存储负值时,我遇到了问题。例如,如果我将A 10 S 1 Q
输入到Pep / 8中,我最终得到一个9
作为答案,正如预期的那样。如果我减去或否定答案而得到否定,则在分支到无效响应消息后的下一个命令。似乎在answer
中存储了否定答案时,进入累加器的下一个命令是错误的。如果我输入A 1 S 2
之后的下一个命令将无法正确输入。在这种情况下,如果我有A 1 S 2 A 3
累加器在执行CHARO input,s
后其中没有值(对于' A'),而是非感知负数值。在调试模式中,我可以看到累加器中的值为-191而不是65.我的问题是,为什么会发生这种情况?为什么在回答中的负值导致将值输入累加器的方式不同?
BR Main
input: .EQUATE 4
answer: .EQUATE 2
number: .EQUATE 0
msg0: .ASCII "Menu: \nA: Add \nS: Subtract \nN: Negate \nQ: Quit \nAnswer: \x00"
msg1: .ASCII "Input option: \x00"
msg2: .ASCII "Input number: \x00"
msg3: .ASCII "Answer: \x00"
msg4: .ASCII "The calculator has ended. \x00"
msg5: .ASCII "Input was invalid. \x00"
Main: SUBSP 6,i
LDA 0,i
STA answer,s
STRO msg0,d
DECO answer,s
CHARO '\n',i
CHARO '\n',i
Menu: CHARI input,s
LDBYTEA input,s
CPA 'A',i
BREQ Add
CPA 'S',i
BREQ Subtract
CPA 'N',i
BREQ Negate
CPA 'Q',i
BREQ Quit
BR Invalid
Add: DECI number,s
LDA answer,s
ADDA number,s
STA answer,s
STRO msg1,d
CHARO input,s
CHARO '\n',i
STRO msg2,d
DECO number,s
CHARO '\n',i
STRO msg3,d
DECO answer,s
CHARO '\n',i
CHARO '\n',i
BR Menu
Subtract:DECI number,s
LDA answer,s
SUBA number,s
STA answer,s
STRO msg1,d
CHARO input,s
CHARO '\n',i
STRO msg2,d
DECO number,s
CHARO '\n',i
STRO msg3,d
DECO answer,s
CHARO '\n',i
CHARO '\n',i
BR Menu
Negate: LDA answer,s
NEGA
STA answer,s
STRO msg1,d
CHARO input,s
CHARO '\n',i
STRO msg3,d
DECO answer,s
CHARO '\n',i
CHARO '\n',i
BR Menu
Quit: STRO msg4,d
BR Stop
Invalid: STRO msg5,d
BR Stop
Stop: ADDSP 6,i
STOP
.END
编辑:我通过在输入之前简单地清除累加器中的内容来找到解决问题的方法。这是我所做的改变,现在该程序按预期工作:
Menu: CHARI input,s
LDA 0,i
LDBYTEA input,s
CHARI input,s
STBYTEA input,s
CPA 'A',i
BREQ Add
CPA 'S',i
BREQ Subtract
CPA 'N',i
BREQ Negate
CPA 'Q',i
BREQ Quit
BR Invalid
虽然这有效,但我还是不完全理解为什么累加器中的值在NEGA
指令后变得很糟糕。如果有人能解释原因,我会很感激。