编写程序求出首地址为DAT的十六个带符号字数据中的最大奇数,并将这个数存到DAT1单元中 用汇编

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编写程序求出首地址为DAT的十六个带符号字数据中的最大奇数,并将这个数存到DAT1单元中 用汇编相关的知识,希望对你有一定的参考价值。

编写程序求出首地址为DAT的十六个带符号字数据中的最大奇数,并将这个数存到DAT1单元中
用汇编语言编写

m,int k,int xx[]),该函数的功能是:将大于整数m且紧靠m的k个素数存入数组xx传回。
最后调用函数writeDat()读取10组数据,分别得出结果且把结果输出到文件out.dat中。
部分源程序存在文件prog1.c中。
例如:若输入17 5 则应输出:19,23,29,31,37。
请勿改动主函数main()和写函数writeDat()的内容。
int isP(int m)

int i;
for(i=2;i<m;i++)
if(m % i==0)return 0;
return 1;


void num(int m,int k,int xx[])
int s=0;
for(m=m+1;k>0;m++)
if(isP(m))

*********************************
题目2
已知数据文件IN.DAT中存有200个四位数,并已调用读函数readDat()把这些数存入数组a中,请考生编制一函数jsVal(),其功能是:如果四位数各位上的数字均是0或2或4或6或8,则统计出满足此条件的个数cnt,并把这些四位数按从大到小的顺序存入数组b中。最后main( )函数调用写函数writeDat()把结果cnt以及数组b中符合条件的四位数输出到OUT.DAT文件中。
注意:部分源程序存在文件prog1.c中。
程序中已定义数组:a[200],b[200],已定义变量:cnt
请勿改动数据文件IN.DAT中的任何数据、主函数main()、读函数readDat()和写函数writeDat()的内容。
void jsVal()
int i,j,qw,bw,sw,gw;
for(i=0;i<MAX;i++)
qw=a[i]/1000; bw=a[i]/100%10;
sw=a[i]%100/10; gw=a[i]%10;
if(qw&&qw%2==0&&bw%2==0&&sw%2==0&&gw%2==0) b[cnt++]=a[i];

for(i=0;i<cnt-1;i++)
for(j=i+1;j<cnt;j++)
if(b[i]<b[j])

*********************************★题目3
函数ReadDat( )实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中;请编制函数StrOR( ),其函数的功能是:以行为单位依次把字符串中所有小写字母o左边的字符串内容移到该串的右边存放,然后把小写字母o删除,余下的字符串内容移到已处理字符串的左边存放,之后把已处理的字符串仍按行重新存入字符串数组xx中。最后main()函数调用函数WriteDat()把结果xx输出到文件OUT5.DAT中。

原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。
注意:部分源程序存放在文件prog1.c中。
请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。

void StrOR(void)
int i,righto,j,s,k;
char tem[80];
for(i=0;i<maxline;i++)
for(j=strlen(xx[i])-1;j>=0;j--)
k=0; memset(tem,0,80);
if(xx[i][j]=='o')
righto=j;
for(s=righto+1;s<strlen(xx[i]);s++)
tem[k++]=xx[i][s];
for(s=0;s<righto;s++)
if(xx[i][s]!='o')
tem[k++]=xx[i][s];
strcpy(xx[i],tem);

else continue;

★题目4
函数ReadDat()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中,请编制函数StrOL(),其函数的功能是:以行为单位对行中以空格或标点符号为分隔的所有单词进行倒排。最后把已处理的字符串(应不含标点符号)仍按行重新存入字符串数组xx中,最后调用函数writeDat()把结果xx输出到文件OUT6.DAT中。
例如:原文:You He Me
I am a student.
结果:Me He You
student a am I
原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。
部分源程序存在文件prog1.c中。
请勿改动主函数main()、读数据函数ReadDat()和输出数据函数writeDat()的内容。
void StrOL(void)
int i,j,k,s,m,strl;
char str[80];
for(i=0;i<maxline;i++)
strl=strlen(xx[i]);
memset(str,0,80);
s=k=0;
for(j=strl-1;j>=0;j--)
if(isalpha(xx[i][j])) k++;
else for(m=1;m<=k;m++)
str[s++]=xx[i][j+m];
k=0;

if(!isalpha(xx[i][j]))
str[s++]=' ';

for(m=1;m<=k;m++)
str[s++]=xx[i][j+m];
str[s]='\0';
strcpy(xx[i],str);

**********************************
☆题目5(整数排序题)
在文件in.dat中有200个正整数,且每个数均在1000至9999之间。函数ReadDat()读取这200个数存放到数组aa中。请编制函数jsSort(),其函数的功能是:要求按每个数的后三位的大小进行升序排列,然后取出满足此条件的前10个数依次存入数组bb中,如果后三位的数值相等,则按原先的数值进行降序排列。最后调用函数WriteDat()把结果bb输出到文件out.dat中。
例:处理前 6012 5099 9012 7025 8088
处理后 9012 6012 7025 8088 5099
部分源程序存在文件prog1.c中。
请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。

