![](/img/trans.png)
[英]How do I loop this code after it ends and how do I get the Y/N part of the code to work?
[英]How do I do the BSR SUBR, and define the SUBR part of the code?
該程序應該執行以下操作:
如何執行
BSR SUBR
並定義代碼的SUBR部分?
如果不查閱程序員參考手冊,您將無法解決此任務
對於已經執行“分支到子程序”( BSR
) 的BSR SUBR
指令,真的沒有什么可做的了。 定義SUBR部分只是寫下指令,這些指令將執行任務描述中概述的六個步驟,然后執行“從子程序返回”( RTS
)。
為了讓您順利上路,這里是第 1 步的詳細說明
- 將存儲在地址 label DATA 的前 6 個數據項($1 到 $6)相加。
為了從數組中求和6個字節,我們可以將第一個字節加載到數據寄存器中,然后從循環中添加接下來的5個字節。
在循環之前,我們:
movea.l #DATA, a1
指令執行此操作。moveq.l #5, d1
指令執行此操作。 要加載 [-128,+127] 范圍內的小數字,總是更喜歡moveq
而不是move
,因為它既更快又編碼更小。move.b (a1)+, d0
指令就是這樣做的。 因為該指令使用后遞增尋址方式,並且由於 size 屬性是byte ,所以 A1 地址寄存器中保存的地址會自動遞增 1。這樣我們就可以單步執行數組。在循環中,我們:
add.b (a1)+, d0
指令就是這樣做的。subq.l #1, d1
指令執行此操作。 要減去 [1,8] 范圍內的小數,總是更喜歡subq
而不是sub
/ subi
,因為它具有更小的編碼並且比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
我將進行下一步,因為它相當微不足道
- 將前 6 個數據項的總和存儲到地址 label SUM1。
步驟 1 將和留在 D0 數據寄存器中。 只需將其移至SUM1變量,但請務必根據SUM1變量的定義方式使用正確的大小標記,即.b
:
move.b d0, SUM1
祝你順利完成第 3 步到第 6 步...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.