Question该程序应执行以下操作:1.将存储在地址标签DATA中的前6个数据项($1至$6)相加。1.将前6个数据项的总和存储到地址标签SUM 1。1.将存储在地址标签SUM 1中的和乘以8,并将结果存储在地址标签MUL 8中。(先循环,然后相加)1.将存储在地址标签DATA中的最后6个数据项($7至$C)相加。1.将最后6个数据项的总和存储到地址标签SUM 2。1.将存储在地址标签SUM 2的和除以4,并将结果存储在地址标签DIV 4。
hk8txs481#
如何执行BSR SUBR,并定义代码的 SUBR 部分?如果不咨询Programmer's Reference Manual,您将无法解决此任务对于已经执行了“分支到子例程”(BSR)的BSR SUBR指令,实际上没有什么可做的。定义 SUBR 部分只需要写下将执行任务描述中概述的六个步骤的指令,然后执行“从子例程返回”(RTS)。为了帮助您继续操作,以下是步骤1的详细说明1.将存储在地址标签DATA中的前6个数据项($1至$6)相加。为了对数组中的6个字节求和,我们可以将第一个字节加载到数据寄存器中,然后从循环中添加接下来的5个字节。
BSR SUBR
BSR
RTS
在循环之前,我们:
movea.l #DATA, a1
moveq.l #5, d1
moveq
move
move.b (a1)+, d0
add.b (a1)+, d0
subq.l #1, d1
subq
sub
subi
bne.s loop1
movea.l #DATA, a1 moveq.l #5, d1 move.b (a1)+, d0 loop1: add.b (a1)+, d0 subq.l #1, d1 bne.s loop1
我会加入下一步,因为它相当琐碎1.将前6个数据项的总和存储到地址标签SUM 1。第1步将总和留在D 0数据寄存器中。只需将其移动到 * SUM 1 * 变量中,但要确保使用正确的大小标签,即.b,与 * SUM 1 * 变量的定义一致:
.b
move.b d0, SUM1
祝您顺利完成第3步到第6步...
1条答案
按热度按时间hk8txs481#
如何执行
BSR SUBR
,并定义代码的 SUBR 部分?如果不咨询Programmer's Reference Manual,您将无法解决此任务
对于已经执行了“分支到子例程”(
BSR
)的BSR SUBR
指令,实际上没有什么可做的。定义 SUBR 部分只需要写下将执行任务描述中概述的六个步骤的指令,然后执行“从子例程返回”(RTS
)。为了帮助您继续操作,以下是步骤1的详细说明
1.将存储在地址标签DATA中的前6个数据项($1至$6)相加。
为了对数组中的6个字节求和,我们可以将第一个字节加载到数据寄存器中,然后从循环中添加接下来的5个字节。
在循环之前,我们:
movea.l #DATA, a1
指令会执行此操作。moveq.l #5, d1
指令可执行此操作。要加载[-128,+127]范围内的小数字,始终首选moveq
而不是move
,因为它速度更快,编码更小。move.b (a1)+, d0
指令会执行此操作。由于此指令使用 * 后置增量 * 寻址模式,且大小属性为 * 字节 *,因此A1地址寄存器中保存的地址将自动递增1。这样,我们就可以单步执行数组。在环路中,我们:
add.b (a1)+, d0
指令可执行此操作。subq.l #1, d1
指令会执行此操作。要减去[1,8]范围内的小数字,总是首选subq
而不是sub
/subi
,因为它的编码更小,而且比subi
快得多。bne.s loop1
指令执行此操作.我会加入下一步,因为它相当琐碎
1.将前6个数据项的总和存储到地址标签SUM 1。
第1步将总和留在D 0数据寄存器中。只需将其移动到 * SUM 1 * 变量中,但要确保使用正确的大小标签,即
.b
,与 * SUM 1 * 变量的定义一致:祝您顺利完成第3步到第6步...