
3. 编写一程序使其实现将1个包含有20个数据的数组M分成两个数组:正数数组P和负数数组N,
1.编写一程序使其实现将1个包含有20个数据的数组M分成两个数组:正数数组P和负数数组N,并分别把两个数组显示出来。...
1. 编写一程序使其实现将1个包含有20个数据的数组M分成两个数组:正数数组P和负数数组N,并分别把两个数组显示出来。
展开
2个回答
展开全部
答:程序如下:
DSEGSEGMENT
COUNTEQU 20
ARRAYDW 20 DUP (?);存放数组
COUNT1DB 0;存放正数的个数
ARRAY1DW 20 DUP (?);存放正数
COUNT2DB 0;存放负数的个数
ARRAY2DW 20 DUP (?);存放负数
ZHENDB 0DH, 0AH, ‘The positive number is:’, ‘$’;正数的个数是:
FUDB 0DH, 0AH, ‘The negative number is:’, ‘$’ ;负数的个数是:
CRLFDB 0DH, 0AH, ‘$’
DSEGENDS
;--------------------------------------------------------------------------
CSEGSEGMENT
MAINPROCFAR
ASSUME CS: CSEG, DS: DSEG
START:PUSHDS;设置返回DOS
SUBAX, AX
PUSHAX
MOVAX, DSEG
MOVDS, AX;给DS赋值
BEGIN:MOVCX, COUNT
LEABX, ARRAY
LEASI, ARRAY1
LEADI, ARRAY2
BEGIN1:MOVAX, [BX]
CMPAX, 0;是负数码?
JSFUSHU
MOV[SI], AX;是正数,存入正数数组
INCCOUNT1;正数个数+1
ADDSI, 2
JMPSHORT NEXT
FUSHU:MOV[DI], AX;是负数,存入负数数组
INCCOUNT2;负数个数+1
ADDDI, 2
NEXT:ADDBX, 2
LOOPBEGIN1
LEADX, ZHEN;显示正数个数
MOVAL, COUNT1
CALLDISPLAY;调显示子程序
LEADX, FU;显示负数个数
MOVAL, COUNT2
CALLDISPLAY;调显示子程序
RET
MAINENDP
;--------------------------------------------------------------------------
DISPLAYPROCNEAR;显示子程序
MOVAH, 9;显示一个字符串的DOS调用
INT21H
AAM;将(AL)中的二进制数转换为二个非压缩BCD码
ADDAH, ‘0’;变为0~9的ASCII码
MOVDL, AH
MOVAH, 2;显示一个字符的DOS调用
INT21H
ADDAL, ‘0’;变为0~9的ASCII码
MOVDL, AL
MOVAH, 2;显示一个字符的DOS调用
INT21H
LEADX, CRLF;显示回车换行
MOVAH, 9;显示一个字符串的DOS调用
INT21H
RET
DISPLAYENDP;显示子程序结束
CSEGENDS;以上定义代码段
;--------------------------------------------------------------------------
ENDSTART
DSEGSEGMENT
COUNTEQU 20
ARRAYDW 20 DUP (?);存放数组
COUNT1DB 0;存放正数的个数
ARRAY1DW 20 DUP (?);存放正数
COUNT2DB 0;存放负数的个数
ARRAY2DW 20 DUP (?);存放负数
ZHENDB 0DH, 0AH, ‘The positive number is:’, ‘$’;正数的个数是:
FUDB 0DH, 0AH, ‘The negative number is:’, ‘$’ ;负数的个数是:
CRLFDB 0DH, 0AH, ‘$’
DSEGENDS
;--------------------------------------------------------------------------
CSEGSEGMENT
MAINPROCFAR
ASSUME CS: CSEG, DS: DSEG
START:PUSHDS;设置返回DOS
SUBAX, AX
PUSHAX
MOVAX, DSEG
MOVDS, AX;给DS赋值
BEGIN:MOVCX, COUNT
LEABX, ARRAY
LEASI, ARRAY1
LEADI, ARRAY2
BEGIN1:MOVAX, [BX]
CMPAX, 0;是负数码?
JSFUSHU
MOV[SI], AX;是正数,存入正数数组
INCCOUNT1;正数个数+1
ADDSI, 2
JMPSHORT NEXT
FUSHU:MOV[DI], AX;是负数,存入负数数组
INCCOUNT2;负数个数+1
ADDDI, 2
NEXT:ADDBX, 2
LOOPBEGIN1
LEADX, ZHEN;显示正数个数
MOVAL, COUNT1
CALLDISPLAY;调显示子程序
LEADX, FU;显示负数个数
MOVAL, COUNT2
CALLDISPLAY;调显示子程序
RET
MAINENDP
;--------------------------------------------------------------------------
DISPLAYPROCNEAR;显示子程序
MOVAH, 9;显示一个字符串的DOS调用
INT21H
AAM;将(AL)中的二进制数转换为二个非压缩BCD码
ADDAH, ‘0’;变为0~9的ASCII码
MOVDL, AH
MOVAH, 2;显示一个字符的DOS调用
INT21H
ADDAL, ‘0’;变为0~9的ASCII码
MOVDL, AL
MOVAH, 2;显示一个字符的DOS调用
INT21H
LEADX, CRLF;显示回车换行
MOVAH, 9;显示一个字符串的DOS调用
INT21H
RET
DISPLAYENDP;显示子程序结束
CSEGENDS;以上定义代码段
;--------------------------------------------------------------------------
ENDSTART
展开全部
汇编写数组,难度大了。
追问
那用c写吧。。。
追答
#include
#define N 20
main()
{
int n[N] = {1,2,3,4,-5,6,7,-8,9,0,1,2,3,-4,5,6,7,8,9,0};
int z[N], f[N], zcount=0,fcount=0, i;
for(i=0; i0){z[zcount]=n[i];zcount++;}
else if(n[i]<0){f[fcount]=n[i];fcount++;}
}
printf("\nzhengshu : ");
for(i=0; i<zcount; i++)
printf("%d ", z[i]);
printf("\nfushu : ");
for(i=0; i<fcount; i++)
printf("%d ", f[i]);
printf("\n");
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询