我正在编写一个旧的 MCU (68hc11),我正在尝试使用 68hc11 指令从 C 语言迁移到汇编代码。
我想在汇编中编写一个程序,计算给定数组中存在的正、负和零值的数量。请注意,ARRAY 中的所有值都可以是正数或全负数或全零,你明白吗?所以我应该定义将正确存储数量的变量的大小。
注意:数组的结尾是:ARRAY+QUANTITY-1
数组:包含一些随机值
QUANTITY:表示 ARRAY 可以容纳的最大元素数
我用 C 写了这个程序:
int A[15], pos, neg, nul, i;
[...]
pos = 0;
neg = 0;
nul = 0;
for (i = 0; i < 15; i++) {
if (A[i] > 0) {
pos++;
}
if (A[i] < 0) {
neg++;
}
if (A[i] == 0) {
nul++;
}
}
现在,我想翻译它,但在汇编中(我卡在这里,我没有得到我想要的)
RWM EQU $0
ROM EQU $C000
VRESET EQU $FFFE
QUANTITY EQU 800 ;MEANS THE MAXIMUM AMOUNT OF VALUES THAT THE ARRAY WILL CONTAIN
ORG RWM
POSITIVE RMB 2
NEGATIVE RMB 2
ZEROS RMB 2
ORG ROM
START:
CLRA
CLRB
CLR POSITIVE
CLR ZEROS
CLR NEGATIVE
LDY #ARRAY
LOOP
CPY #(ARRAY+QUANTITY-1)
BHI END
LDD 0,Y
INY
BLT NEGATIVE_NUMBER
BEQ ZERO_NUMBER
BGE POSITIVE_NUMBER
NEGATIVE_NUMBER INC NEGATIVE
BRA LOOP
POSITIVE_NUMBER INC POSITIVE
BRA LOOP
ZERO_NUMBER INC ZEROS
BRA LOOP
END BRA END
ARRAY DW 78,554,-44,-4,2547,0,-3,0,1,7,8,
ORG VRESET
DW START
我的代码有什么问题?
编辑:
RWM EQU $0
ROM EQU $C000
VRESET EQU $FFFE
QUANTITY EQU 800 ;MEANS THE MAXIMUM AMOUNT OF VALUES THAT THE ARRAY WILL CONTAIN
ORG RWM
POSITIVE RMB 2
NEGATIVE RMB 2
ZEROS RMB 2
ORG ROM
START:
CLRA
CLRB
CLR POSITIVE
CLR ZEROS
CLR NEGATIVE
LDY #(ARRAY-2)
LOOP
INY
INY
CPY #(ARRAY+2*QUANTITY-1)
BHI END
LDD 0,Y
BLT NEGATIVE_NUMBER
BEQ ZERO_NUMBER
BGE POSITIVE_NUMBER
NEGATIVE_NUMBER INC NEGATIVE
BRA LOOP
POSITIVE_NUMBER INC POSITIVE
BRA LOOP
ZERO_NUMBER INC ZEROS
BRA LOOP
END BRA END
ARRAY DW 78,554,-44,-4,2547,0,-3,0,1,7,8,
ORG VRESET
DW START
我得到了这个输出(不确定)