void jsSort()

int i,j,data;
for(i=0;i<199;i++)
for(j=i+1;j<200;j++) if(aa[i]%1000>aa[j]%1000||aa[i]%1000==aa[j]%1000&&aa[i]<aa[j])
for(i=0;i<10;i++)
bb[i]=aa[i];

*********************************
☆题目6 正整数排序
在文件in.dat中有200个正整数,且每个数均在1000至9999之间。函数ReadDat()读取这200个数存放到数组aa中。请编制函数jsSort(),其函数的功能是:要求按每个数的后三位的大小进行降序排列,然后取出满足此条件的前10个数依次存入数组b中,如果后三位的数值相等,则按原先的数值进行升序排列。最后调用函数WriteDat()把结果bb输出到文件out.dat中。
例:处理前 9012 5099 6012 7025 8088
处理后 5099 8088 7025 6012 9012
注意:部分源程序已给出。
请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。

void jsSort()

int i,j,data;
for(i=0;i<199;i++)
for(j=i+1;j<200;j++)
if(aa[i]%1000<aa[j]%1000||aa[i]%1000==aa[j]%1000&&aa[i]>aa[j])

for(i=0;i<10;i++)
bb[i]=aa[i];

题目37(字符替换题)
函数ReadDat()实现从文件ENG.IN中读取一篇英文文章,存入到字符串数组xx中;请编制函数encryptChar(),按给定的替代关系对数组xx中的所有字符进行替代,仍存入数组xx的对应的位置上,最后调用函数WriteDat()把结果xx输出到文件PS7.DAT中。
替代关系:f(p)=p*11 mod 256(p是数组中某一个字符的ASCII值,f(p)是计算后新字符的ASCII值),如果原字符是大写字母或计算后f(p)值小于等于32,则该字符不变,否则将f(p)所对应的字符进行替代。
部分源程序存在文件prog1.c中。原始数据文件存放的格式是:每行的宽度均小于80个字符。
请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。
void encryptChar()
int i,j;
for(i=0;i<maxline;i++)
for(j=0;j<strlen(xx[i]);j++)
if(xx[i][j]*11%256<=32||xx[i][j]>='A'&&xx[i][j]<='Z') continue;
else xx[i][j]=xx[i][j]*11%256;


*******************************
★☆题目39(选票问题)
现有一个10个人100行的选票数据文件IN.DAT,其数据存放的格式是每条记录的长度均为10位,第一位表示第一个人的选中情况,第二位表示第二个人的选中情况,依此类推 :内容均为字符0和1,1表示此人被选中,0表示此人未被选中,全选或不选均为无效的选票。给定函数ReadDat()的功能是把选票数据读入到字符串数组xx中。请编制函数CountRs()来统计每个人的选票数并把得票数依次存入yy[0]到yy[9]中。把结果yy输出到文件OUT.DAT中。
部分源程序存在文件prog1.c中。
请勿改动主函数main()、读数据函数ReadDat()和输出数据函数writeDat()的内容。
void CountRs(void)
int i,j,count;
for(i=0;i<100;i++)
count=0;
for(j=0;j<10;j++)
if(xx[i][j]=='1') count++;
if(count==0||count==10) continue;
for(j=0;j<10;j++)
if(xx[i][j]=='1') yy[j]++;



******************************
☆题目41(SIX/NINE问题)
下列程序prog1.c的功能是:计算出自然数SIX和NINE,它们满足的条件是SIX+SIX+SIX=NINE+NINE的个数cnt以及满足此条件所有的SIX与NINE的和SUM。请编写函数countValue()实现程序的要求,最后调用函数writeDat()把结果cnt和sum,输出到文件OUT15.DAT中。
其中的S,I,X,N,E各代表一个十进制数字。
部分源程序存在文件prog1.c中。
请勿改动主函数main()和输出数据函数writeDat()的内容。
#include <stdio.h>
int cnt,sum;

void countValue()
int s,i,x,n,e,six,nine;
for(s=1;s<10;s++)
for(i=0;i<10;i++)
for(x=0;x<10;x++)
for(n=1;n<10;n++)
for(e=0;e<10;e++)
six=s*100+i*10+x;
nine=n*1000+i*100+n*10+e;
if(3*six==2*nine)




