汇编高手请帮个忙 100个字符符号数组,求负数 零 正数的个数,存放到存储器中

100个字符符号数组,求负数 零 正数的个数,存放到存储器中

编个程序
只要代码就行
最后有注释
感激不尽

上面的这位大哥,人家要求用汇编语言来编写,你非要用C语言
我来回答,这是我以前回答别人的问题时做的回答,跟你的问题很相似.
这个程序的功能是分开正负数,并存到存储器里,你可以在增加一个记数功能,比如:如果是负数,就用mov sum,0和add sum,1当然sum要先定义.
你要小小的改动一下.
stack segment
dw 32 dup(?)
stack ends
data segment
ARY dw 5,-3,7,-2,8
CT dw ($-ARY)/2 ;元素个数
A dw 2 dup(?) ;为负数存放预留空间
B dw 3 dup(?) ;为正数存放预留空间
data ends
code segment
assume cs:code,ds:data,ss:stack
main proc far
mov ax,data
mov ds,ax
mov bx,0 ;初始化bx
mov cx,CT ;个数
c20: lea si,ARY ;取数组地址
cmp [si],bx ;和0比较
jl c10 ;若小于转
mov B,[si] ;大于则存
jmp c30
c10: mov A,[si]
c30: add si,2 ;修改地址指针
loop c20 ;循环
mov ah,4ch
int 21h
main endp
code ends
end main
温馨提示:答案为网友推荐,仅供参考
第1个回答  2007-01-20
你那100个字符要自己输进去的话,就用C语言来编会更好!以下是用8052单片机的PA0口做输入,PA1和PA2和PA3分别做负数,零,正数的个数的输出口。
#include "reg52.h"
#include "stdio.h"
sbit pa_0=pa^0;
sbit pa_1=pa^1;
sbit pa_2=pa^2;
sbit pa_3=pa^3;
main()
{
unsigned char a[100];
unsigned int i,j;
unsigned count1=count2=count3=0;
for(i=0;i<100;)
{scanf("%c",&pa_0);
a[i]=pa_0;
i++;}
for(j=0;j<100;j++)
{case:a[j]<0;count1++;break;
case:a[j]=0;count2++;break;
case:a[j]>0;count3++;break;
}
pa1=count1;
pa2=count2;
pa3=count3;
printf("the negtive number is:");
printf("%d\n",pa1);
printf("the zero number is:");
printf("%d\n",pa2);
printf("the positive number is:");
printf("%d\n",pa3);
}
}

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网