我会尽量保持序言简短。
是的,这本质上是“帮助我完成大学作业”,但我非常坚持这一点(我们在第 10 小时,在这里)。
目标 - 编写一个汇编程序,将一个字符作为输入并将该字符输出为大写。
我已经复习了这本教科书,给我的教授发了电子邮件(正在等待回复,但我就像一条有骨头的狗——在完成之前我不能把这个功课搁置一旁),并尝试了我能想到的所有可能的排列方式。此示例与 pep/8 帮助中包含的示例几乎相同(我认为是图 6.34?无论哪个是布尔转换示例),只是字符存储在 #1cs 而不是 #2d 中。
无论如何,问题的核心是,每当我尝试在 uprcse 函数中访问 ch2 时,程序都会从堆栈中获取返回地址。据我所知,我所做的与示例相同,不幸的是,无法找到 pep/8 的良好在线资源(感谢 Python,将您的标准称为 pep8 ...),所以我在我可以多么疯狂地用谷歌搜索。
请在下面查看我的代码,并随时通过您自己的 pep8 运行它并告诉我我到底做错了什么。
请不要觉得需要做堆栈溢出的事情并指出我的代码中的每一个小缺陷——我知道这在 uprcse 函数中可能会有不同的分支。我的意思是,如果这就是你获得踢腿/因果报应的方式,你可以稍作修正,但是......嗯。
BR main
;
;******* char uppercase(char ch)
retVal: .EQUATE 2 ;returned value #1c
ch2: .EQUATE 1 ;formal parameter #1c
uprcse: LDBYTEA ch2,sx ;if ((ch >= 'a')
if: CPA 'a',i
BRLT else
LDBYTEA ch2,s ; && (a <= 'z'))
CPA 'z',i
BRGT else
then: LDBYTEA ch2,s ; return changed
SUBA 'a',i
ADDA 'A',i
STBYTEA retVal,s
RET0
else: LDBYTEA ch2,d ; return unchanged
STBYTEA retVal,s
RET0
;******* main ()
ch: .EQUATE 0 ;local variable #1c
main: SUBSP 1,i ;allocate #ch
STRO msg0,d ;cout << "Enter character, Zack" << endl
CHARI ch,s ;cin >> ch
LDBYTEA ch,s
STBYTEA -2,s ;store the value of age
SUBSP 2,i ;push #retVal #ch2
CALL uprcse ;ch = (uppercase(ch)
ADDSP 2,i ;pop #ch2 #retVal
LDBYTEA -1,s ;load retVal
STBYTEA ch,s
CHARO ch,s ;cout << ch << endl
CHARO '\n',i
ADDSP 1,i ;deallocate #ch
STOP
msg0: .ASCII "Enter character\n\x00"
.END