【发布时间】:2020-06-10 21:27:20
【问题描述】:
我还在玩这个 MC
现在我想计算给定数组中的正数/负数和 0。在 c 中,我做了这样的事情并且效果很好:
int A[15], pos, neg, nul, i;
[...]
pos = 0;
neg = 0;
nul = 0;
for 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
RESET EQU $FFFE
QUANTITY EQU 200
ORG RWM
POSITIVES RMB
NEGATIVES RMB
ZEROS RMB
ORG ROM
Main:
END BRA END
ARRAY DW 1,4,8,-87,0,0,1,4,5,8,7,4,4,1,-9
ORG RESET
DW Main
我在这里有点困惑,因为我需要考虑 最坏的情况,我的意思是:全部为正,或全部为负或全部为零。 所以,我应该根据要定义的信息来定义可变大小 保存。 我认为数组的结尾应该是 ARRAY + QUANTITY-1。
编辑#1:
对于这种情况,我想获得这个输出:
由于 ARRAY 包含以下元素:
1,4,8,-87,0,0,1,4,5,8,7,4,4,1,-9
我应该得到这个输出:
POSITIVES 11
NEGATIVES 2
ZEROS 2
但请记住:
我必须考虑最坏的情况,即:所有都是积极的,或所有 负数或全零
另一种不同的情况:
假设我想获取存储在特定数组中的所有元素的绝对值。
我可以使用“C”来实现,我的意思是,我可以执行以下操作:
#include <stdio.h>
#include <math.h>
int absolute(int *array, int N);
int main()
{
int array[16] = {0,1,2,3,-4,5,6,7,-8,9,-10,11,12,13,14,20};
int ray[16];
int i;
for ( i = 0; i < 16; i++ )
ray[i]=absolute(array,16);
printf("the absolute value is %d\n", ray[i]);
return 0;
}
int absolute(int *array, int N)
{
int i;
for(i=0; i<N; i++)
if (array[i]<0)
array[i] = array[i] * (-1);
}
我尝试在汇编中这样做(使用 68hc11 指令)
RWM EQU $0
ROM EQU $C000
RESET EQU $FFFE
ORG RWM
ABSOLUTE RMB
ORG ROM
Start:
END BRA END
ARRAY DW 4,144,447,-14,-555,-1147
ORG RESET
DW Start
我想将 ARRAY
中的所有绝对元素存储在 ABSOLUTE 中PS:我没有定义 ABSOLUTE 的大小
我想在 ABSOLUTE 中看到这些值:
4,144,447,14,555,1147(无符号数)
【问题讨论】:
-
部分永远不能大于整体。您只有 15 个号码要检查。因此,您的每个计数器都必须能够在最坏的情况下保持数字 15。这是一般的编程问题,而不是 68HC11。就像在 C 中定义一个足够大的变量来保存结果一样,你必须在这里做同样的事情。
QUANTITY是什么?您指定的数组项数是 15,而不是 200,因此数组的结尾是 ARRAY+15-1。检查结束 (CPX) 时,您可以使用带有 +15 的BLO或带有 +14 的BLS。尝试自己编写一些代码,然后有人可以介入并纠正任何错误。 -
嘿 Tony,QUANTITY 是数组可以容纳的最大数量的值(元素)。在 ARRAY 我放了一些随机值。你明白我的意思吗?。我使用 THRSim11 编写了一些代码(你知道这个程序吗?)但它根本不正确;我还是绿色的,一切似乎有点“奇怪”(我从答案中学到了很多东西,你解释得很好!)
-
@tonypdmtr 我更新了我的问题;我把它分成了两个不同的部分。在第一部分中,我想获取给定数组中 正、负或零元素 的数量,在最后一部分中,我想从给定数组中获取绝对值。你能帮我解决这两种情况吗?