首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何完成BSR,并定义代码的SUBR部分?

如何完成BSR,并定义代码的SUBR部分?
EN

Stack Overflow用户
提问于 2022-09-04 06:47:36
回答 1查看 67关注 0票数 -2

问题

该程序应执行以下操作:

  1. 将存储在地址标签数据中的前6个数据项($1到$6)加起来。
  2. 存储前6个数据项的和地址标签SUM1。
  3. 将存储在地址标签SUM1处的和乘以8,并将结果存储在地址标签MUL8。(循环然后添加)
  4. 将存储在地址标签数据中的最后6个数据项($7到$C)相加。
  5. 存储最后6个数据项的和地址标签SUM2。
  6. 将存储在地址标签SUM2处的和除以4,并将结果存储在地址标签DIV4。
EN

回答 1

Stack Overflow用户

发布于 2022-09-04 18:34:21

我如何做BSR SUBR,并定义代码的SUBR部分?

如果不咨询程序员参考手册,您就无法解决这个任务

对于已经执行“分支到子例程”(BSR)的BSR指令,实际上没有什么可做的了。定义SUBR部分只需写下执行任务描述中概述的六个步骤的指令,然后执行“从子例程返回”(RTS)。

为了让你上路,以下是第一步的详细说明

  1. 将存储在地址标签数据中的前6个数据项($1到$6)加起来。

为了从数组中总结6字节,我们可以在数据寄存器中加载第一个字节,然后从循环中添加下一个5字节。

在循环之前,我们:

  • 用数据标签的地址加载像A1这样的地址寄存器。movea.l #DATA, a1指令就是这样做的。
  • 用循环计数( 5 )加载像D1这样的数据寄存器。moveq.l #5, d1指令就是这样做的。要在-128范围内加载较小的数字,+127总是更喜欢moveq而不是move,因为它速度更快,编码更小。
  • 使用数组中的第一个字节加载另一个数据寄存器(如D0 )。move.b (a1)+, d0指令就是这样做的。由于该指令使用增量后寻址模式,并且由于大小属性是字节的,所以A1地址寄存器中的地址将自动增加1。这样我们就可以遍历数组。

In循环我们:

  • 将下一个字节添加到选定的D0数据寄存器中。add.b (a1)+, d0指令就是这样做的。
  • 减少D1数据寄存器中的循环计数。subq.l #1, d1指令就是这样做的。为了在1,8范围内减去较小的数字,8总是倾向于subq而不是sub/subi,因为它的编码比subi小,而且比subi快得多。
  • 只有当循环计数器上的递减没有产生0时,才会分支回循环的顶部。bne.s loop1指令就是这样做的。
代码语言:javascript
运行
复制
    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个数据项的和地址标签SUM1。

第1步将和留在D0数据寄存器中。只需将其移动到SUM1变量,但请确保使用正确的大小标记,即根据定义SUM1变量的方式使用.b

代码语言:javascript
运行
复制
move.b   d0, SUM1

祝你第三步到第六步好运。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73597316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档