【发布时间】:2017-03-22 01:22:40
【问题描述】:
我会尽量保持序言简短。
是的,这本质上是“帮我完成大学作业”,但我对此非常坚持(我们在第 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
【问题讨论】:
-
怎么了?另外,你知道你可以翻转一下从大写到小写吗?
-
如果ch2等于1,你的返回地址是1字节吗?我发现表明有一个 64k 的地址空间,因此您可能应该将其定义为 2。
-
呃... google ' "pep/8" -python '?
-
“尝试访问 ch2”和“从堆栈中获取返回地址”是什么意思? “pep/8 帮助”在哪里?请努力解释清楚。请阅读minimal reproducible example并采取行动。
-
他将 ch2 定义为堆栈相对偏移量,但我认为没有为返回地址留出足够的空间。
标签: pep8-assembly