【发布时间】:2018-12-19 22:47:51
【问题描述】:
我真的很难理解这个汇编语言问题,在查看标记方案后,我无法弄清楚为什么我的答案与给定的不同。
问题如下
图 5 显示了一个汇编语言程序以及计算机主存储器的一部分内容, 程序将被执行。每个主存位置和寄存器 可以存储一个 16 位的值。
用于编写程序的汇编语言指令集 程序在下一页的表 1 中列出。
图5
LDR R1, 100 LSL R2, R1, #2 ADD R1, R1, R2 LDR R3, 101 CMP R3, R1 BEQ labela MOV R4, #0 B labelb labela: MOV R4, #1 labelb: STR R4, 102 HALT |---------------------|----------------------| | Memory Address | Main Memory Contents | | (in decimal) | (in decimal) | |---------------------|----------------------| | 100 | 10 | |---------------------|----------------------| | 101 | 50 | |---------------------|----------------------| | 102 | 80 | |---------------------|----------------------|问题:用十进制完成下面的跟踪表,以显示存储在寄存器和主存储器中的值如何随着 执行图 5 中的程序。您可能不需要使用所有 行。
跟踪表:
表 1:
我想出的答案是这样的:
但是标记方案上的答案是这样的(在 102 列中添加了 1):
我认为这里可能发生的是程序退出 labela 分支,然后在分支到 labela 后恢复代码。但是,如果是这种情况,那么内存位置 102 的值将是 0。
谁能给我解释一下,为什么在执行分支 labela 之后,一个 1 会被转移到内存位置 102 中?
提前感谢任何回复的人!抱歉,如果这是一个很长的问题,我真的被卡住了,经过多次尝试自己解决这个问题后,我不知道还能去哪里。
【问题讨论】:
-
这是 LC-3 吗?除了寻址模式语法之外,它看起来像 ARM。
-
我相信这是我的考试委员会制作的汇编语言指令集。表 1 显示了该语言的语法
-
为什么你的值是小数?您在这里有轮班说明,这会导致轮班痛苦。我将从二进制表示开始。
-
那叫“AQA 大会”。它看起来与 ARM 完全相同,但具有简化的寻址模式。 (
MVN是一个基于 ARM 的重要线索。)奇怪的是,它们似乎已经删除了间接分支或任何等效的调用/调用,因此即使您在 BEQ 之后也无法编写返回的代码想要。 (真正的ARM有bl,branch-and-link,将返回地址保存在寄存器中。) -
@Antoniossss:没关系,我只是想正确标记这个问题,以便其他人可以找到它。
标签: assembly