******************************
题目55(素数统计排序题)
已知数据文件in.dat中存有300个四位数,并已调用读函数ReadDat()把这些数存入数组a中,请编制一函数jsValue(),其功能是:求出所有这些四位数是素数的个数cnt,再把所有满足此条件的四位数依次存入数组b中,然后对数组b的四位数按从小到大的顺序进行排序,最后调用写函数writeDat()把结果输出到out.dat文件。
例如:5591是素数,则该数满足条件存入数组b中,且个数cnt=cnt+1。9812是非素数,则该数不满足条件忽略。
部分源程序存在文件prog1.c中。
程序中已定义数组:a[300],b[300],已定义变量:cnt
请勿改动主函数main()、读函数ReadDat()和写函数writeDat()的内容。
int isP(int m)
int i;
for(i=2;i<m;i++)
if(m%i==0)return 0;
return 1;


jsValue()
int i,j,value;
for(i=0;i<300;i++)
if(isP(a[i])) b[cnt++]=a[i];
for(i=0;i<cnt-1;i++)
for(j=i+1;j<cnt;j++)
if(b[i]>b[j])


*******************************
题目56(字符替换题)
函数ReadDat()实现从文件ENG.IN中读取一篇英文文章,存入到字符串数组xx中;请编制函数encryptChar(),按给定的替代关系对数组xx中的所有字符进行替代,仍存入数组xx的对应的位置上,最后调用函数WriteDat()把结果xx输出到文件PS5.DAT中。
替代关系:f(p)=p*11mod 256 (p是数组中某一个字符的ASCII值,f(p)是计算后新字符的ASCII值),如果计算后f(p)值小于等于32或f(p)对应的字符是小写字母,则该字符不变,否则将f(p)所对应的字符进行替代。
部分源程序存在文件prog1.c中。原始数据文件存放的格式是:每行的宽度均小于80个字符。
请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。
void encryptChar()
int i,j;
for(i=0;i<maxline;i++)
for(j=0;j<strlen(xx[i]);j++)
if(xx[i][j]*11%256<=32||xx[i][j]*11%256>='a'&&xx[i][j]*11%256<='z') continue;
else xx[i][j]=xx[i][j]*11%256;
参考技术A

网友采纳答案是错误的。

他所写的,根本就不是汇编语言。

《邹锐  V3》,这个人,就是不折不扣的骗子。


正确程序如下:

;求首地址为DAT的16个带符号字数据中的最大奇数,存到DAT1单元
;-------------------------------------------
DSEG   SEGMENT
    DAT   DW   12, -56, 0, 100, 99, 76, 49, 88 ;楼主自己写全数据
NN  EQU  ($ - DAT ) / 2
    DAT1  DW   -32767
DSEG   ENDS
;-------------------------------------------
CSEG   SEGMENT
    ASSUME   CS:CSEG, DS:DSEG
START:
    MOV   AX, DSEG
    MOV   DS, AX

    MOV   BX, 0
    MOV   CX, NN
LP: MOV   AX, [BX]
    TEST  AX, 1
    JZ    NXT
    CMP   AX, DAT1
    JL    NXT
    MOV   DAT1, AX
NXT:ADD   BX, 2
    LOOP  LP  

EXIT:    
    MOV   AH, 4CH 
    INT   21H
CSEG   ENDS
    END   START
;-------------------------------------------

协议类型

ppp:Public—Private—Partnership

1.1 PPP帧的首部

  • 首部中的标志字段F(Flag),规定为0x7E(符号0x表示它后面的字符是用十六进制表示的。十六进制的7E的二进制表示是01111110),标志字段表示一个帧的开始。

  • 首部中的地址字段A规定为0xFF(即11111111)。

  • 首部中的控制字段C规定为0x03(即00000011)。

  • 首部中的2字节的协议字段: 
    (1)当协议字段为0x0021时,PPP帧的信息字段就是IP数据报。 
    (2)当协议字段为0xC021时,PPP帧的信息字段就是PPP链路控制协议LCP的数据。 
    (3)当协议字段为0x8021时,PPP帧的信息字段就是网络层的控制数据。

1.2 PPP帧的信息字段部分

  • 信息字段的长度是可变的,不超过1500字节。

1.3 PPP帧的尾部

  • 尾部中的第一个字段(2个字节)是使用CRC的帧检验序列FCS。

  • 尾部中的标志字段F(Flag),规定为0x7E(符号0x表示它后面的字符是用十六进制表示的。十六进制的7E的二进制表示是01111110),标志字段表示一个帧的结束。



HDLC——面向比特的同步协议:High Level Data Link Control

技术分享

技术分享



以上是关于编写程序求出首地址为DAT的十六个带符号字数据中的最大奇数,并将这个数存到DAT1单元中 用汇编的主要内容,如果未能解决你的问题,请参考以下文章

怎样将十六进制代码转换成文字?

已知从BUF开始存放了10个字类型有符号数据,编程求出这10个数中的最大数和最小数(将最大数存入MAX字单元最小数存入MIN字单元),并将其以10进制数的形式在屏幕上显示出来。

两个十六进制内存地址之间区域中的字节

C中的无符号十六进制常量?

冒泡排序法的十六种写法

十六进制颜色如何工作?