注册 登录
编程论坛 汇编论坛

一个简单的汇编问题

叫我稳哥 发布于 2010-11-23 22:53, 609 次点击
3、    按如下要求编写程序:
设4000H单元开始有10个数,编程计算这十个数的平均值(存放在DH中),并统计这十个数中,大于平均值的个数(存放在DL中)。找出这十个数的最大值和最小值(存在在BH和BL中)
3 回复
#2
xiaomarn2010-11-24 12:15
程序代码:
#include<dos.h>
#include<stdio.h>

int sum(char*,int);
int great(char*,int,char);
char max(char*,int);
char min(char*,int);

int
main(void)
{
      union REGS reg,reg2,reg3;
      struct SREGS sreg;
      int i;
      char s[]="Press any key to continue!$";
      char* a=(char*)0x4000;

      reg.h.dh=sum(a,10);
      reg.h.dl=great(a,10,reg.h.dh);
      reg.h.bh=max(a,10);
      reg.h.bl=min(a,10);

      printf("dh=%d,dl=%d,bh=%d,bl=%d\n",reg.h.dh,reg.h.dl,reg.h.bh,reg.h.bl);
      reg2.x.dx=FP_OFF(s);
      reg2.h.ah=9;
      sreg.ds=FP_SEG(s);
      intdosx(&reg2,&reg3,&sreg);

      getch();
      return 0;
}

int
sum(char* addr,int size)
{
      int sum2=0,i;
      char temp;

      asm mov si,addr
      for(i=0;i<size;i++)
      {
            asm lodsb
            asm mov temp,al
            sum2+=temp;
      }

      return sum2/size;
}

int
great(char* addr,int size,char aver)
{
      int num=0,i;
      char temp;

      asm mov si,addr
      for(i=0;i<size;i++)
      {
            asm lodsb
            asm mov temp,al
            if(temp>aver)
                  num++;
     }

     return num;
}

char
max(char* addr,int size)
{
      char m,temp;
      int i;
      asm mov si,addr
      asm lodsb
      asm mov m,al

      for(i=1;i<size;i++)
      {
            asm lodsb
            asm mov temp,al
            if(temp>m)
                  m=temp;
     }

     return m;
}

char min(char* addr,int size)
{
      char m,temp;
      int i;

      asm mov si,addr
      asm lodsb
      asm mov m,al
      for(i=1;i<size;i++)
      {
            asm lodsb
            asm mov temp,al
            if(temp<m)
                  m=temp;
     }
     return m;
}

#3
叫我稳哥2010-11-24 22:16
大哥我要的是汇编语言啊你怎么弄个c语言啊虽然很谢谢你啊
1